about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--configurations/default.nix4
-rw-r--r--configurations/eonwe/default.nix4
-rw-r--r--configurations/eonwe/vidya.nix3
-rw-r--r--flake.lock90
-rw-r--r--flake.nix2
-rw-r--r--lib/default.nix35
-rw-r--r--modules/common/nix.nix13
-rw-r--r--modules/common/stylix.nix8
-rw-r--r--modules/direnv.nix16
-rw-r--r--modules/emacs/default.nix15
-rw-r--r--modules/emacs/doom/config.el3
-rw-r--r--modules/endlessh.nix5
-rw-r--r--modules/firefox/addons.nix12
-rw-r--r--modules/games/minecraft.nix4
-rw-r--r--modules/games/steam-run.nix9
-rw-r--r--modules/git/default.nix9
-rw-r--r--modules/incus.nix6
-rw-r--r--modules/profiles/headful.nix1
-rw-r--r--overlays.nix16
-rw-r--r--packages/parinfer-rust.nix8
-rw-r--r--patches/prismlauncher-allow-offline-accounts.patch19
21 files changed, 134 insertions, 148 deletions
diff --git a/configurations/default.nix b/configurations/default.nix
index 1f43cb7..b45a184 100644
--- a/configurations/default.nix
+++ b/configurations/default.nix
@@ -63,14 +63,14 @@ mapAttrs' mkConfiguration (
       nixos-hardware.nixosModules.common-gpu-amd
       nixos-hardware.nixosModules.common-pc-ssd
       nixpkgs.nixosModules.notDetected
