I hopped from arch (2010-2019) to Nixos (2019-2023). I had my issues with it but being a functional programmer, I really liked the declarative style of configuring your OS. That was until last week. I decided to try out void Linux (musl). I’m happy with it so far.

Why did I switch?

  1. Nix is extremely slow and data intensive (compared to xbps). I mean sometimes 100-1000x or more. I know it is not a fair comparison because nix is doing much more. Even for small tweaks or dependency / toolchain update it’ll download/rebuild all packages. This would mean 3-10GB (or more) download on Nixos for something that is a few KB or MB on xbps.

  2. Everything is noticeably slower. My system used way more CPU and Ram even during idle. CPU was at 1-3% during idle and my battery life was 2 to 3.5h. Xfce idle ram usage was 1.5 GB on Nixos. On Void it’s around 0.5GB. I easily get 5-7h of battery life for my normal usage. It is 10h-12h if I am reading an ebook.

Nix disables a lot of compiler optimisations apparently for reproducibility. Maybe this is the reason?

  1. Just a lot of random bugs. Firefox would sometimes leak memory and hang. I have only 8 GB of ram. WiFi reconnecting all the time randomly. No such issues so far with void.

  2. Of course the abstractions and the language have a learning curve. It’s harder for a beginner to package or do something which is not already exposed as an option. (This wasn’t a big issue for me most of the time.)

For now, I’ll enjoy the speed and simplicity of void. It has less packages compared to nix but I have flatpak if needed. So far, I had to install only Android studio with it.

My verdict is to use Nixos for servers and shared dev environments. For desktop it’s probably not suitable for most.

  • Lalelul@feddit.de
    link
    fedilink
    arrow-up
    1
    ·
    1 年前

    Thanks a lot. I will give it a try. By the way, are you also using the NUR? Do you maybe know if I can configure the nix.registry to allow using NUR packages using nix shell as well?

    • lloram239@feddit.de
      link
      fedilink
      arrow-up
      1
      ·
      1 年前

      Good question. NUR doesn’t seem to output the packages directly, but requires that you supply your pkgs manually. You can use nix shell with NUR, but it gets rather ugly:

      nix shell --impure --expr '(import (builtins.getFlake github:nix-community/NUR) { pkgs = (import  {}).pkgs; }).repos.mic92.hello-nur'
      

      nix registry doesn’t help here, as it’s just for managing aliases that allow you to type “nixpkgs” instead of “github:NixOS/nixpkgs/nixos-23.05” in some places.

      It might be possible to write a flake that outputs NUR packages for direct use, e.g. something like:

      {
        inputs = {
          nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05";
          flake-utils.url = "github:numtide/flake-utils";
          nur_src.url = "github:nix-community/NUR";
        };
      
        outputs = { self, nixpkgs, flake-utils, nur_src }:
          flake-utils.lib.eachDefaultSystem (system:
            let
              pkgs = nixpkgs.legacyPackages.${system};
              nurpkgs = import "${nur_src}/default.nix" { pkgs = pkgs; nurpkgs = pkgs; };
            in {
              packages = nurpkgs.repos.mic92; // FIXME: this needs more work and filtering
            }
          );
      }
      

      Which gives:

      $ nix --allow-import-from-derivation flake show .
      git+file:///
      └───packages
          ├───aarch64-darwin
          │   ├───bing-image-creator: package 'python3.10-bing-image-creator-0.4.4'
          │   ├───clearsans: package 'clearsans-1.00'
          │   ├───cntr: package 'cntr-1.5.1'
          │   ├───conky-symbols: package 'ConkySymbols'
          │   ├───eapol_test: package 'eapol_test-2.10'
          │   ├───edge-gpt: package 'python3.10-edge-gpt-0.13.1'
          │   ├───fira-code-pro-nerdfonts: package 'nerdfonts-3.0.1'
          │   ├───gatttool: package 'bluez-5.66'
          │   ├───gdb-dashboard: package 'gdb-dashboard-0.11.4'
      

      But needs some more work and might be reinventing the wheel. Haven’t used NUR myself and no idea what the state of flakes in NUR is.