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 ദ്ദി(。•̀ヮ<)~✩‧₊
So instead of commenting inside of nix files, you put nix files into .org documents and collate them so you can make your nix files an OS and a website and a zettelkasten-looking set of linked annotated nodes.
That puts a stupid grin on my face (ᐖ )
Dammit I was sure I was just going to stick with Arch until I saw this
Questions:
Yup! And writing it in Org allows me to structure the configuration any way I like. It makes it a whole lot easier to group things that belong together close to each other, and I never have to fight the Nix language to do so. I can also generate easily browsable, rich documentation that explains what’s what and why, which helps me tremendously, because a year after I installed and configured something, I will not remember how and why I did it that way, so my own documentation will help me remember.
Generating code from docs (rather than the other way around) also means that I’m much more likely to document things, because the documentation part is the more important part. It… kinda forces a different mindset on me. And, like I said, this allows me to structure the configuration in a way that makes sense to me, and I am not constrained by the limitations of the Nix language. I can skip a tremendous amount of boilerplate this way, because I don’t need to use NixOS modules, repeating the same wrapping for each and every one of them. Also feels way more natural, to be honest.
It is volatile, yes, in the sense that if I reboot, it’s lost. I am using Impermanence, for both
/home
and/
. The idea here is that anything worth saving, will be recorded in the configuration, and will be stored on a persistent location, and will get bind mounted or symlinked. So data, pictures, source code, etc, live on an SSD, and they get symlinked into my home. For example, the various XDG userdirs (~/Downloads
, etc), I configured them to live under~/data
, and that dir lives on persistent storage and gets symlinked back.My root and
/home
are both set to 128Mb, intentionally small, so that if anything starts putting random stuff there, it will run out of space very fast, and start crashing and complaining loudly, and I’ll know that I need to take care of it: either by moving the data to persistent storage, or asking whatever is putting stuff there to stop doing that. My/tmp
(where temporary builds end up) is 2Gb, and sometimes I need to remount it at 10gb (hinerdfonts
!), but most of the time, 2g is more than enough.I have 32Gb RAM, but only ~2.5g is used for tmpfs purposes (2g of it on
/tmp
itself), and most of the time, the majority of that is unused and as such, available for other things. My wife’s laptop with 16Gb RAM uses a similar setup, with 512mb for/tmp
, and that works just as fine.I do have 64Gb of swap on a dedicated SSD, though, and that helps a lot. I currently have 3GB ram free, and 37G of swap used, but don’t feel any issues with responsiveness. I don’t even know what’s using my swap! Everything feels snappy and responsive enough.
A few seconds from poweron to logging in. By far the slowest part of it is the computer waiting for me to enter my password.
Looking at
systemd-analyze blame
andsystemd-analyze critical-path
, most of that userspace time is due to waiting for the network to come online (18s), and for docker to start up (7s). Most of that is done parallel, though. Boot to gdm is waaay faster than that.I haven’t run into any issues with containers, and I’m using a handful of them. docker, podman, flatpak all work fine out of the box (after setting up permanent storage for their data, so they don’t try to pull 10gb containers into my 128mb root filesystem :D). Wine… I’m using Wine via Lutris to play Diablo IV, and it has worked without issues so far out of the box, I didn’t have to fight to make it work.
I did run into a few problems with some stuff. AppImages for example require running them with
appimage-run
, but you can easily set upbinfmt_misc
to automatically do that for you, so you can continue yourcurl https://example.com/dl/Example.AppImage -o Example.AppImage && chmod +x Example.AppImage && ./Example.AppImage
practices after that.There’s also cases where downloaded binaries don’t work out of the box, because they can’t find the dynamic linker. I… usually don’t download random third party binaries, so I don’t often run into this problem. The one case where I did, is Arduino tooling. I have a handy script in my (arduino-powered) keyboard firmware to patch those with
patchelf
. But if need be, there’sbuildFHSEnv
, which allows us to build a derivation that simulates an FHS environment for the software being packaged. So far, I did not need to resort to that. Come to think of it… usingbuildFHSEnv
would likely be simpler for my keyboard firmware than the patching. I might play with that next time I’m touching that repo.