-      srvos.nixosModules.common
+      srvos.nixosModules.desktop
     ];
 
     ilmare.modules = with inputs; [
       disko.nixosModules.disko
       nixos-hardware.nixosModules.lenovo-thinkpad-x1-nano
       nixpkgs.nixosModules.notDetected
-      srvos.nixosModules.common
+      srvos.nixosModules.desktop
     ];
 
     manwe.modules = with inputs; [
diff --git a/configurations/eonwe/default.nix b/configurations/eonwe/default.nix
index 05e4145..6248ff3 100644
--- a/configurations/eonwe/default.nix
+++ b/configurations/eonwe/default.nix
@@ -20,10 +20,10 @@ with lib;
     android.enable = true;
     beets.enable = true;
     bluetooth.enable = true;
-    libvirtd.enable = true;
     incus.enable = true;
+    libvirtd.enable = true;
     mpd.enable = true;
-    qutebrowser.enable = true;
+    qutebrowser.enable = false; # FIXME https://github.com/NixOS/nixpkgs/pull/325773
   };
 
   hm = {
diff --git a/configurations/eonwe/vidya.nix b/configurations/eonwe/vidya.nix
index d2b85f5..5753ede 100644
--- a/configurations/eonwe/vidya.nix
+++ b/configurations/eonwe/vidya.nix
@@ -20,7 +20,7 @@
   hm.home.packages = with pkgs; [
     (crawl.override { tileMode = true; })
     (dwarf-fortress-packages.dwarf-fortress-full.override {
-      dfVersion = "0.47.05";
+      dfVersion = "50.13";
       theme = "cla";
       enableIntro = false;
       enableFPS = true;
@@ -32,6 +32,7 @@
     openmw
     openttd
     qzdl
+    r2modman
     vcmi
     xonotic
   ];
diff --git a/flake.lock b/flake.lock
index 802fa85..efa9f12 100644
--- a/flake.lock
+++ b/flake.lock
@@ -12,11 +12,11 @@
         "systems": "systems"
       },
       "locked": {
-        "lastModified": 1718371084,
-        "narHash": "sha256-abpBi61mg0g+lFFU0zY4C6oP6fBwPzbHPKBGw676xsA=",
+        "lastModified": 1720546205,
+        "narHash": "sha256-boCXsjYVxDviyzoEyAk624600f3ZBo/DKtUdvMTpbGY=",
         "owner": "ryantm",
         "repo": "agenix",
-        "rev": "3a56735779db467538fb2e577eda28a9daacaca6",
+        "rev": "de96bd907d5fbc3b14fc33ad37d1b9a3cb15edc6",
         "type": "github"
       },
       "original": {
@@ -278,11 +278,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1719236180,
-        "narHash": "sha256-VZAfBk2Lo8hQy/NQ4XVSpTICT0ownXBUi1QvGfdlxaM=",
+        "lastModified": 1720402389,
+        "narHash": "sha256-zJv6euDOrJWMHBhxfp/ay+Dvjwpe8YtMuEI5b09bxmo=",
         "owner": "nix-community",
         "repo": "disko",
-        "rev": "dd4d1663ccf7fbdb32361b9afe9e71206584cd4c",
+        "rev": "f1a00e7f55dc266ef286cc6fc8458fa2b5ca2414",
         "type": "github"
       },
       "original": {
@@ -301,11 +301,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1715873341,
-        "narHash": "sha256-vOTcr7KXhNDvYPwGotjxcLBrrUq/Nt3sfKRtFwGdHGo=",
+        "lastModified": 1719459426,
+        "narHash": "sha256-4Kn9Pb3lvsik/VYsEAYgXpkcmLhrr0tTE6oIT2PMSPA=",
         "owner": "nix-community",
         "repo": "dns.nix",
-        "rev": "9ebfa9158290de09fafcc759211e48bda48329ee",
+        "rev": "e6693931023206f1f3c2bfc57d2c98b5f27f52e6",
         "type": "github"
       },
       "original": {
@@ -395,11 +395,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1718879355,
-        "narHash": "sha256-RTyqP4fBX2MdhNuMP+fnR3lIwbdtXhyj7w7fwtvgspc=",
+        "lastModified": 1720524665,
+        "narHash": "sha256-ni/87oHPZm6Gv0ECYxr1f6uxB0UKBWJ6HvS7lwLU6oY=",
         "owner": "cachix",
         "repo": "git-hooks.nix",
-        "rev": "8cd35b9496d21a6c55164d8547d9d5280162b07a",
+        "rev": "8d6a17d0cdf411c55f12602624df6368ad86fac1",
         "type": "github"
       },
       "original": {
@@ -453,11 +453,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1719037157,
-        "narHash": "sha256-aOKd8+mhBsLQChCu1mn/W5ww79ta5cXVE59aJFrifM8=",
+        "lastModified": 1720470846,
+        "narHash": "sha256-7ftA4Bv5KfH4QdTRxqe8/Hz2YTKo+7IQ9n7vbNWgv28=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "cd886711998fe5d9ff7979fdd4b4cbd17b1f1511",
+        "rev": "2fb5c1e0a17bc6059fa09dc411a43d75f35bb192",
         "type": "github"
       },
       "original": {
@@ -469,11 +469,11 @@
     "homelab-svg-assets": {
       "flake": false,
       "locked": {
-        "lastModified": 1717000166,
-        "narHash": "sha256-BuEuQp+L615DwtVi2KIdTT+fD325iGV414n9c3LpsPc=",
+        "lastModified": 1720537204,
+        "narHash": "sha256-/hWaS/StMqrJU2Le/vTItIg55HSEbk/dHGkyDrOFoII=",
         "owner": "loganmarchione",
         "repo": "homelab-svg-assets",
-        "rev": "6c3d6c8b4742ded0d0643aef2c6f7008fdbeb5a7",
+        "rev": "6b21726b821c961d5c85b9f7afd8950ba700f306",
         "type": "github"
       },
       "original": {
@@ -535,11 +535,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1719106546,
-        "narHash": "sha256-eXI0i8sPL/XblbrX5Oi5Vy+IJfRIfgnGfz3R0xxKqxc=",
+        "lastModified": 1720574857,
+        "narHash": "sha256-d54eAlQJ+8qJIeiBxjGT63qNgOhhx8G8h4UzmUUWXTU=",
         "owner": "Infinidoge",
         "repo": "nix-minecraft",
-        "rev": "c26db352b99db2c47ca4ea8ccf0b1fc66c4ceda1",
+        "rev": "94356ef03990fb5b8a3015a13df397ceb612ddc4",
         "type": "github"
       },
       "original": {
@@ -555,11 +555,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1719111455,
-        "narHash": "sha256-rnIxHx+fLpydjMQsbpZ21kblUr/lMqSaAtMA4+qMMEE=",
+        "lastModified": 1720334033,
+        "narHash": "sha256-X9pEvvHTVWJphhbUYqXvlLedOndNqGB7rvhSvL2CIgU=",
         "owner": "nix-community",
         "repo": "nix-index-database",
-        "rev": "4293f532d0107dfb7e6f8b34a0421dc8111320e6",
+        "rev": "685e40e1348007d2cf76747a201bab43d86b38cb",
         "type": "github"
       },
       "original": {
@@ -597,11 +597,11 @@
     },
     "nixos-hardware": {
       "locked": {
-        "lastModified": 1719145664,
-        "narHash": "sha256-+0bBlerLxsHUJcKPDWZM1wL3V9bzCFjz+VyRTG8fnUA=",
+        "lastModified": 1720515935,
+        "narHash": "sha256-8b+fzR4W2hI5axwB+4nBwoA15awPKkck4ghhCt8v39M=",
         "owner": "NixOS",
         "repo": "nixos-hardware",
-        "rev": "c3e48cbd88414f583ff08804eb57b0da4c194f9e",
+        "rev": "a111ce6b537df12a39874aa9672caa87f8677eda",
         "type": "github"
       },
       "original": {
@@ -612,11 +612,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1719082008,
-        "narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=",
+        "lastModified": 1720571246,
+        "narHash": "sha256-nkUXwunTck+hNMt2wZuYRN+jf2ySRjKTzI0fo5TDH78=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "9693852a2070b398ee123a329e68f0dab5526681",
+        "rev": "16e401f01842c5bb2499e78c1fe227f939c0c474",
         "type": "github"
       },
       "original": {
@@ -643,11 +643,11 @@
     },
     "nixpkgs-master": {
       "locked": {
-        "lastModified": 1719214567,
-        "narHash": "sha256-KKT+5n8uIiBcqz8xbpE4042MhneTxCx7qO78EyQGlog=",
+        "lastModified": 1720604673,
+        "narHash": "sha256-fwKpmoe5Jrvz3zp/URGpE+0/X1LgroNxqWOon43ocwk=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "cab01b571fd39cd803da18577e8a6ae071a0e006",
+        "rev": "9433aae45a5bf9cafe48749d0b208d07fa72dcd9",
         "type": "github"
       },
       "original": {
@@ -659,11 +659,11 @@
     },
     "nixpkgs-stable": {
       "locked": {
-        "lastModified": 1719154419,
-        "narHash": "sha256-H5cz+1rcc3MkkLzUW7FHLo7cgb0htn1rDVeNewa0Hnw=",
+        "lastModified": 1720599075,
+        "narHash": "sha256-0pS6J6Jr7PEkjxkGolrWvilDIlgcEnMHAG9vxPuBeoE=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "28302cbc45602ccf5f3d45827145e59e4b83d8e0",
+        "rev": "f694c70847dff1a24c29d2ff6b90966fe5619729",
         "type": "github"
       },
       "original": {
@@ -741,11 +741,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1718844164,
-        "narHash": "sha256-QUXWv6llKIQ5To2N24d9dRI78Hqfm9iFyhvmvlOICNo=",
+        "lastModified": 1720400448,
+        "narHash": "sha256-v7JVJ8H1PyH7/8EU72mz7wzxJ1OLE/h3NCqQyZ6ONjs=",
         "owner": "nix-community",
         "repo": "srvos",
-        "rev": "557ff94aa1b48a723f8fa16eb9e7a2e6de991682",
+        "rev": "21a3259985e3cddc455f64ad66d4a825b39934ad",
         "type": "github"
       },
       "original": {
@@ -775,11 +775,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1719152448,
-        "narHash": "sha256-Acbi1Crd+UEbpPW8IR0ZGRKV+JCnMXDS2cglFQJvRPM=",
+        "lastModified": 1719525570,
+        "narHash": "sha256-xSO/H67GAHEW0siD2PHoO/e97MbROL3r3s5SpF6A6Dc=",
         "owner": "danth",
         "repo": "stylix",
-        "rev": "0fc4e9f1449a9dce4be7a1ecedd97949da591181",
+        "rev": "1ff9d37d27377bfe8994c24a8d6c6c1734ffa116",
         "type": "github"
       },
       "original": {
@@ -846,11 +846,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1719106160,
-        "narHash": "sha256-jVBLe1sKZdXHiWMXs1Pc86xgGnwlLPbo/ptzWr8FbmE=",
+        "lastModified": 1720574943,
+        "narHash": "sha256-pAdtUK/zVnbv/vVf/cCG2dDOGnH82MwpLnSC4NimoQM=",
         "owner": "nix-community",
         "repo": "nix-vscode-extensions",
-        "rev": "37f43e542bb49c27f3aeb16dc7bd3a800e9e0469",
+        "rev": "60e9954678590359aec7aeb211a17fbc1f3a535f",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 652f0f2..c082411 100644
--- a/flake.nix
+++ b/flake.nix
@@ -188,7 +188,7 @@
 
       legacyPackages.${system} = pkgs;
 
-      overlays = import ./overlays.nix;
+      overlays = import ./overlays.nix lib;
 
       devShells.${system}.default =
         with pkgs;
diff --git a/lib/default.nix b/lib/default.nix
index a6a25c9..4bd731e 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -27,6 +27,17 @@ lib: _: with lib; rec {
       ]
     );
 
+  # Load all files from directory (partially recursively).
+  #
+  # Usage: Assuming other Nix files are present in a directory:
+  # ```
+  # { ... }: {
+  #   imports = attrValue (modulesIn ./.);
+  #
+  #   services.foobar.enable = true;
+  # }
+  # ```
+  #
   modulesIn =
     dir:
     pipe dir [
@@ -47,6 +58,30 @@ lib: _: with lib; rec {
       listToAttrs
     ];
 
+  # Override a module using another Nixpkgs source tree.
+  #
+  # Usage: Assuming we want to override "services.foobar.enable":
+  # ```
+  # { config, lib, ... }:
+  # (lib.modulesFromRef
+  #   "services/security/foobar.nix"
+  #   "azahi:fix-foobar"
+  #   "sha256-AAA..."
+  # ) // {
+  #   config = {
+  #     serices.foobar.enable = true;
+  #   };
+  # }
+  # ```
+  # or
+  # ```
+  # nixosConfigurations.machine = nixosSystem {
+  #   modules = [
+  #     (_: modulesFromRef "services/security/foobar.nix" "azahi:foobar-fix" "sha256-AAA...")
+  #   ];
+  # };
+  # ```
+  #
   moduleFromRef = module: ref: sha256: {
     disabledModules = [ module ];
     imports = [
diff --git a/modules/common/nix.nix b/modules/common/nix.nix
index aad7106..fec9b80 100644
--- a/modules/common/nix.nix
+++ b/modules/common/nix.nix
@@ -43,7 +43,7 @@ in
             inherit rev hash;
           }
         );
-      pkgsPr = pr: pkgsRev "refs/pull/${toString pr}/head";
+      pkgsPR = pr: pkgsRev "refs/pull/${toString pr}/head";
     in
     {
       _module.args = {
@@ -52,7 +52,7 @@ in
           pkgsMaster
           pkgsStable
           pkgsRev
-          pkgsPr
+          pkgsPR
           ;
       };
 
@@ -126,16 +126,11 @@ in
 
         overlays = with inputs; [
           self.overlays.default
-          (_: prev: {
+          (_: _prev: {
             # Global PR package overrides go here. Example:
             # ```
-            # inherit (pkgsPr 309018 "sha256-x3ATxjrTVdaX5eo9P6pz+8/W6D2TNYzvjZpOBa3ZRI8=") endlessh-go;
+            # inherit (pkgsPR 309018 "sha256-x3ATxjrTVdaX5eo9P6pz+8/W6D2TNYzvjZpOBa3ZRI8=") endlessh-go;
             # ```
-
-            spf-engine = prev.spf-engine.override {
-              # FIXME https://nixpk.gs/pr-tracker.html?pr=321940
-              inherit (pkgsMaster.python311.pkgs) pymilter;
-            };
           })
         ];
       };
diff --git a/modules/common/stylix.nix b/modules/common/stylix.nix
index c7409b5..f1e0417 100644
--- a/modules/common/stylix.nix
+++ b/modules/common/stylix.nix
@@ -27,7 +27,6 @@ with lib;
       source-han-mono
       source-han-sans
       source-han-serif
-      twitter-color-emoji
     ];
     readOnly = true;
   };
@@ -63,6 +62,11 @@ with lib;
           name = "Iosevka Aile";
         };
 
+        emoji = {
+          package = pkgs.twitter-color-emoji;
+          name = "Twitter Color Emoji";
+        };
+
         sizes = {
           desktop = 10;
           applications = 10;
@@ -103,7 +107,7 @@ with lib;
             "Noto Sans Mono"
           ];
           emoji = mkForce [
-            "Twitter Color Emoji"
+            emoji.name
             "Noto Color Emoji"
           ];
         };
diff --git a/modules/direnv.nix b/modules/direnv.nix
index ececad8..709a73a 100644
--- a/modules/direnv.nix
+++ b/modules/direnv.nix
@@ -7,17 +7,13 @@ in
   options.nixfiles.modules.direnv.enable = mkEnableOption "direnv";
 
   config = mkIf cfg.enable {
-    hm = {
-      home.sessionVariables.DIRENV_LOG_FORMAT = "";
-
-      programs.direnv = {
-        enable = true;
-        config.global = {
-          strict_env = true;
-          warn_timeout = "1h";
-        };
-        nix-direnv.enable = true;
+    hm.programs.direnv = {
+      enable = true;
+      config.global = {
+        strict_env = true;
+        warn_timeout = "1h";
       };
+      nix-direnv.enable = true;
     };
   };
 }
diff --git a/modules/emacs/default.nix b/modules/emacs/default.nix
index b466b64..762c0a6 100644
--- a/modules/emacs/default.nix
+++ b/modules/emacs/default.nix
@@ -97,6 +97,7 @@ in
                       editorconfig-core-c # :tools editorconfig
                       fd # doom!
                       gcc # :lang cc
+                      gdb # :tools debugger
                       ghc # :lang haskell
                       gnuplot # :lang (org +gnuplot)
                       gnutar # :tools tree-sitter
@@ -128,9 +129,6 @@ in
                       nodePackages.js-beautify # :lang web
                       nodePackages.prettier # :editor format
                       nodePackages.stylelint # :lang web
-                      nodePackages.vscode-css-languageserver-bin # lang (web +lsp)
-                      nodePackages.vscode-html-languageserver-bin # lang (web +lsp)
-                      nodePackages.vscode-json-languageserver-bin # lang (json +lsp)
                       nodejs # :tools debugger
                       pandoc # :lang org markdown latex
                       pinentry-emacs # doom!
@@ -140,7 +138,7 @@ in
                       python3 # :lang python
                       python3Packages.black # :lang python :editor format
                       python3Packages.isort # :lang python :editor format
-                      python3Packages.nose # :lang python
+                      python3Packages.nose2 # :lang python
                       python3Packages.pyflakes # :lang python :editor format
                       python3Packages.pytest # :lang python
                       python3Packages.python-lsp-server # :lang python :editor format
@@ -156,12 +154,12 @@ in
                       texlab # lang (tex +lsp)
                       texlive.combined.scheme-full # :lang org tex
                       unzip # :tools debugger
+                      vscode-langservers-extracted # :lang (json +lsp) (web +lsp)
                       wordnet # :tools (lookup +dictionary +offline)
                       yaml-language-server # :lang (yaml +lsp)
                       zig # :lang zig :editor format
                       zls # :lang (zig +lsp)
                       zstd # :emacs undo
-                      gdb # :tools debugger
                     ];
                   in
                   ''
@@ -180,13 +178,11 @@ in
 
                     ;; :input japanese
                     (setq migemo-dictionary "${pkgs.cmigemo}/share/migemo/utf-8/migemo-dict"
-                          migemo-options '("--quiet" "--emacs")
-                          skk-large-jisyo "${pkgs.skk-dicts}/share/SKK-JISYO.L"
-                          skk-show-inline t)
+                          skk-large-jisyo "${pkgs.skk-dicts}/share/SKK-JISYO.L")
 
                     ;; :editor parinfer
                     (setq parinfer-rust-auto-download nil
-                          parinfer-rust-library "${pkgs.parinfer-rust}/lib/libparinfer_rust.so")
+                          parinfer-rust-library "${pkgs.parinfer-rust-emacs}/lib/libparinfer_rust.so")
 
                     ;; :lang (org +roam2) :email mu4e
                     (setq emacsql-sqlite-executable "${getExe pkgs.emacsql-sqlite}")
@@ -207,6 +203,7 @@ in
                   (setq doom-font "${monospace.name}-${toString sizes.terminal}"
                         doom-serif-font "${serif.name}-${toString sizes.terminal}"
                         doom-variable-pitch-font "${sansSerif.name}-${toString sizes.terminal}")
+                        doom-emoji-font "${emoji.name}-${toString sizes.terminal}"
                 '')
                 (
                   with config.hm.accounts.email;
diff --git a/modules/emacs/doom/config.el b/modules/emacs/doom/config.el
index 9ab1e23..1926627 100644
--- a/modules/emacs/doom/config.el
+++ b/modules/emacs/doom/config.el
@@ -19,6 +19,9 @@
         xclip-mode t
         xclip-method 'wl-copy))
 
+(setq migemo-options '("--quiet" "--emacs")
+      skk-show-inline t)
+
 ;;
 ;;; Doom-specific
 ;;
diff --git a/modules/endlessh.nix b/modules/endlessh.nix
index f1bf0bc..e607935 100644
--- a/modules/endlessh.nix
+++ b/modules/endlessh.nix
@@ -11,11 +11,6 @@ in
       port = 22;
     in
     mkIf cfg.enable {
-      ark.directories = [
-        "/var/lib/gotify-server"
-        "/var/lib/private/gotify-server"
-      ];
-
       services.endlessh = {
         enable = true;
         inherit port;
diff --git a/modules/firefox/addons.nix b/modules/firefox/addons.nix
index abdb06f..d53d9c9 100644
--- a/modules/firefox/addons.nix
+++ b/modules/firefox/addons.nix
@@ -2,10 +2,10 @@
 {
   "bitwarden" = buildFirefoxXpiAddon {
     pname = "bitwarden";
-    version = "2024.6.2";
+    version = "2024.6.3";
     addonId = "{446900e4-71c2-419f-a6a7-df9c091e268b}";
-    url = "https://addons.mozilla.org/firefox/downloads/file/4305759/bitwarden_password_manager-2024.6.2.xpi";
-    sha256 = "c064e2d6601cb921ecd154e0d3bfd54d71af43da1947aa51666877ef0afd1436";
+    url = "https://addons.mozilla.org/firefox/downloads/file/4307738/bitwarden_password_manager-2024.6.3.xpi";
+    sha256 = "d3c052e66a9daa390707c4481ec50c09bc3b6253cb222792c9a55aa4b5f4045a";
     meta = with lib; {
       homepage = "https://bitwarden.com";
       description = "At home, at work, or on the go, Bitwarden easily secures all your passwords, passkeys, and sensitive information.";
@@ -50,10 +50,10 @@
   };
   "darkreader" = buildFirefoxXpiAddon {
     pname = "darkreader";
-    version = "4.9.86";
+    version = "4.9.87";
     addonId = "addon@darkreader.org";
-    url = "https://addons.mozilla.org/firefox/downloads/file/4295557/darkreader-4.9.86.xpi";
-    sha256 = "dde9896751858d0179f3d724a59f2bd4a0d61e599cb8822dc8ed2de320510714";
+    url = "https://addons.mozilla.org/firefox/downloads/file/4310627/darkreader-4.9.87.xpi";
+    sha256 = "0327d42e507979b0a0443b6aad24d011fea50dd020bcfd07b326bd3df285c79b";
     meta = with lib; {
       homepage = "https://darkreader.org/";
       description = "Dark mode for every website. Take care of your eyes, use dark theme for night and daily browsing.";
diff --git a/modules/games/minecraft.nix b/modules/games/minecraft.nix
index 6e163dc..f93a139 100644
--- a/modules/games/minecraft.nix
+++ b/modules/games/minecraft.nix
@@ -48,7 +48,9 @@ in
           enable = true;
           autoStart = true;
 
-          package = pkgs.paperServers.paper-1_19_3;
+          # https://api.papermc.io/v2/projects/paper
+          # https://github.com/Infinidoge/nix-minecraft/blob/master/pkgs/paper-servers/lock.json
+          package = pkgs.paperServers.paper-1_21_47;
 
           serverProperties = {
             # motd = "";
diff --git a/modules/games/steam-run.nix b/modules/games/steam-run.nix
index f6902c0..be06c78 100644
--- a/modules/games/steam-run.nix
+++ b/modules/games/steam-run.nix
@@ -2,6 +2,7 @@
   config,
   lib,
   pkgs,
+  pkgsRev,
   ...
 }:
 with lib;
@@ -28,12 +29,8 @@ in
           _:
           with cfg.quirks;
           optional blackIsleStudios openssl_1_0_0
-          ++ optionals cryptOfTheNecrodancer [
-            (import (builtins.fetchTarball {
-              url = "https://github.com/NixOS/nixpkgs/archive/d1c3fea7ecbed758168787fe4e4a3157e52bc808.tar.gz";
-              sha256 = "0ykm15a690v8lcqf2j899za3j6hak1rm3xixdxsx33nz7n3swsyy";
-            }) { inherit (config.nixpkgs) config localSystem; }).flac
-          ]
+          ++ optional cryptOfTheNecrodancer (pkgsRev "d1c3fea7ecbed758168787fe4e4a3157e52bc808" "sha256-3muuhz3fjtF1bz32UXOYCho51E8JSeEwo2iDZFQJdXo=")
+          .flac
           ++ optionals mountAndBladeWarband [
             (glew.overrideAttrs (
               _: super:
diff --git a/modules/git/default.nix b/modules/git/default.nix
index ad322ca..b32b5bc 100644
--- a/modules/git/default.nix
+++ b/modules/git/default.nix
@@ -5,6 +5,7 @@
   libNginx,
   libPlausible,
   pkgs,
+  this,
   ...
 }:
 with lib;
@@ -70,13 +71,7 @@ in
           git = {
             enable = true;
 
-            package = pkgs.git.override {
-              doInstallCheck = false;
-              pythonSupport = false;
-              sendEmailSupport = true;
-              withLibsecret = false;
-              withSsh = true;
-            };
+            package = if this.isHeadful then pkgs.gitFull else pkgs.gitMinimal;
 
             userName = my.fullname;
             userEmail = my.email;
diff --git a/modules/incus.nix b/modules/incus.nix
index 184aa03..b4e04e2 100644
--- a/modules/incus.nix
+++ b/modules/incus.nix
@@ -55,12 +55,6 @@ in
 
     networking.firewall.trustedInterfaces = [ "incusbr0" ];
 
-    # FIXME https://nixpk.gs/pr-tracker.html?pr=295364
-    # systemd.services.incus.path = mkForce [
-    #   config.boot.zfs.package
-    #   "${config.boot.zfs.package}/lib/udev"
-    # ];
-
     my.extraGroups = [ "incus-admin" ];
   };
 }
diff --git a/modules/profiles/headful.nix b/modules/profiles/headful.nix
index d58eed0..7d6d00f 100644
--- a/modules/profiles/headful.nix
+++ b/modules/profiles/headful.nix
@@ -55,6 +55,7 @@ in
           imv
           libreoffice-fresh
           mumble
+          paper-plane
           ripgrep
           sd
           telegram-desktop
diff --git a/overlays.nix b/overlays.nix
index 5b80ae2..d387ea3 100644
--- a/overlays.nix
+++ b/overlays.nix
@@ -1,4 +1,4 @@
-{
+_: {
   default = final: prev: {
     bruh = prev.callPackage ./packages/bruh.nix { };
 
@@ -39,12 +39,12 @@
       _: super: {
         pname = "logcli";
         subPackages = [ "cmd/logcli" ];
-        nativeBuildInputs = super.nativeBuildInputs ++ [ final.installShellFiles ];
+        nativeBuildInputs = (super.nativeBuildInputs or [ ]) ++ [ final.installShellFiles ];
         postInstall =
           (super.postInstall or "")
           + ''
             installShellCompletion --cmd logcli \
-              --bash <($out/bin/logcli --completion--script-bash) \
+              --bash <($out/bin/logcli --completion-script-bash) \
               --zsh <($out/bin/logcli --completion-script-zsh)
           '';
         preFixup = null;
@@ -61,16 +61,6 @@
 
     parinfer-rust = prev.callPackage ./packages/parinfer-rust.nix { };
 
-    prismlauncher-unwrapped =
-      (prev.prismlauncher-unwrapped.override (finalAttrs: {
-        stdenv = final.useMoldLinker finalAttrs.stdenv;
-      })).overrideAttrs
-        (
-          _: super: {
-            patches = (super.patches or [ ]) ++ [ ./patches/prismlauncher-allow-offline-accounts.patch ];
-          }
-        );
-
     telegram-desktop =
       (prev.telegram-desktop.override (finalAttrs: {
         stdenv = final.useMoldLinker finalAttrs.stdenv;
diff --git a/packages/parinfer-rust.nix b/packages/parinfer-rust.nix
index 4f26107..a925834 100644
--- a/packages/parinfer-rust.nix
+++ b/packages/parinfer-rust.nix
@@ -5,16 +5,16 @@
 }:
 rustPlatform.buildRustPackage rec {
   pname = "parinfer-rust";
-  version = "unstable-2023-08-23";
+  version = "0.5.0-unstable-2024-05-07";
 
   src = fetchFromGitHub {
     owner = "eraserhd";
     repo = "parinfer-rust";
-    rev = "0e4d52e712641ad351a1bfe6cee3d34d63ed087b";
-    hash = "sha256-xYdSOQMqeIaN5ADiwg5DkjyworcT6FWGJvJUV1NOb+0=";
+    rev = "d84828b453e158d06406f6b5e9056f6b54ff76c9";
+    hash = "sha256-Q2fYogfn5QcNDEie4sUaVydAmDmcFXnsvz35cxPCf+M=";
   };
 
-  cargoHash = "sha256-C8RO6A1soSjtGzmtkwtApObAvS7YRqHnc0JwcHzoP/8=";
+  cargoHash = "sha256-awps5BAtImc7q/D2W/vPOrFVh45k43xqUJXbOTyZF+s=";
 
   buildFeatures = [ "emacs" ];
 
diff --git a/patches/prismlauncher-allow-offline-accounts.patch b/patches/prismlauncher-allow-offline-accounts.patch
deleted file mode 100644
index 4454551..0000000
--- a/patches/prismlauncher-allow-offline-accounts.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff --git i/launcher/ui/pages/global/AccountListPage.cpp w/launcher/ui/pages/global/AccountListPage.cpp
-index 3a21cdd9..de665694 100644
---- i/launcher/ui/pages/global/AccountListPage.cpp
-+++ w/launcher/ui/pages/global/AccountListPage.cpp
-@@ -146,14 +146,6 @@ void AccountListPage::on_actionAddMicrosoft_triggered()
- 
- void AccountListPage::on_actionAddOffline_triggered()
- {
--    if (!m_accounts->anyAccountIsValid()) {
--        QMessageBox::warning(this, tr("Error"),
--                             tr("You must add a Microsoft account that owns Minecraft before you can add an offline account."
--                                "<br><br>"
--                                "If you have lost your account you can contact Microsoft for support."));
--        return;
--    }
--
-     MinecraftAccountPtr account =
-         OfflineLoginDialog::newAccount(this, tr("Please enter your desired username to add your offline account."));
- 

Consider giving Nix/NixOS a try! <3