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.
yeah, OP should probably setup NixOS in a vm first and apply all their configs in there