Perhaps dumb questions inbound ;)
I use Arch because I’m strapped for time and my system is always moving.
-
2 minutes to install something? AUR probably has it.
-
Ten minutes of free time to look for a software that fits a new need? Try random AUR things (auditing PKGBUILDs is just twenty seconds or so).
-
If I need a tiny patch, I’ll just add a sed or patch file to the PKGBUILD. (Super easy, you barely learn any syntax cuz it’s intuitive shell.)
-
make && make install
/meson blahblah
usually just works. -
Wiki does the thinking for me if I need something special (e.g. hw video acceleration)
Buuuut update surprises can be a pain (e.g. Pipewire explodes Saturday evening) and declarative rollbackable immutability sounds really freakin’ AWESOME, so I’m considering NixOS for my new laptop (old one’s webcam broke). So I ask:
- How much can I grok in a week?
- I need to know Nixlang, right? I have a ton of dotfiles and random homemade cpp commands in ~/.local/bin that I use daily
- How quick is it to make a derivation?
- I
make install
a lot, do I need to declare that due to non-FHS? Can I boilerplate the whole thing with someone else’smake install
and ctrl+c ctrl+v? How does genAI fare? (Lemmy hates word guess bots, I know)
- I
- How quick is it to install something new and random?
- Do I just use
nix-shell
if I need something asap? Do I need to make a derivation for all my programs? e.g. do I need to declare a Hyprland plugin I’m test-running?
- Do I just use
- How long do you research a new package for?
- On Gentoo I always looked up USE flags (NOO my time); on Arch I just audit the PKGBUILD and test-run it (20 seconds); on Ubuntu I had to find the relevant PPA (2 minutes). What’s it like for Nix?
- Can you set up dev environments quickly or do you need to write a ton of configs?
- I hear python can be annoying. Do C++/Android Studio have header file/etc. issues?
- What maintenance ouchies do you run into? How long to rectify?
- Do I need to finagle on my own to have /boot encrypted?
- I boot via: unencrypted EFI grub asks for LUKS password -> decrypt /boot, which then has a keyfile -> decrypt and mount btrfs root partition. But lots of guides don’t do it this way
Thanks for bearing with me ദ്ദി(。•̀ヮ<)~✩‧₊
I’ve been daily driving NixOS for about a year now, switched from over two decades of running Debian. I’ll try to answer your questions from my perspective:
If you have some experience with functional programming or declarative configs (think Ansible), then it’s a lot easier. You can definitely learn enough in a week to get started. One year in, my Nix knowledge is very light still, and I get by fine. On the other hand, there’s a lot of Nix I simply don’t use. I don’t write reusable Nix modules, and my NixOS configuration isn’t split into small, well manageable files. It’s a single 3k lines long, 130k sized
flake.nix
. Mind you, it’s not complete chaos: it is generated from an Org Roam document (literate programming style; my Org Roam files are 1.2mb in size, clocking in at a bit below 10k lines).With that said, it took me about a month of playing and experimenting with NixOS in a VM casually, a couple of hours a week, to get comfortable and commit to switching. It’s a lot easier once you switched, though.
For most things, a couple of minutes tops. I found it easier to create derivations than creating Debian packages, and I was a Debian Developer for two decades, had a lot more and lot deeper understanding of Debian packaging practices. It’s not trivial, but it’s also not hard. The first derivation is maybe a bit intimidating, but the 10th is just routine.
Regarding
make install
& co, you can continue doing that. I use project-specific custom flakes anddirenv
to easily set up a development environment. That makes development very easy. For installing stuff… I’d still recommend derivations. A simple./configure && make && make install
is usually very easy to write a derivation for. And nixpkgs is huge, chances are, someone already wrote one.With a bit of self control and liberal use of direnv & flakes, near instant.
https://search.nixos.org/packages, you can search for a package, and you can explore its derivation. The same page also provides search for NixOS options, so you can explore available NixOS modules to help you configure a package.
Very easy, with a tiny amount of practice. Liberal use of flakes & direnv, and you’re good to go. I can’t comment much on Python, because I don’t do much Python nowadays, but JavaScript, Go, Rust, C, C++ have been very easy to build dev environments for.
None so far. If it builds, it usually works. I do need to read release notes for packages I upgrades, but that’s also reasonably easy, because I can simply “diff” the package version between my running system, and the configuration I just built: I can see which packages were upgraded, and can look up their release notes if need be. In short, about the same effort as upgrading Debian was (where I also rarely ran into upgrade/maintenance gotchas).
If you use the NixOS installer, then yeah, you do have to fiddle with that a bit more than one would like. If you install via other means (eg, build your own flake and use something like nixos-anywhere to install it), then it’s pretty easy and well supported and documented.
Feel free to ask further question, I’m happy to elaborate on my experience so far.