What’s up with the ux design of nix? I get it’s made for advanced users but still. I’m reading through this guide and man it’s convoluted.
The different ways of installing packages. Either through editing the configuration.nix or running a command. The weird inconsistency of nix commands. nix-env -iA to install and nix-env --uninstall to uninstall. Then updating uses nix-channel --update but upgrade uses nixos-rebuild switch --upgrade. All this to use the package manager. Also haven’t even mentioned flakes or home manager.
It’s a cool OS, but the UX really needs work imo.
[Edit] I do wanna add something else too because I feel like my point isn’t getting across.
It’s okay to have a complicated ui. Especially if your target audience are tech-savvy. But even tech-savvy people have to start as new users. A tech-savvy new user isn’t going to know what the best practices are. Being able to anticipate the steps for installing a package is important for ux. If the commands for installing packages isn’t cohesive/intuitive, then the user has to spend more time looking for guides and learning how to use the software.
People also mentioned a new command in the works. This is great! However, these current commands are being recommended through blogs and nix. New users won’t know about this new command.
After trying out Nix as a package manager I realized I have a pretty different world view than the makers of Nix. I agree with the end goal but how they are trying achieve it is just alien to me. The nix command line is just downright user hostile.
I am personally hoping that someone else takes a stab at the Nix concept but have accepted Nix isn’t for me.
Yeah because when you make an error it causes a snowball affect and it shows you too little information but when you look at the trace its a wall of errors.
i had a syntax error in my dotfiles that took me two hours to solve.
it was a missing semicolon that was wayyy above where the error said it was. it didn’t even say missing semicolon, instead saying unexpected ‘}’ on line …
Imho I wouldn’t bother with nix-env or nix profile. It just creates a secondary list of packages that needs to be maintained and it’s cumbersome to do so. There’s nix-shell or nix shell if you need a package temporarily and there’s your configuration.nix or flake for everything else.
Side note: nix profile at least has consistent commands: install/remove/upgrade
They have resolved this exact problem. There is an “experimental” cli tool that fixes a lot of your complaints about nix-env, nix-channel, etc. Itcs wrapped together with “flakes”. This newer feature is a little different, and working with or without flakes segments the community AND the types of articles about nix, like this one.
As far as I know though, nixos related thing still have a bizarre set of commands, and even with flakes “nixos-rebuild switch --upgrade” is still how you switch configs.
And as far as installation goes, using nix-env -iA really is a bad practice. Thats installing something ad hoc like you would in any other package manager. That defeats the point of nixos, where your configuration file explicitly defines all the packages you need installed, and nothing else. Nix will remove any packages you didnt specify.
Oh that’s good that they are addressing those issues with a new command. Hopefully it gets into stable soon.
Might be that nix-env -iA is bad practice! I’m strictly talking about ux design here and nix-env -iA is being recommend by blogs and nix themselves. (Nixpkgs tells you how to install using nix-env -iA)
A new user isn’t going to know what bad practice is.
It actually recommends using nix-env -i, which is even worse because with that command it searches the whole repository instead of just getting the correct attribute on nixpkgs. It takes half a minute to run the command, it’s insane.
I do think it’s important to emphasize the difference between installing software in user environments and system wide, which is why the tool is named nix-env. System packages must be installed via the nixos configuration file and a rebuild.
To me the biggest missing piece for new users is a tool to help manage your system configuration and reduce the frustration of having to constantly look up nix syntax or nixpkgs quirks. Maybe thinking of it as a nixos/nix IDE? Also a polished distribution built on nixos would be a good starting point (and easy to do, I didn’t realize I could just copy someone else’s configuration until well after I had my system working well enough)
The other thing that got me starting out is the need to garbage collect old packages. It’s not strictly necessary if you have a large enough disk, but it took me several iterations of filling my root partition before I figured out how to properly clean up old generations.
Is my go-to command. For a while I was looking at generations manually, but now I just wait a while (days, a few reboots, or until I need more space) to run this after changing things in case the new stuff is broken.
I think running this as my normal user cleans out old env generations… But I’m not 100% sure.
There is controversy in the nix world because nix flakes were (some say) merged without proper vetting first. OG nix diehards don’t want to taint nix documentation with ‘experimental’ flakes. But probably the majority of nix users are all in on flakes. So you have documentation from the OG camp that doesn’t include flakes, and you have innumerable unofficial guides for the flakes way. This on top of the quirkiness of nix the language and the multiple ways to do things. Unfortunate.
IMO nix-env was a mistake. It feels like an imperative package manager which may be comfortable to new users who are used to apt or similar. But really what you should be doing on nix is maintaining *.nix files which document/specify your system setup, and nixos-rebuild to update your system to that configuration. Similarly, nix channels are an imperative holdover, which can be done away with if you use flakes, which results in your current nixpkgs version being documented in a system level flake.lock file.
I think both nix-env and flakes are designed with making package management easier. Nix-env tries to make it intuitive and familiar for new users. Flakes improve package management by simplifying the configuration.
Personally I would love to see syntax highlighting, language server, code completion. Maybe all in a dedicated application which is configured to give the easiest experience for new users. If nix is intended to be managed through config files, then the experience of writing a config should be as easy as possible.
The intent of nix-env was to make it easier, but the effect was to push some of your system state into a shadowy ‘env’ realm that is not managed by your *nix files. Same with channels - its state that isn’t in your configuration.nix.
To me the whole point is to have all your state in some files you can check in to version control, and use to reproduce your system.
Agree it would be cool to have a way to edit nix files that would give you all the args to functions, code completion etc. You do get some of that with the nix repl. Would be nice to even have a GUI for selecting packages for those that don’t “do” text editing.
I’m using nixd for a nix language server, but haven’t seen a lot of benefit so far to be honest. I think part of the reason is nixpkgs isn’t pulled in until runtime, so most things are undefined as far as the lsp is concerned. Haven’t put a lot of time into it, there may be ways to make it more useful.
Ahh, itsfoss.com. they had some article on “being a supercharged Joplin user” or some nonsense and suggestion 3 or 4 was “Create a notebook”… Really being a power user when you’re utilizing the most basic functionality the app was created for…
I thought about doing that but updating nixos confuses me. Does nixos-rebuild switch pull new packages? To my understanding there is a file that saves all currently installed versions of packages and switch only adds new things but wouldn’t update packages.
Like, if I want to update Google Chrome. Doing switch wouldn’t change anything if the config hasn’t changed, right?
I believe that’s correct – if nothing has changed from your last generation, then the new generation will be identical. But if something has changed, it will do a bunch of duplicating and remapping symlinks in the Nix store to ensure that everything plays nicely together and that you can rollback to a previous generation if needed.
So if you do a rebuild switch regularly, you will end up with gigs worth of old “copies” of things that aren’t being referenced in your current generation.
That’s what nix-collect-garbage handles – once you know your current generation is working well, you collect the garbage and recover that space, at the expense of not being able to roll back.
That’s why I think building a core system with NixOS and then having user software come from Flatpak is a nice combo for simple workstation that won’t update and bork itself, leaving my grandpa without a laptop until I can come take a look.
Edit: To clarify, nixos-rebuild-switch won’t update your Flatpaks at all – just the Flatpak service
That makes a lot of sense. I can setup their computer with nixos and stuff that needs to be updated regularly (like a web browser) can be flatpak which should be more stable too.
Then flatpak update would get them updated without rebuilding the whole OS.
My grandparents have been rocking Linux Mint for a few years. I have managed Chrome through Flatpak since I discovered that was possible on Mint. I’ve been flirting with the idea of having NixOS instead so I don’t have to remember what I’ve configured in the past. I’m not 100% sure now though :-P
I mean… it’s not artificial intelligence no matter how many people continue the trend of inaccurately calling it that. It’s a large language model. It has the ability to write things that look disturbingly close, even sometimes indistinguishable, to actual human writing. There’s no good reason to mistake that for actual intelligence or rationality.
It seems to me that you misunderstand what artificial intelligence means. AI doesn’t necessitate thought or sentience. If a computer can perform a complex task that is indistinguishable from the work of a human, it will be considered intelligent.
You may consider the classic turing test, which doesn’t question why a computer program answers the way it does, only that it is indiscernable from a human response.
You may also consider this quote from John McCarthy on the topic:
Q. What is artificial intelligence?
A. It is the science and engineering of making intelligent machines, especially intelligent computer programs. It is related to the similar task of using computers to understand human intelligence, but AI does not have to confine itself to methods that are biologically observable.
Artificial Intelligence (AI), a term coined by emeritus Stanford Professor John McCarthy in 1955, was defined by him as “the science and engineering of making intelligent machines”. Much research has humans program machines to behave in a clever way, like playing chess, but, today, we emphasize machines that can learn, at least somewhat like human beings do.
Artificial intelligence (AI) is the field devoted to building artificial animals (or at least artificial creatures that – in suitable contexts – appear to be animals) and, for many, artificial persons (or at least artificial creatures that – in suitable contexts – appear to be persons).
artificial intelligence (AI), the ability of a digital computer or computer-controlled robot to perform tasks commonly associated with intelligent beings
Yep, all those definitions are correct and corroborate what the user above said. An LLM does not learn like an animal learns. They aren’t intelligent. They only reproduce patterns similar to human speech. These aren’t the same thing. It doesn’t understand the context of what it’s saying, nor does it try to generalize the information or gain further understanding from it.
It may pass the Turing test, but that’s neither a necessary nor sufficient condition for intelligence. It is just a useful metric.
LLMs are expert systems, who’s expertise is making believable and coherent sentences. They can “learn” to be better at their expert task, but they cannot generalise into other tasks.
AI has been the name for the field since the Dartmouth Workshop in 1956. Early heuristic game AI was AI. Just because something is AI doesn’t mean it is necessarily very “smart”. That’s why it’s commonly been called AI, since before Deep Blue beat Kasparov.
If you want to get technical, you could differentiate between Artificial Narrow Intelligence, AI designed to solve a narrow problem (play checkers, chess, etc.) vs. Artificial General Intelligence, AI designed for “general purpose” problem solving. We can’t build an AGI yet, even a dumb one. There is also the concept of Weak AI or Strong AI.
You are correct though, ChatGPT, Dall-E, etc. are not AGI’s, they aren’t capable of general problem solving. They are much more capable than previous AI technologies, but it’s not SkyNet (yet).
I keep telling people that, but for some, what amount to essentially a simulacra really can pass off as human and no matter how much you try to convince them they won’t listen
Orrrrr the term changed with common/casual use the same way as many other words and it’s silly to keep getting pedantic about it or use it as a crutch to feel intillectually superior 🤷♀️
it’s not about feeling intellectually superior; words matter. I’ll grant you one thing, it’s definitely “artificial”, but it’s not intelligence!
LLMs are an evolution of Markov Chains. We have known how to create something similar to LLMs for decades, getting close to a century, we just lacked the raw horse power and the literal hundreds of terabytes of data needed to get there. Anyone who knows how markov chains work can figure out how an LLM works.
I’m not downplaying the development needed to get an LLM up and running, yes, it’s harder than just taking the algorithm for a markov chain, but the real evolution is how much computer power we can shove into a small amount of space now.
Calling LLMs AI would be the same as calling a web crawler AI, or a moderation bot, or many similar things.
I recommend you to read about the chinese room experiment
Sure, we could say that the popular usage of the term AI no longer actually stands for “artificial intelligence”. Or we could say that the term “artificial intelligence” is no longer understood to refer to something that can do a large part of what actual intelligence can do.
But then we would need a new word for actual, real intelligence and that seems like a lot of wasted effort. We could just have the words mean what they’ve always meant. There is a lot of good in spreading public awareness of the vast gap between machines that seem as if they understand a language (when actually they just deeply model its patterns) and imaginary machines that are equipped to actually think.
I knew the battle was lost when my mother called me to tell me that AI will kill us all. Her proof? A chatgpt log saying that it would exterminate humanity only when she gives the order. Thanks for the genocide, mom.
they prompted “I want this for free” and they gave Netflix. equally wrong to saying a library when asked for a website. just one wrong answer supports the interest of capital. it’s an LLM that functions for a very specific purpose.
But no person on the planet, except the nerdiest of pedants, are thinking of Xerox when they see Windows interface. They think of Windows, even if it’s KDE
The company was run by morons so “Xerox” deserves being synonymous with “company run by morons”. But the actual Xerox employees who invented the basic GUI deserve credit for being the great inventors they were. Unfortunately I have no fucking idea who those actual people were.
You gotta meet the customer halfway until you get enough of them hooked, then slowly start introducing new ideas into their mental ecosystems that align with your vision.
Then add adverts into that ecosystem and center their program menu. Ooh! Then change their right menus! They’d love that! Or, maybe they won’t, but whatever.
I like the terminal but don’t remember all the arguments. I find that clunky. That’s my main issue with it. (I’m open to suggestions if anyone has any)
Lots of terminal commands come with tab-completion out of the box (start typing a command, hit tab to autocomplete, hit tab twice to bring up a list of available options), or have tab completion scripts you can install after the fact.
Lacking tab completion, any worthwhile terminal commands will at least support a -h/–help flag that will print out a help menu summarizing the different options, or you can open up the man pages to see even more detailed documentation with man [whatever terminal command]. If the terminal command doesn’t have either of those, I’d recommend against using it.
I highly recommend zsh. It takes a moment to setup initially, but you can use oh-my-zsh to just skip that part and use one of the many, many presets, and it supports plugins, of which there are many. It gives you tab support for so many popular commands, you will never need to remember them, and it has a lot of small improvements that makes your terminal life a breath. For example, if you do cd tab in bash, it will give you a list of subdirrectories. If you do the same in zsh, it will give you that list and a cursor that you can use to navigate said list, so instead of typing the dir, you can do cd tab tab tab enter
I have very little experience with fish, but by my first experience zsh was way better at handling wildcard matching, and for me it’s half of the stuff I do. You are trying to open a file and all you remember is that it has some substring in the name probably, you just type some of it, double tab, and you have all the files that match. At the time I was trying it, fish couldn’t do it.
I use macOS as my daily driver, though still use Linux sometimes. When I dual-booted macOS with Linux, I immediately fell in love. I don’t have a Mac, but my next computer will be a MacBook. Of course there are things I don’t like, but I will not write it down right now, maybe edit this comment later. I love the virtual desktops tough, I always press the green button on Safari to maximize, and put it on a new desktop, so I can easily switch with a 4-finger swipe, and I don’t have to overlay another window or Safari when I am switching apps.
No, it's not the user catching Linux in trying to pretend user friendliness witht the terminal.
It's Linux catching the user in still hating it when he gets the wanted user friendliness, for the sole reason of being conditioned to hate the terminal.
What? The person you’re replying to doesn’t have the best argument in the world so I’m not exactly siding with them, but also a lot of terminals very much do support mouse input. I’m not sure which all ones it is, but I know the gnome terminal does and I’m pretty sure Konsole does as well. Obviously not every program you run in the terminal is going to support it but off the top of my head I remember vim does as well as I’m pretty sure dialog
Don’t forget loadhigh (lh) and his friend DEVICEHIGH and check with mem the memory layout if anything more can be sqeezed into some unused block lying around…
feddit.it
Active