From 7f7dc03a2089eee7a7d3f50f61cb6812b896bf03 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Fri, 11 Jul 2025 20:34:45 -0700 Subject: [PATCH] extend nixpkgs's lib instead --- flake.nix | 59 ++--------------------------------- lib.nix | 66 ++++++++++++++++++++++++++++++++++++++++ services/caddy.nix | 6 ++-- services/gitea.nix | 4 +-- services/immich.nix | 6 ++-- services/jellyfin.nix | 9 +++--- services/llama-cpp.nix | 3 +- services/minecraft.nix | 5 ++- services/postgresql.nix | 4 +-- services/qbittorrent.nix | 5 ++- services/soulseek.nix | 5 ++- 11 files changed, 90 insertions(+), 82 deletions(-) create mode 100644 lib.nix diff --git a/flake.nix b/flake.nix index c57b406..177c0c5 100644 --- a/flake.nix +++ b/flake.nix @@ -135,37 +135,8 @@ }; }; - serviceMountDeps = serviceName: dirs: pkgs: { - systemd.services."${serviceName}_mounts" = - let - lib = nixpkgs.lib; - zfslistmounted = pkgs.writeShellApplication { - name = "zfslistmounted"; - runtimeInputs = with pkgs; [ - zfs - gnugrep - gawk - coreutils - ]; - text = '' - #!/bin/sh - zfs list -o mountpoint,mounted -H | awk '$2 == "yes" {print $1}' | grep -c '${lib.strings.concatStringsSep "\|" dirs}' | grep -Fq ${toString (lib.length dirs)} - ''; - }; - in - { - unitConfig.Wants = "zfs.target"; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ExecStart = nixpkgs.lib.getExe zfslistmounted; - }; - }; - - systemd.services.${serviceName} = { - wants = [ "${serviceName}_mounts.service" ]; - }; - }; + pkgs = nixpkgs.legacyPackages.x86_64-linux; + lib = import ./lib.nix { inherit inputs pkgs; }; in { formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; @@ -177,32 +148,8 @@ eth_interface service_configs inputs - serviceMountDeps + lib ; - - # stolen from: https://stackoverflow.com/a/42398526 - optimizeWithFlags = - pkg: flags: - nixpkgs.lib.overrideDerivation pkg ( - old: - let - newflags = nixpkgs.lib.foldl' (acc: x: "${acc} ${x}") "" flags; - oldflags = - if (nixpkgs.lib.hasAttr "NIX_CFLAGS_COMPILE" old) then "${old.NIX_CFLAGS_COMPILE}" else ""; - in - { - NIX_CFLAGS_COMPILE = "${oldflags} ${newflags}"; - # stdenv = pkgs.clang19Stdenv; - } - ); - - optimizePackage = - pkg: - optimizeWithFlags pkg [ - "-O3" - "-march=znver3" - "-mtune=znver3" - ]; }; modules = [ diff --git a/lib.nix b/lib.nix new file mode 100644 index 0000000..70edb8d --- /dev/null +++ b/lib.nix @@ -0,0 +1,66 @@ +{ + inputs, + pkgs, + ... +}: +inputs.nixpkgs.lib.extend ( + final: prev: + let + lib = prev; + in + { + ensureZfsMounts = + dirs: + pkgs.writeShellApplication { + name = "zfslistmounted"; + runtimeInputs = with pkgs; [ + zfs + gnugrep + gawk + coreutils + ]; + text = '' + #!/bin/sh + zfs list -o mountpoint,mounted -H | awk '$2 == "yes" {print $1}' | grep -c '${lib.strings.concatStringsSep "\|" dirs}' | grep -Fq ${toString (lib.length dirs)} + ''; + }; + + serviceMountDeps = serviceName: dirs: { + systemd.services."${serviceName}_mounts" = { + unitConfig.Wants = "zfs.target"; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = lib.getExe (final.ensureZfsMounts dirs); + }; + }; + + systemd.services.${serviceName} = { + wants = [ "${serviceName}_mounts.service" ]; + }; + }; + + # stolen from: https://stackoverflow.com/a/42398526 + optimizeWithFlags = + pkg: flags: + lib.overrideDerivation pkg ( + old: + let + newflags = lib.foldl' (acc: x: "${acc} ${x}") "" flags; + oldflags = if (lib.hasAttr "NIX_CFLAGS_COMPILE" old) then "${old.NIX_CFLAGS_COMPILE}" else ""; + in + { + NIX_CFLAGS_COMPILE = "${oldflags} ${newflags}"; + # stdenv = pkgs.clang19Stdenv; + } + ); + + optimizePackage = + pkg: + final.optimizeWithFlags pkg [ + "-O3" + "-march=znver3" + "-mtune=znver3" + ]; + } +) diff --git a/services/caddy.nix b/services/caddy.nix index 23b2598..8f7ebed 100644 --- a/services/caddy.nix +++ b/services/caddy.nix @@ -3,15 +3,15 @@ service_configs, username, pkgs, - serviceMountDeps, + lib, ... }: { imports = [ - (serviceMountDeps "caddy" [ + (lib.serviceMountDeps "caddy" [ "/var/lib/caddy" service_configs.https.data_dir - ] pkgs) + ]) ]; services.caddy = { diff --git a/services/gitea.nix b/services/gitea.nix index 7c22a7f..593d2c1 100644 --- a/services/gitea.nix +++ b/services/gitea.nix @@ -1,14 +1,14 @@ { pkgs, + lib, config, service_configs, username, - serviceMountDeps, ... }: { imports = [ - (serviceMountDeps "gitea" [ config.services.gitea.stateDir ] pkgs) + (lib.serviceMountDeps "gitea" [ config.services.gitea.stateDir ]) ]; services.gitea = { diff --git a/services/immich.nix b/services/immich.nix index 327f3bb..f89b149 100644 --- a/services/immich.nix +++ b/services/immich.nix @@ -3,13 +3,13 @@ pkgs, config, username, - serviceMountDeps, + lib, ... }: { imports = [ - (serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ] pkgs) - (serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ] pkgs) + (lib.serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ]) + (lib.serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ]) ]; services.immich = { diff --git a/services/jellyfin.nix b/services/jellyfin.nix index 91d71d3..0ca5469 100644 --- a/services/jellyfin.nix +++ b/services/jellyfin.nix @@ -3,23 +3,22 @@ config, service_configs, username, - serviceMountDeps, - optimizePackage, + lib, ... }: { imports = [ - (serviceMountDeps "jellyfin" [ + (lib.serviceMountDeps "jellyfin" [ config.services.jellyfin.dataDir config.services.jellyfin.cacheDir - ] pkgs) + ]) ]; services.jellyfin = { enable = true; # used for local streaming openFirewall = true; - package = pkgs.jellyfin.override { jellyfin-ffmpeg = (optimizePackage pkgs.jellyfin-ffmpeg); }; + package = pkgs.jellyfin.override { jellyfin-ffmpeg = (lib.optimizePackage pkgs.jellyfin-ffmpeg); }; dataDir = service_configs.jellyfin.dataDir; cacheDir = service_configs.jellyfin.cacheDir; diff --git a/services/llama-cpp.nix b/services/llama-cpp.nix index 7bdb9d5..90dd3c3 100644 --- a/services/llama-cpp.nix +++ b/services/llama-cpp.nix @@ -3,7 +3,6 @@ service_configs, config, inputs, - optimizePackage, lib, ... }: @@ -19,7 +18,7 @@ port = service_configs.ports.llama_cpp; host = "0.0.0.0"; # vulkan broken: https://github.com/ggml-org/llama.cpp/issues/13801 - package = (optimizePackage inputs.llamacpp.packages.${pkgs.system}.default); + package = (lib.optimizePackage inputs.llamacpp.packages.${pkgs.system}.default); extraFlags = [ # "-ngl" # "9999" diff --git a/services/minecraft.nix b/services/minecraft.nix index 902390e..d56c77a 100644 --- a/services/minecraft.nix +++ b/services/minecraft.nix @@ -4,14 +4,13 @@ lib, username, config, - serviceMountDeps, ... }: { imports = [ - (serviceMountDeps "minecraft-server-${service_configs.minecraft.server_name}" [ + (lib.serviceMountDeps "minecraft-server-${service_configs.minecraft.server_name}" [ "${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}" - ] pkgs) + ]) ]; environment.systemPackages = [ diff --git a/services/postgresql.nix b/services/postgresql.nix index f882925..58086a7 100644 --- a/services/postgresql.nix +++ b/services/postgresql.nix @@ -3,12 +3,12 @@ config, username, service_configs, - serviceMountDeps, + lib, ... }: { imports = [ - (serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ] pkgs) + (lib.serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ]) ]; services.postgresql = { diff --git a/services/qbittorrent.nix b/services/qbittorrent.nix index 059836d..82e3e16 100644 --- a/services/qbittorrent.nix +++ b/services/qbittorrent.nix @@ -4,16 +4,15 @@ service_configs, username, lib, - serviceMountDeps, ... }: { imports = [ - (serviceMountDeps "qbittorrent" [ + (lib.serviceMountDeps "qbittorrent" [ service_configs.torrents_path config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath "/var/lib/qBittorrent/qBittorrent" - ] pkgs) + ]) ]; # network namespace that is proxied through mullvad diff --git a/services/soulseek.nix b/services/soulseek.nix index a8998ee..a86e937 100644 --- a/services/soulseek.nix +++ b/services/soulseek.nix @@ -4,7 +4,6 @@ lib, service_configs, username, - serviceMountDeps, ... }: let @@ -12,11 +11,11 @@ let in { imports = [ - (serviceMountDeps "slskd" [ + (lib.serviceMountDeps "slskd" [ service_configs.slskd.base # service_configs.slskd.downloads # service_configs.slskd.incomplete - ] pkgs) + ]) ]; users.groups."music" = { };