the best part is that for NixOS you can make a flake in which you can declare your entire system configuration including filesystems, environment variables, what shell to use, dotfiles and more. then you can take it further and have multiple outputs in a flake, one for each machine you use!
Been using NixOS for about 9 years. Love it. I use it at work, I have since ported it to an ereader, game console, Chromebooks, etc. I use it for absolutely everything.
@Mr.W like the video said, all the emulators are packaged and available. I also have access Gnome 3 so it's also useful for writing code on. 4GB RAM and ARM64. Pretty cool!
@@BrianMcKennaPuffnfresh if you dont mind me asking, how did you get started on porting oses to insteresting hardware? Ive been wanting to do this, but dont really know what i would have to learn. are there any books or resources you can reccomend?
The best thing i've ever did was switching from arch to NixOS, it's so good. Pretty hard to get used to it at first tho but now i managed to setup a hyprland + nvidia config for my dev environment
exactly my story minus the hyprland (I'm an awesomeWM diehard). What's even better is it took me about 10 minutes to switch laptops last summer because all my system and application config was handled by nix down to the kernel modules
Nix is a very casual way to homebrew your Mac without using homebrew because Most apple engineers will not repair your device if it has homebrew or cydia on it, however nix is less known and can fly under the radar
Doesn't MacOS support full disk encryption? I think it was called FileVault or something. If you meant 'repairing' the OS, then I guess I'd agree with these engineers. If you messed up your system with a weird PATH, you should probably learn how it works and fix it yourself
If a company refused to service your computer because of a piece of soft are that runs on their hardware, then you take them to court. I think you are lying
Nix is amazing. I'm one of the contributors and I maintain the Lens package. I'm coming out with the Flutter Engine being packaged. I've had a lot of experience with it and yeah, there's a huge learning curve but it's very powerful.
It really seems to be capturing the spotlight lately. First DistroTube, then Switched to Linux, now Mental Outlaw. Is this the year of the Nixos desktop? :D
Don't take this the wrong way, I generally like what you do, I usually learn something new, but I was expecting a comparison against other package managers (explaining what it does better, what others cant do), instead I saw a video of a man installing a package manager, installing librewolf and searching for some other packages. Maybe there was some of the former, but the later seemed to take the most time.
I had that thought as well. If you are just installing packages via nix-env you are doing it wrong (home-manager is what you want). I find Nix to be an intriguing idea but the implementation is highly esoteric and plagued by garbage documentation (particularly for the highly vaunted flakes) that will not really help you beyond the basic hello world and canned simple examples. While building reproducible environments is one of the touted features, doing a node project the nix way with other binary dependencies was a nightmare to get working and other users had issues on their machines. ASDF and go-task glue did a better job in a tiny fraction of the time and just works without having to mess with esoteric syntax. Having seen nix in action at a large tech company with an entire team maintaining internal nix tooling, I now get why they needed a whole team. Working for a startup, you can guess which solution won out for me.
Right? Besides, for automated deployments you should really have an abstraction layer, such as Ansible. Then, it defeats the purpose of having the same package manager on every system.
@@Gunzy83 I have a somewhat different experience. Yes, you have to learn the nix language a little bit, but that is true every time you use a new language, that isn't just a reskin of C, syntactically speaking (and semantically speaking for a good portion of language semantics). And you can go a long way with just copy pasting a basic nix-shell script and changing out the listed packages. That is what I did a good while. What was your problem with "other binary dependencies"? The only problem I could imagine is if they are not packaged. But as long as you use nix on another host distro, you can just get it any other way.
He starts off with it. Nix will run on any system. It is common knowledge that nix is deterministic, so you can pull your cobfig on any system and deterministically create exactly what you want. That's the whole point of nix. It's worse in most ways in which it is comperable to other managers, so that's not a very i teresting video. Making a nix.config is tedious and it runs slower.
Other than their repo, the OS itself is also pretty cool. The ability to literally save your entire system to a text file is absurdly powerful, but the thing that prevents me from using their OS is doing anything relating to system settings like bypassing the need for authentication or passwords is an absolute nightmare.
You can set autologin (if that's what you mean) and also `security.sudo.wheelNeedsPassword = false` so you can sudo without having to enter your password.
another thing that's cool about nix/nixOS is the overrides. You can change many things of a package's/derivation's definition, similar to USE flags sometimes (if provided by the packager, but you can define stuff like that too), but also being to change whatever of the package! Adding patches, removing them, changing sources, changing commands of the build process... That said, nix/nixos has its fair share of issues *sometimes*, you might come across stuff that doenst work right, but that's fairly rare.
Since Nix is reproducible, it can reap the benefits of both binary-based _and_ source-based packages managers. If the particular configuration you request is available in Hydra, then it will just download from there. If not, then it will grab the build dependencies and compile exactly the specifications you asked for. Hail Hydra! (Yes, that's the name of the automated build server.)
I see that you are pretty new to Nix. You have a lot of nice things yet to discover but here are some that really stood out to me in the video: * You are using Nix, the package manager, not NixOS (you sometimes to use the names interchangeably). * 5:09 flakes serve a completely different purpose. They are kind of the new way to write nix configs. * 5:57 those are not really "instructions". Those things are exactly the same all the time and just list some of the options how you can get the package. * 6:04 nix-env is imperative, you might want to look into declarative configs using home-manager or flakes.
Nix could be used to switch GNU Stow, since it handles dotfiles nicely with the home-manager project. Also, having one tool to install all other tools, runtimes, apps and services in a isolated and reproducible way is too good.
There is also Guix, loosely based on Nix, but uses Lisp, and is overall much cleaner and more declarative. I've used it for months, and it's super comfy for many tasks. It's also highly bootstrappable, removing the problem of "Reflections on Trusting Trust"
Guix is not bad, but there are many buts! The entry threshold is higher than that of Nyx OS + less packages. About 26 thousand against 80 thousand. And besides, installing something proprietary is more difficult.
Been waiting for someone to make a video on Nix! I've been loving nix, and it's amazing. With home-manager and NixOS i can have my whole configured in one place.
Oh man it's 23:43 right now, but the video being about the nix paclage manger makes me interested. Will watch it once I wake up early tomorrow before workout!
People never talk about how much package managers are a huge barrier for new linux users. I used to think you needed programs to be make specifically for Ubuntu or Arch and if they weren't in the repos then you were just screwed. It really hindered my progress a lot and made me want to go back to windows where I could just find the programs I needed online
Librewolf constantly falls behind on firefox updates. This is a security nightmare. Especially because it’s very trivial to just install ublock origin yourself and change the few settings to your liking.
If GNU didn't limit the official repos to exclusively libre software, I think Guix would be an even better package manager, but as it stands I have to agree that Nix takes first place. As for Nixos, it is the distro I recommend to new users who don't yet have much Linux savvy to unlearn, but are ready to commit. The drawback of its unconvential paradigm (e.g. the nix syntax) is, of course, that you end up getting pushed down a rather unique path and that experience doesn't translate well in the other direction, to more conventional distros, either. What bothers me more though, is that Nixos' config file doesn't actually make all installed packages explicit. So even if you remove all packages listed and rebuild, you will still have software installed, e.g. as part of the desktop environment. This seems to go against the principle of having the entire system configuration contained inside a single file. Furthermore, rebuilding the same configuration on exactly the same architecture will not always give 100% consistent results, so the much touted reproducibility is also not quite there yet. Finally, the documentation is an absolute mess of instructions written for different versions but then never brought into line. But other than those criticisms, I have nothing but praise. Thank you for coming to my TED talk.
what do you expect of the config file where would you expect extra packages to be listed normally it's added to environment.systemPackages if you were to add all the parts of the DE manually it would be inconvenient you would have to add EVERYTHING by hand basic stuff like sudo included if you're insane enough you can try
@@genericgamer1319 Whether wanting such fine-grained control is insane or not, it is exactly what I understand Nixos to be advertizing. So of course, I would indeed expect the ability to remove basic packages (e.g. sudo, vi, file and window managers) by means of the config file. Like reproducible builds, that was one of the main selling points after all.
@@seerlite5256 Yup. Pretty essential if you're running x86. Choice of firmware and microcode is strictly better then being stuck with whatever buggy and insecure versions you already have
@@seerlite5256 the issue is that Nonguix is source-based only. Also, for some reason, Guix substitute servers are really slow. But otherwise, I much prefer Guix than Nix
Thank you so much for this video! I've been struggling for a while with trying to use Arch with the AUR, but it always seemed to break on me. I really liked using Debian, but the lack of packages made it difficult for me to use it for my needs. I'm now able to combine the stability of Debian with the packages that I need. Thanks again for sharing this information, it's a lifesaver!
I was literally just thinking today about how I wanted to move away from Arch since each distro seems to have it's own little annoyances that crop up every now and again, but the AUR was just too good. Nix looks amazing!
To be fair nix repos aren’t nearly as complete as the AUR, despite what outlaw said. Actually, there are tons of less popular packages missing, I guess most of the 80000 packages are just some variations/old versions of other packages.
@Mattia Borda it's uncommon to have multiple versions of things. Nix allows you to reference old versions from nixpkgs so there's not much reason to keep old versions in nixpkgs.
@@BrianMcKennaPuffnfresh denaro, komikku, zapzap, telegrand, identity, avvie, video downloader, cavalier, upscaler, gradience... This is stuff I found in just 5 minutes. Can you name me packages from nixpkgs not in the AUR?
NixOS is excellent but keep in mind that the advantage of things like Flatpak and Snap is they will run software in a sandbox, which can be helpful if it's a proprietary something that you don't fully trust.
NixOS is really awesome. It's step above all other distros. If only adoption increased a lot, so that it wouldn't require so much work to solve relatively uncommon problems (because it'd already be done by someone else)...
I’m so used to the Mac Terminal(MacPorts and Homebrew) and Debian(Kali) apt. But the package manager seems really interesting. I give it a try at both. My first Linux was Gentoo in 2003. So used to apt installation I never liked anything else then BSD based and Debian distros.
Nix is great, I just wish it had more GUI frontends for things. I prefer using a GUI (using Octopi atm) to manage my packages, and Nix doesn't seem to have anything like that yet.
there's a guy working on making that, and honestly the way nix /nixos is, it literally is begging for a ui to be made for it, all the settings and whatnot could be toggled by a nice ui...
you should mention that nix derrivations can be overrided, so you can take any package and just change compilation options or where you get the source from or apply custom patches. the idea is since it is source based, and deterministic, if you don't override a derivation, you are gonna download it from a binary cache but if you do override it you are gonna compile it.
You are right, but AUR has 12879 contributors while Nix has 2400, pretty impressive that these contributors could package so many software. AUR is still unbeatable, Arch is practically anywhere in the linux community, props to them
When you compare the package number between Nix and the AUR, you are forgetting that the AUR does not contain the packages in the official repos (13754 as of right now).
The are a lot of duplicates between the two, mainly from numbered releases in the main repos and guy trunks un AUR, which makes it harder to really compare. With mentioning about Nixpkgs is the fact that the entire thing is just a normal GitHub repository that anyone can submit issues and pull requests to. Even when an updated version isn't in nixpkgs-unstable, someone's probably already made a PR to fix that and its possible to install directly from that PR rather than waiting for it to get merged.
I have no plans to stop using linux anytime soon, but this was my biggest complaint about it. Not necessarily that you can't install everything, but that there are so many different sources, none of which are entirely complete. There is still some work to do, particularly for nonfree software (eg steam, spotify, etc client is free, but not open source) can still be a pain if its only built for your distro, but if nix takes over I can see that problem being resolved as well.
@@jaimeCabra certainly helps, but still not a perfect solution. For example, one particular piece of software I struggled to get installed properly on fedora was Aesprite. To my knowledge, thats not on any distros package manager. Actually, thinking about it again, I think that might be the real problem. There are quite a few near complete solutions (distrobox, flatpak, nix), but nothing all encompassing. I guess the ideal in my eyes would be a compatibility layer that allows software built for one distro to be installed on others, e.g. installing .deb on fedora. Basically, the linux version of windows .exe or macos .dmg
@@bigbodge maybe it needs an .appimage? I installed silverblue on my laptop and it's such a pain to overlay packages that I have been levaraging all the options: appimags, flatpaks, distrobox, compiling from source. I would complain about this being a linux problem, but for windows and mac powerusers their a lot of ways to deal with software installs too
@@jaimeCabra app images have always worked poorly for me, especially with getting them integrated with the application menu I wouldn't even mind losing the application menu as a whole, and just launching all software from the terminal/file manager, the problem comes when 80% of your software is in this application menu and 20% can only be accessed through the executable.
Oh god, to install packages I used commands for Nix OS and could not understand why nothing worked. I reinstalled Nix 10 times, I tried single-user and multi-user version - all for nothing. Only a week later I rewatched the video and finally noticed 🥳
love the ease of rollback, will need to check the users it creates at install time and the passwd/keys - but definitely installing it on a test machine. Thank you
I watched this video when it first dropped. I had no clue what you were talking about nor what I was looking at. And now I come desperately looking for a replacement to ‘apt’.
I think all this begins with the idea of comparing a Deployment Domain to a programming language software, whereas - memory = disk - value, object = file - address = path name - pointer dereference = file access - pointer arithmetic = string operations - dangling pointer = path to absent file - object graph = dependency graph - languages without pointer discipline (e.g. assembler) = typical Unix-style deployment - languages with enough pointer discipline to support conservative garbage collection (e.g. C, C++) = Nix - and et cetera... Thinking that way, we could apply programming language concepts into operating systems, and consequently applying the functional paradigm into that. The idea of transforming systems, packages, shells into pure functions is pretty interesting in my opinion, every machine is a turing machine and theoretically could run the same software in the same way, but the things we do imperatively in our system cause side-effects that we cannot reason about later, which then creates another environment in which packages can break. Nix and NixOS however offers a way to track our side-effects in our system by declaring in a config file using the Nix lang, this is way better than just performing these side-effects imperatively and then try to remember then later. Isolated builds also forces the pkg creators to declare it's dependencies using the Nix package manager, which also enforces to declare the version of the pkg, and it's SHA256, having all these information allows the Nix package manager to have multiple versions of the same pkg used by different programs, that's why /nix/store is a read-only dir. Nix of course have it's drawbacks since there are some programs which does not support this type of functional package management, but there are escape hatches like docker and the buildFHSUserEnv fn from nixpkgs repo. Also, docs are not too good, the community is divided by the use of flakes and the new nix command, and learning curve is steep since some knowledge of functional programming is needed to do complex stuff, but overall is pretty good (especially for power users) and I cannot go back to use traditional distros and package manager nowadays.
This is pretty much exactly how Nix was initially conceived. The PHD thesis for which Nix was the implementation has Chapter 3 titled "Deployment as Memory Management", and includes sections on "The file system as memory" and "A pointer discipline", which are exactly what you started describing. Nix also literally has its own garbage collector to delete old packages that are no longer being referenced by packages pinned as "gc roots". It technically could delete them immediately when they stop being referenced, but packages are often a lot slower to build than most functions are to compute, so they're effectively memoized and a newer package can reference a previously unreachable package without having to rebuild it.
You should've talked more about the nix-shell command since it is the only thing making the package manager unique besides scripting with the nix language and rolling back. It should also be noted that in NixOS you are barely ever going to use the nix-env command since there is a more declarative way to install packages through the configuration.nix file.
@@olifloof The only issue with that is that Home manager seems to use nix-env behind the scenes and doesn't work if you use nix profile. Though with Home manager, I'd only use either when I want something quick and dirty and don't know if I want to keep something in the config.
nix is less of a mac package manager and more a supporting-every-possible-platform package manager, but yeah mac users really are spoiled for choice that being said I'd totally just wait for asahi to be good enough to daily drive before I actually pick one up myself
you're always making videos as soon as i start looking into something started toying with nix and then nixos in a vm for the last week and here you go publishing a video about it
I think I love the technology, it’s just the way to interact with it is unfriendly and I think that deters a lot of potential users. Wishing it was more straightforward like: nixpkg install … and nixpkg uninstalll … and nixpkg search …. Personally I find that with PacMan too
I have and will continue to install stuff like zoom per flatpak. I know it ain't perfect, but the added isolation makes me sleep better. But for some other Software Nix is a good fit.
How does it work on all distros? Is it like snap or flatpak? How big are the packages compared to apt packages? How does telhe performance compare to apt packages?
So, this is nice for some general packages for end users doing end usery stuff. However, this won't fly whatsoever for any enterprise or development application. The reason specific repos and managers are used is due to availability of specific application and library versions, as well as niche things like legacy RAID drivers and such, that run on specific distributions. They've been pre-designed to work on the libraries, kernel versions, etc. of a specific distribution. For example, Red Hat/CentOS/Rocky/Alma are designed around specific versions of things, and simply trying to install packages from some "universal" package manager means you may run into all sorts of dependency hell. I suppose this can be used in conjunction with your distro's package manager de jur, but it has very limited scope in the realm of Linux.
A nix-shell will not touch your systems installed libraries. It isolates dependencies of every package. So if some package needs a different version of, say glibc, it will install it, and symlink it for that one package. Other packages are not affected by that different glibc version. Read up a bit about nix. It's one of the few package managers that actually kind of solve dependency hell. The only problem that you mention that I could see actually being a real one is the kernel version.
Development environments are actually a very popular use of Nix within the community, and one of its strongest use cases. It's also essentially immune to that kind of dependency hell by design. On a 'foreign Linux' system (non-NixOS Linux), the only things Nix packages use from the base system are the kernel and (optionally the OpenGL and Vulkan implementations). I encourage you to look deeper. There's lots of great conference talks here on RU-vid about commercial uses of Nix at various scales. :)
Thanks Kenny -- this is one of your best ones yet. I am still a bit fuzzy though ... since AUR is pretty inclusive, why would an arch user bother installing the Nix PM? PS I have never broken my system installing packages. Those darn developers did it. ;-)
I am a freelance coder and a lot of clients insist on using Skype for communication. I have the aur version of skype installed and so far it doesnt do anything shady other than setting itself to open at startup
This _seems_ really great. I could see replacing homebrew with nix, on my macOS system. But, on my Debian-based system - my daily driver OS - I am concerned about dependency issues. For an Arch-user, I imagine resolving dependency issues are quite common. On my Debian-based system, however, I have had _no dependency issues._ Installing and upgrading packages, for 3+ years, has _never_ broken my system - nor broken any app on my system. I have _no (current) experience_ resolving dependency issues. The last dependency issues I resolved were on Fedora 7, in 2008. Will I regret running nix package manager on a stable, Debian-based distro?
Hey, would love to see you do a video on Paranoia Text Encryptor. Its not on Nix package manager or AUR - only available as a .deb package. Would like to see you getting it working on an Arch based or Redhat based distro!
The most interesting thing about nix is that it's just completely different from every other package manager on every single level. From the way their virtual filesystem works to the way their dependencies are resolved, and even though it takes a lot of effort to understand why it's done in such an unusual way, but if you dig into it, you realize how well it synergises with itself and why its architecture makes perfect sense. The only downside is that it is basically alien tech. It can be too unusual for normies. It can be too much to understand why it's done the way it's done. But I actually recommend going next level and switching to NixOS -- it's an OS based on nix architecture.
The fact that I have a backup of my configuration.nix makes me absolutely fearless on my computer. Oh and the rollback too. I used that just today when I somehow managed to break Alacritty. How does one even break a terminal emulator?
Interesting package manager. I wonder how they assure that it will run on any distro. Are you sure is not using some kind of containers, like flatpak/snap?
It installs everything into its own root level directory; /nix. Building packages is sandboxed, but running them keeps them isolated entirely through clever use of the filesystem rather than containers. For closed-source applications that require an FSH compliant system like Steam, Nix sets up a chroot when running them.
The best thing about NixOS is switching to RHEL because you can never find, let alone hire, people who know NixOS good enough to drive it inside an enterprise environment.
With Nix you get a binary cache for every derivation (package) in Nixpkgs, so you don't need to compile anything. At the same time, Nix makes it trivial to change anything about a derivation (such as the source version or build flags), in which case you will transparently compile the package with those changes included when rebuilding your system.
To me nix was a life saviour, used void Linuxbefore which was good tbh, but when I messed up something and had to wipe the system, getting back my exact same old config was painful. With nixos, I just had to take the configuration.nix file and run nixos-rebuild switch. and everything including the software I use was back i seariously can't go back to any normal distro now
3:30 Could you do a video on how to check if a script is dangerous before running it? I’ve heard a lot of RU-vidrs say to do that but never explain the how.
Download the script (don't run it!), open it with a text editor and check for suspicious URLs or weird behavior (like trying to run commands that an install script shouldn't need to run). Ofc you need some programming knowledge and know a little bit of shell 😁
I tried Nix, but the desktop icons are all missing for the packages it installed. I try to change the XDG_DATA_DIRS variable in my ~/.profile but it didn't work. I guess it's just good for some command line tools for your dev environment. I'll probably stay with system package manager for now