Compare commits

...

4 Commits

Author SHA1 Message Date
13024f42bd avoid using unitConfig 2025-07-11 20:44:18 -07:00
83c77740b3 update 2025-07-11 20:43:24 -07:00
7f7dc03a20 extend nixpkgs's lib instead 2025-07-11 20:40:27 -07:00
3ba8c1a5a6 improve zfs mounted script EVEN MORE 2025-07-11 20:19:45 -07:00
12 changed files with 105 additions and 97 deletions

30
flake.lock generated
View File

@@ -44,11 +44,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751854533, "lastModified": 1752113600,
"narHash": "sha256-U/OQFplExOR1jazZY4KkaQkJqOl59xlh21HP9mI79Vc=", "narHash": "sha256-7LYDxKxZgBQ8LZUuolAQ8UkIB+jb4A2UmiR+kzY9CLI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "16b74a1e304197248a1bc663280f2548dbfcae3c", "rev": "79264292b7e3482e5702932949de9cbb69fedf6d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -191,11 +191,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751810233, "lastModified": 1752208517,
"narHash": "sha256-kllkNbIqQi3VplgTMeGzuh1t8Gk8TauvkTRt93Km+tQ=", "narHash": "sha256-aRY1cYOdVdXdNjcL/Twpa27CknO7pVHxooPsBizDraE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "9b0873b46c9f9e4b7aa01eb634952c206af53068", "rev": "c6a01e54af81b381695db796a43360bf6db5702f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -238,11 +238,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752095368, "lastModified": 1752258421,
"narHash": "sha256-U2YJO3uAUkXlOxXPum/3I1XM68/ISozGxAoLvk8YIf8=", "narHash": "sha256-NBKcNtJv78fv6HJp1peu3HRwdITUCgZoqKNMpiEnpR0=",
"owner": "ggml-org", "owner": "ggml-org",
"repo": "llama.cpp", "repo": "llama.cpp",
"rev": "cb9178f885d1986cc0b12feb26ff426bc8a3556c", "rev": "f5e96b368f1acc7f53c390001b936517c4d18999",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -260,11 +260,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751854764, "lastModified": 1752286765,
"narHash": "sha256-StA6nw3eYixvv1KKPKKD+L1nCxz65Gyx4zg5Es7V8tQ=", "narHash": "sha256-GtbDWVpILwZY1UDrDvdn06Q5W0CXkcJ0kEcOxT8cObk=",
"owner": "Infinidoge", "owner": "Infinidoge",
"repo": "nix-minecraft", "repo": "nix-minecraft",
"rev": "d4a00866abd69011e70ac3a5976db9008601fd09", "rev": "c1f8c5755d2107cdab536b5dff33239ce8df7e18",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -291,11 +291,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1751943650, "lastModified": 1752162966,
"narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=", "narHash": "sha256-3MxxkU8ZXMHXcbFz7UE4M6qnIPTYGcE/7EMqlZNnVDE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "88983d4b665fb491861005137ce2b11a9f89f203", "rev": "10e687235226880ed5e9f33f1ffa71fe60f2638a",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -135,37 +135,8 @@
}; };
}; };
serviceMountDeps = serviceName: dirs: pkgs: { pkgs = nixpkgs.legacyPackages.x86_64-linux;
systemd.services."${serviceName}_mounts" = lib = import ./lib.nix { inherit inputs pkgs; };
let
lib = nixpkgs.lib;
zfslistmounted = pkgs.writeShellApplication {
name = "zfslistmounted";
runtimeInputs = with pkgs; [
zfs
gnugrep
gawk
coreutils
];
text = ''
#!/bin/sh
zfs list -o mountpoint,mounted | awk 'FNR > 1 && $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" ];
};
};
in in
{ {
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style;
@@ -177,32 +148,8 @@
eth_interface eth_interface
service_configs service_configs
inputs 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 = 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" = {
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, service_configs,
username, username,
pkgs, pkgs,
serviceMountDeps, lib,
... ...
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "caddy" [ (lib.serviceMountDeps "caddy" [
"/var/lib/caddy" "/var/lib/caddy"
service_configs.https.data_dir service_configs.https.data_dir
] pkgs) ])
]; ];
services.caddy = { services.caddy = {

View File

@@ -1,14 +1,14 @@
{ {
pkgs, pkgs,
lib,
config, config,
service_configs, service_configs,
username, username,
serviceMountDeps,
... ...
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "gitea" [ config.services.gitea.stateDir ] pkgs) (lib.serviceMountDeps "gitea" [ config.services.gitea.stateDir ])
]; ];
services.gitea = { services.gitea = {

View File

@@ -3,13 +3,13 @@
pkgs, pkgs,
config, config,
username, username,
serviceMountDeps, lib,
... ...
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ] pkgs) (lib.serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ])
(serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ] pkgs) (lib.serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ])
]; ];
services.immich = { services.immich = {

View File

@@ -3,23 +3,22 @@
config, config,
service_configs, service_configs,
username, username,
serviceMountDeps, lib,
optimizePackage,
... ...
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "jellyfin" [ (lib.serviceMountDeps "jellyfin" [
config.services.jellyfin.dataDir config.services.jellyfin.dataDir
config.services.jellyfin.cacheDir config.services.jellyfin.cacheDir
] pkgs) ])
]; ];
services.jellyfin = { services.jellyfin = {
enable = true; enable = true;
# used for local streaming # used for local streaming
openFirewall = true; 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; dataDir = service_configs.jellyfin.dataDir;
cacheDir = service_configs.jellyfin.cacheDir; cacheDir = service_configs.jellyfin.cacheDir;

View File

@@ -3,7 +3,6 @@
service_configs, service_configs,
config, config,
inputs, inputs,
optimizePackage,
lib, lib,
... ...
}: }:
@@ -19,7 +18,7 @@
port = service_configs.ports.llama_cpp; port = service_configs.ports.llama_cpp;
host = "0.0.0.0"; host = "0.0.0.0";
# vulkan broken: https://github.com/ggml-org/llama.cpp/issues/13801 # 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 = [ extraFlags = [
# "-ngl" # "-ngl"
# "9999" # "9999"

