i love using #nix and #nixos

i love mastering its bizarre config language, which is just like JSON with functions, if JSON was designed by a deranged functional programming enthusiast and shared zero syntax constructs and only about half of its core concepts with any other programming language i know. it's especially fun when something looks familiar and then works in a subtly different way, like the scope of a let statement being the single expression immediately following it

i love spending two hours getting everything set up for a program that's usually distributed as a binary to compile from source because that's the only way it will fucking run, especially when developers only provide build instructions for ubuntu if they provide them at all

i love taking my fancy-pants reproducible builds to non-nixos linux systems and finding them unable to create a GUI because nix-gl doesn't work as advertised and has just as much documentation for troubleshooting it as everything else related to nix

(1/3)

i don't mind that every time i make a one line config change to literally any program i have to run a command and wait 20-30 seconds for it to take effect. after all, how often do i change my config files? it's not like iteratively changing a config and testing the affected program to see if the change worked is something anyone ever does

i especially don't mind that my config files are stored as symlinks to a read only filesystem, meaning that 1) i can't quickly modify them to test something even if i want to and 2) the application's built in config utility can't save its changes

i love translating between the documentation for a program's config format (and config snippets i find online) and the nix config format in my head, and flipping back and forth between the program docs and the #nix source code that generates the config file. such a fun challenge

i love having to update my config every couple months because there was a breaking change to the nix configuration schema in a minor release of nixpkgs

i love that #nixflakes are software forever and will still build exactly the same in ten years and that is why i have yet to see a single github repo whose newest commit is older than two years whose flake will successfully build at all

i love that there are two completely separate sets of commands for flakes and non-flakes and that `nix-build` and `nix build` operate on two completely different sets of files, have two completely different sets of command line flags, and don't have feature parity with each other. once you get used to it it's really not confusing at all

i love that `nix-build` makes a pointless http request even if all it's doing is symlinking to a prebuilt package already in /nix/store

i love that there is legitimately no way to make it do an offline build without flakes and even with flakes it will sometimes try to access the internet even if you pass --offline

(3/3)