extend nixpkgs's lib instead

This commit is contained in:
Simon Gardling 2025-07-11 20:34:45 -07:00
parent 3ba8c1a5a6
commit 7f7dc03a20
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D
11 changed files with 90 additions and 82 deletions

View File

@ -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 =
[

66
lib.nix Normal file
View File

@ -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"
];
}
)

View File

@ -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 = {

View File

@ -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 = {

View File

@ -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 = {

View File

@ -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;

View File

@ -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"

View File

@ -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 = [

View File

@ -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 = {

View File

@ -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

View File

@ -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" = { };