Last time I didn’t upgrade for a long while some drivers broke, maybe I’ll just switch to NixOS this time since it seems interesting. Does anyone here use NixOS? What do you think about it?

  • cybersandwich@lemmy.world
    link
    fedilink
    arrow-up
    5
    ·
    1 year ago

    The more I see about NixOS, the less I understand it.

    Is it a pain in the ass to use on a daily basis? It just seems like one of those things where the juice isn’t worth the squeeze.

    • Eufalconimorph
      link
      fedilink
      arrow-up
      3
      ·
      1 year ago

      Daily use isn’t difficult IME. NixOS is just so nice once it’s working. It’s ridiculously easy to understand your system & how it’s set up (it’s all in your config). Nothing changes between updates that you don’t know about. You never have to merge configurations from upstream. It’s trivial to try something new without changing your system overall. Rollbacks are amazing. It’s easy to configure a new machine, to keep multiple machines synchronized (same packages & versions & even users & dotfiles). I have automatic updates enabled so I get a new system when I reboot, and if I don’t like an update I can just revert seamlessly. It basically works like an appliance: I don’t have to think about the way it’s set up unless I disagree with the defaults, and in that case I can change them. You can always override things, even down to applying patches to source code (though obviously that then requires re-compiling). It’s like if you took the stability of Debian, the up-to-date nature and huge repo of Arch & the AUR, and the configurability of Gentoo and mashed them all together.

      The hard bits are packaging new programs and making “modules”. You can pretty much always configure a program by just writing the config file options in a Nix string block, e.g. I’ve got the following in my home-manager config for my ~/.xkbrc:

        home.file.".config/kxkbrc" = {
          text = ''
            [$Version]
            update_info=kxkb_variants.upd:split-variants
      
            [Layout]
            DisplayNames=
            LayoutList=us
            LayoutLoopCount=-1
            Model=pc86
            Options=terminate:ctrl_alt_bksp,compose:rctrl
            ResetOldOptions=true
            SwitchMode=Global
            Use=true
            VariantList=colemak
          '';
        };
      

      Modules would let that be a Nix expression, e.g. looking like

      programs.xkeyboard = {
        layout = "us";
        variant = "colemak";
        model = "pc86";
        options = {
          terminate = "ctrl_alt_bksp";
          compose = "rctrl";
        };
        resetOldOptions = true;
      };
      

      but that requires writing an expression in Nix that converts the Nix syntax into whatever syntax the config file needs to be. That means learning a lot more Nix. Packaging programs also requires learning more Nix, and particularly how Nixpkgs builders work.

      That said, the documentation is shitty, the error messages are shitty, Flakes are massively easier to work with but still “experimental” and lots of the docs & examples online are for pre-flakes, while nixpkgs is enormous it doesn’t have everything, and IDE support for Nix shell environments is lacking (have to use VS Code or a terminal-based editor like nvim).

      Nix is sort of like democracy. Democracy is the worst form of government, except for all the others. Nix is the worst way to manage an OS, except for all the others. It’s shitty, but it’s shitty in different ways and those mostly end up making day-to-day operations easier.