Compare commits
4 Commits
8e829637ac
...
13024f42bd
| Author | SHA1 | Date | |
|---|---|---|---|
|
13024f42bd
|
|||
|
83c77740b3
|
|||
|
7f7dc03a20
|
|||
|
3ba8c1a5a6
|
30
flake.lock
generated
30
flake.lock
generated
@@ -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": {
|
||||||
|
|||||||
59
flake.nix
59
flake.nix
@@ -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
66
lib.nix
Normal 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"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 = [
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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" = { };
|
||||||
|
|||||||
Reference in New Issue
Block a user