View File

@@ -4,14 +4,13 @@
lib, lib,
username, username,
config, config,
serviceMountDeps,
... ...
}: }:
{ {
imports = [ 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}" "${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}"
] pkgs) ])
]; ];
environment.systemPackages = [ environment.systemPackages = [

View File

@@ -3,12 +3,12 @@
config, config,
username, username,
service_configs, service_configs,
serviceMountDeps, lib,
... ...
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ] pkgs) (lib.serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ])
]; ];
services.postgresql = { services.postgresql = {

View File

@@ -4,16 +4,15 @@
service_configs, service_configs,
username, username,
lib, lib,
serviceMountDeps,
... ...
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "qbittorrent" [ (lib.serviceMountDeps "qbittorrent" [
service_configs.torrents_path service_configs.torrents_path
config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath
"/var/lib/qBittorrent/qBittorrent" "/var/lib/qBittorrent/qBittorrent"
] pkgs) ])
]; ];
# network namespace that is proxied through mullvad # network namespace that is proxied through mullvad

View File

@@ -4,7 +4,6 @@
lib, lib,
service_configs, service_configs,
username, username,
serviceMountDeps,
... ...
}: }:
let let
@@ -12,11 +11,11 @@ let
in in
{ {
imports = [ imports = [
(serviceMountDeps "slskd" [ (lib.serviceMountDeps "slskd" [
service_configs.slskd.base service_configs.slskd.base
# service_configs.slskd.downloads # service_configs.slskd.downloads
# service_configs.slskd.incomplete # service_configs.slskd.incomplete
] pkgs) ])
]; ];
users.groups."music" = { }; users.groups."music" = { };