feat: fix all initial impermanence perm folder creation
Some checks failed
ci / treefmt (push) Failing after 4s

This commit is contained in:
Ceferino Patino 2026-07-01 00:24:52 -05:00
commit 0fd70dd3f8
Signed by: c4patino
SSH key fingerprint: SHA256:Wu+cU1t+7zVT9wzew/4meNmeulo66NzMqc22MdDBgXI
39 changed files with 184 additions and 207 deletions

View file

@ -354,4 +354,34 @@ with lib; rec {
## @return The host name where the service is defined.
resolveServiceHost = networkServices: serviceName:
(flattenHostServices networkServices).${serviceName}.host;
## Create an impermanence persistence directory owned by a service user.
##
## ```nix
## mkPersistDir config "forgejo" "/var/lib/forgejo"
## ```
##
## @param config The module config (passed from the module).
## @param username The service username (must exist in config.users.users).
## @param directory The directory path to persist.
## @return An attrset for the impermanence.folders list.
mkPersistDir = config: username: directory: let
u = config.users.users.${username};
in {
inherit directory;
user = u.name;
group = u.group;
mode = "700";
};
## Create an impermanence persistence directory owned by root.
##
## ```nix
## mkPersistRootDir config "/var/lib/docker"
## ```
##
## @param config The module config (passed from the module).
## @param directory The directory path to persist.
## @return An attrset for the impermanence.folders list.
mkPersistRootDir = config: directory: mkPersistDir config "root" directory;
}

View file

@ -7,7 +7,7 @@
...
}: let
inherit (lib) types mkIf mkEnableOption mkOption mapAttrs mapAttrsToList flatten;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkOpt mkOptAttrset;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkOpt mkOptAttrset mkPersistRootDir;
base = "${namespace}.desktop.apps.games.minecraft";
cfg = getAttrByNamespace config base;
in {
@ -48,6 +48,8 @@ in {
});
};
${namespace}.services.storage.impermanence.folders = ["/srv/minecraft"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/srv/minecraft")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption types;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkOpt mkNullableOpt;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkOpt mkNullableOpt mkPersistRootDir;
base = "${namespace}.desktop.apps.games.terraria";
cfg = getAttrByNamespace config base;
in {
@ -31,6 +31,8 @@ in {
port = cfg.port;
};
${namespace}.services.storage.impermanence.folders = ["/srv/terraria"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/srv/terraria")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace enabled;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace enabled mkPersistRootDir;
base = "${namespace}.desktop.apps.teamviewer";
cfg = getAttrByNamespace config base;
in {
@ -19,6 +19,8 @@ in {
services.teamviewer = enabled;
${namespace}.services.storage.impermanence.folders = ["/var/lib/teamviewer"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/var/lib/teamviewer")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkPersistDir;
base = "${namespace}.desktop.env.greetd";
cfg = getAttrByNamespace config base;
in {
@ -25,6 +25,8 @@ in {
'';
};
${namespace}.services.storage.impermanence.folders = ["/var/cache/tuigreet"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "greeter" "/var/cache/tuigreet")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkPersistRootDir;
base = "${namespace}.hardware.bluetooth";
cfg = getAttrByNamespace config base;
in {
@ -21,6 +21,8 @@ in {
powerOnBoot = true;
};
${namespace}.services.storage.impermanence.folders = ["/var/lib/bluetooth"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/var/lib/bluetooth")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkPersistRootDir;
base = "${namespace}.hardware.fingerprint";
cfg = getAttrByNamespace config base;
in {
@ -18,6 +18,8 @@ in {
enable = true;
};
${namespace}.services.storage.impermanence.folders = ["/var/lib/fprint"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/var/lib/fprint")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkForce;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveDatabaseHost resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveDatabaseHost resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -49,12 +49,7 @@ in {
sops.secrets."environment-file/asciinema" = {};
${namespace}.services.storage.impermanence.folders = [
{
directory = "/var/lib/asciinema";
user = "asciinema";
group = "asciinema";
mode = "700";
}
(mkPersistDir config "asciinema" "/var/lib/asciinema")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkForce;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -105,6 +105,8 @@ in {
sops.secrets."forgejo/db" = {};
${namespace}.services.storage.impermanence.folders = ["/var/lib/forgejo"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "forgejo" "/var/lib/forgejo")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -111,7 +111,7 @@ in {
networking.firewall.allowedTCPPorts = [port];
${namespace}.services.storage.impermanence.folders = [
"/var/lib/ignis"
(mkPersistDir config "ignis" "/var/lib/ignis")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
pgCfg = getAttrByNamespace config "${namespace}.services.storage.postgresql";
@ -44,15 +44,8 @@ in {
sops.secrets."environment-file/immich" = {};
${namespace}.services.storage.impermanence.folders = let
immichUser = config.users.users.immichUser;
in [
{
directory = "/var/lib/immich";
user = immichUser.name;
group = immichUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "immich" "/var/lib/immich")
];
};
}

View file

@ -26,15 +26,15 @@ in {
systemd.services.miasma = {
description = "Trap AI web scrapers in an endless poison pit";
wantedBy = ["multi-user.target"];
serviceConfig = let
miasmaUser = config.users.users.miasma;
in {
serviceConfig = let
inherit (config.users.users) miasma;
in {
Type = "simple";
Restart = "always";
RestartSec = 1;
User = miasmaUser.name;
Group = miasmaUser.group;
User = miasma.name;
Group = miasma.group;
StateDirectory = "miasma";
ReadWritePaths = "/var/lib/miasma";

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -20,7 +20,7 @@ in {
};
${namespace}.services.storage.impermanence.folders = [
"/var/lib/prometheus2"
(mkPersistDir config "prometheus" "/var/lib/prometheus2")
];
};
}

View file

@ -7,7 +7,7 @@
...
}: let
inherit (lib) mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost hostHasService resolveServicePort resolveDatabaseIP;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost hostHasService resolveServicePort resolveDatabaseIP mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -230,22 +230,9 @@ in {
"qui" = {};
};
${namespace}.services.storage.impermanence.folders = let
qbittorrentUser = config.users.users.qbittorrent;
quiUser = config.users.users.qui;
in [
{
directory = "/var/lib/qBittorrent";
user = qbittorrentUser.name;
group = qbittorrentUser.group;
mode = "770";
}
{
directory = "/var/lib/qui";
user = quiUser.name;
group = quiUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "qbittorrent" "/var/lib/qBittorrent")
(mkPersistDir config "qui" "/var/lib/qui")
];
networking = {

View file

@ -7,7 +7,7 @@
...
}: let
inherit (lib) mkIf;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort mkPersistDir;
inherit (config.users) users groups;
inherit (config.sops) secrets;
inherit (config.networking) hostName;
@ -74,6 +74,8 @@ in {
networking.firewall.allowedTCPPorts = [port];
${namespace}.services.storage.impermanence.folders = ["/var/lib/rustypaste"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "rustypaste" "/var/lib/rustypaste")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -45,7 +45,7 @@ in {
};
services.autobrr = let
autobrrUser = config.users.users.autobrr;
inherit (config.users.users) autobrr;
in
mkMerge [
{
@ -54,8 +54,8 @@ in {
];
serviceConfig = {
DynamicUser = mkForce false;
User = autobrrUser.name;
Group = autobrrUser.group;
User = autobrr.name;
Group = autobrr.group;
UMask = mkForce "0002";
EnvironmentFile = config.sops.secrets."environment-file/autobrr".path;
};
@ -83,15 +83,8 @@ in {
groups.autobrr = {};
};
${namespace}.services.storage.impermanence.folders = let
autobrrUser = config.users.users.autobrr;
in [
{
directory = "/var/lib/autobrr";
user = autobrrUser.name;
group = autobrrUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "autobrr" "/var/lib/autobrr")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -22,7 +22,7 @@ in {
};
systemd.services.bazarr = let
bazarrUser = config.users.users.bazarr;
inherit (config.users.users) bazarr;
dbIp = resolveDatabaseIP networkCfg.devices pgCfg.databases "bazarr";
in
mkMerge [
@ -37,8 +37,8 @@ in {
serviceConfig = {
DynamicUser = mkForce false;
User = bazarrUser.name;
Group = bazarrUser.group;
User = bazarr.name;
Group = bazarr.group;
UMask = mkForce "0002";
EnvironmentFile = config.sops.secrets."environment-file/bazarr".path;
};
@ -62,15 +62,8 @@ in {
sops.secrets."environment-file/bazarr" = {};
${namespace}.services.storage.impermanence.folders = let
bazarrUser = config.users.users.bazarr;
in [
{
directory = "/var/lib/bazarr";
user = bazarrUser.name;
group = bazarrUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "bazarr" "/var/lib/bazarr")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf;
inherit (lib.${namespace}) getAttrByNamespace hostHasService;
inherit (lib.${namespace}) getAttrByNamespace hostHasService mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -50,15 +50,8 @@ in {
LIBVA_DRIVER_NAME = "radeonsi";
};
${namespace}.services.storage.impermanence.folders = let
jellyfinUser = config.users.users.jellyfin;
in [
{
directory = "/var/lib/jellyfin";
user = jellyfinUser.name;
group = jellyfinUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "jellyfin" "/var/lib/jellyfin")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -36,14 +36,14 @@ in {
};
systemd.services.lidarr = let
lidarrUser = config.users.users.lidarr;
inherit (config.users.users) lidarr;
in
mkMerge [
{
serviceConfig = {
DynamicUser = mkForce false;
User = lidarrUser.name;
Group = lidarrUser.group;
User = lidarr.name;
Group = lidarr.group;
UMask = mkForce "0002";
};
}
@ -66,15 +66,8 @@ in {
sops.secrets."environment-file/lidarr" = {};
${namespace}.services.storage.impermanence.folders = let
lidarrUser = config.users.users.lidarr;
in [
{
directory = "/var/lib/lidarr";
user = lidarrUser.name;
group = lidarrUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "lidarr" "/var/lib/lidarr")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -29,15 +29,8 @@ in {
groups.ombi = {};
};
${namespace}.services.storage.impermanence.folders = let
ombiUser = config.users.users.ombi;
in [
{
directory = "/var/lib/ombi";
user = ombiUser.name;
group = ombiUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "ombi" "/var/lib/ombi")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -36,14 +36,14 @@ in {
};
systemd.services.prowlarr = let
prowlarrUser = config.users.users.prowlarr;
inherit (config.users.users) prowlarr;
in
mkMerge [
{
serviceConfig = {
DynamicUser = mkForce false;
User = prowlarrUser.name;
Group = prowlarrUser.group;
User = prowlarr.name;
Group = prowlarr.group;
UMask = mkForce "0002";
};
}
@ -66,15 +66,8 @@ in {
sops.secrets."environment-file/prowlarr" = {};
${namespace}.services.storage.impermanence.folders = let
prowlarrUser = config.users.users.prowlarr;
in [
{
directory = "/var/lib/prowlarr";
user = prowlarrUser.name;
group = prowlarrUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "prowlarr" "/var/lib/prowlarr")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -36,14 +36,14 @@ in {
};
systemd.services.radarr = let
radarrUser = config.users.users.radarr;
inherit (config.users.users) radarr;
in
mkMerge [
{
serviceConfig = {
DynamicUser = mkForce false;
User = radarrUser.name;
Group = radarrUser.group;
User = radarr.name;
Group = radarr.group;
UMask = mkForce "0002";
};
}
@ -66,15 +66,8 @@ in {
sops.secrets."environment-file/radarr" = {};
${namespace}.services.storage.impermanence.folders = let
radarrUser = config.users.users.radarr;
in [
{
directory = "/var/lib/radarr";
user = radarrUser.name;
group = radarrUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "radarr" "/var/lib/radarr")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -23,7 +23,7 @@ in {
};
systemd.services.seerr = let
seerrUser = config.users.users.seerr;
inherit (config.users.users) seerr;
dbIp = resolveDatabaseIP networkCfg.devices pgCfg.databases "seerr";
in
mkMerge [
@ -38,8 +38,8 @@ in {
serviceConfig = {
DynamicUser = mkForce false;
User = seerrUser.name;
Group = seerrUser.group;
User = seerr.name;
Group = seerr.group;
EnvironmentFile = config.sops.secrets."environment-file/seerr".path;
};
}
@ -61,15 +61,8 @@ in {
sops.secrets."environment-file/seerr" = {};
${namespace}.services.storage.impermanence.folders = let
seerrUser = config.users.users.seerr;
in [
{
directory = "/var/lib/seerr";
user = seerrUser.name;
group = seerrUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "seerr" "/var/lib/seerr")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkForce mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -36,14 +36,14 @@ in {
};
systemd.services.sonarr = let
sonarrUser = config.users.users.sonarr;
inherit (config.users.users) sonarr;
in
mkMerge [
{
serviceConfig = {
DynamicUser = mkForce false;
User = sonarrUser.name;
Group = sonarrUser.group;
User = sonarr.name;
Group = sonarr.group;
UMask = mkForce "0002";
};
}
@ -66,15 +66,8 @@ in {
sops.secrets."environment-file/sonarr" = {};
${namespace}.services.storage.impermanence.folders = let
sonarrUser = config.users.users.sonarr;
in [
{
directory = "/var/lib/sonarr";
user = sonarrUser.name;
group = sonarrUser.group;
mode = "700";
}
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "sonarr" "/var/lib/sonarr")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) filter mkIf optional mapAttrs' nameValuePair toUpper;
inherit (lib.${namespace}) getAttrByNamespace hostHasService;
inherit (lib.${namespace}) getAttrByNamespace hostHasService mkPersistDir;
inherit (config.users.users) unpackerr;
inherit (config.networking) hostName;
@ -75,12 +75,7 @@ in {
};
${namespace}.services.storage.impermanence.folders = [
{
directory = "/var/lib/unpackerr";
user = unpackerr.name;
group = unpackerr.group;
mode = "700";
}
(mkPersistDir config "unpackerr" "/var/lib/unpackerr")
];
sops.secrets."environment-file/unpackerr" = {};

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) types mkEnableOption mkIf groupBy mapAttrsToList attrNames mapAttrs concatStringsSep flatten;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace resolveHostIP mkOpt mkOptAttrset mkListOpt;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace resolveHostIP mkOpt mkOptAttrset mkListOpt mkPersistDir;
inherit (config.networking) hostName;
base = "${namespace}.services.apps.slurm";
cfg = getAttrByNamespace config base;
@ -124,8 +124,8 @@ in {
};
${namespace}.services.storage.impermanence.folders = [
"/var/spool/slurmctld"
"/var/spool/slurmd"
(mkPersistDir config "slurm" "/var/spool/slurmctld")
(mkPersistDir config "slurm" "/var/spool/slurmd")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf mkForce;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace hostHasService resolveServicePort mkPersistDir;
inherit (config.users) users;
inherit (config.networking) hostName;
@ -43,6 +43,8 @@ in {
networking.firewall.allowedTCPPorts = [port];
${namespace}.services.storage.impermanence.folders = ["/var/lib/uptime-kuma"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "uptime-kuma" "/var/lib/uptime-kuma")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkMerge;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort;
inherit (lib.${namespace}) getAttrByNamespace resolveDatabaseHost resolveDatabaseIP hostHasService resolveServicePort mkPersistDir;
inherit (config.networking) hostName;
pgCfg = getAttrByNamespace config "${namespace}.services.storage.postgresql";
@ -64,5 +64,9 @@ in {
sops.secrets."vaultwarden" = {};
networking.firewall.allowedTCPPorts = [port];
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "vaultwarden" "/var/lib/vaultwarden")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) types mkEnableOption mkOption mkIf;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkOpt mkRequiredOpt mkNullableOpt mkOptAttrset;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkOpt mkRequiredOpt mkNullableOpt mkOptAttrset mkPersistDir;
inherit (config.networking) hostName;
inherit (config.sops) secrets;
base = "${namespace}.services.ci.github-runner";
@ -102,6 +102,8 @@ in {
sops.secrets."github/runner" = {};
${namespace}.services.storage.impermanence.folders = ["/var/lib/github-runner"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistDir config "github-runner" "/var/lib/github-runner")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkEnableOption mkIf;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkPersistRootDir;
base = "${namespace}.services.networking.network-manager";
cfg = getAttrByNamespace config base;
in {
@ -19,6 +19,8 @@ in {
networking.networkmanager.enable = true;
${namespace}.services.storage.impermanence.folders = ["/etc/NetworkManager/system-connections"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/etc/NetworkManager/system-connections")
];
};
}

View file

@ -5,7 +5,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkPersistRootDir;
base = "${namespace}.services.networking.tailscale";
cfg = getAttrByNamespace config base;
in {
@ -19,6 +19,8 @@ in {
useRoutingFeatures = "server";
};
${namespace}.services.storage.impermanence.folders = ["/var/lib/tailscale"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/var/lib/tailscale")
];
};
}

View file

@ -37,8 +37,15 @@ in {
"cloudflare/acme-token" = {};
};
${namespace}.services.storage.impermanence.folders = [
"/var/lib/acme"
${namespace}.services.storage.impermanence.folders = let
inherit (config.users.users) acme;
in [
{
directory = "/var/lib/acme";
user = acme.name;
group = acme.group;
mode = "750";
}
];
};
}

View file

@ -5,7 +5,7 @@
...
} @ args: let
inherit (lib) types mkIf mkEnableOption mkMerge concatStringsSep;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace resolveHostIP mkOpt mkRequiredOpt mkNullableOpt mkListOpt mkOptAttrset;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace resolveHostIP mkOpt mkRequiredOpt mkNullableOpt mkListOpt mkOptAttrset mkPersistRootDir;
base = "${namespace}.services.storage.nfs";
cfg = getAttrByNamespace config base;
networkCfg = getAttrByNamespace config "${namespace}.services.networking";
@ -51,8 +51,8 @@ in {
};
${namespace}.services.storage.impermanence.folders = mkMerge [
["/var/lib/nfs"]
(mkIf (cfg.shares != []) (cfg.shares |> map (s: "/mnt/nfs/${s.name}")))
[ (mkPersistRootDir config "/var/lib/nfs") ]
(mkIf (cfg.shares != []) (cfg.shares |> map (s: mkPersistRootDir config "/mnt/nfs/${s.name}")))
];
networking.firewall.allowedTCPPorts = [2049];

View file

@ -7,7 +7,7 @@
...
} @ args: let
inherit (lib) types mkIf mkMerge concatStringsSep hasAttr getAttr filter optionalString head splitString;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace readJsonOrEmpty getIn mkOptAttrset;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace readJsonOrEmpty getIn mkOptAttrset mkPersistDir;
inherit (config.networking) hostName;
base = "${namespace}.services.storage.postgresql";
cfg = getAttrByNamespace config base;
@ -92,7 +92,7 @@ in {
};
${namespace}.services.storage.impermanence.folders = [
"/var/lib/postgresql"
(mkPersistDir config "postgres" "/var/lib/postgresql")
];
systemd.services.postgresql-setup.postStart = ''

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf concatStringsSep hasAttr getAttr genAttrs;
inherit (lib.${namespace}) getAttrByNamespace readJsonOrEmpty getIn;
inherit (lib.${namespace}) getAttrByNamespace readJsonOrEmpty getIn mkPersistDir;
inherit (config.networking) hostName;
base = "${namespace}.services.storage.postgresql";
cfg = getAttrByNamespace config base;
@ -72,7 +72,7 @@ in {
};
${namespace}.services.storage.impermanence.folders = [
"/var/lib/pgbouncer"
(mkPersistDir config "pgbouncer" "/var/lib/pgbouncer")
];
});
}

View file

@ -5,7 +5,7 @@
...
} @ args: let
inherit (lib) types mkIf mkEnableOption mkMerge;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkRequiredOpt mkNullableOpt mkListOpt mkOptAttrset;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkRequiredOpt mkNullableOpt mkListOpt mkOptAttrset mkPersistRootDir;
inherit (config.users) users;
base = "${namespace}.services.storage.samba";
@ -75,8 +75,8 @@ in {
};
${namespace}.services.storage.impermanence.folders = mkMerge [
["/var/lib/samba"]
(mkIf (cfg.shares != []) (cfg.shares |> map (s: "/mnt/samba/${s}")))
[ (mkPersistRootDir config "/var/lib/samba") ]
(mkIf (cfg.shares != []) (cfg.shares |> map (s: mkPersistRootDir config "/mnt/samba/${s}")))
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) types mkEnableOption mkIf mapAttrs mapAttrs' listToAttrs map;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace resolveHostIP mkOpt mkOptAttrset mkListOpt;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace resolveHostIP mkOpt mkOptAttrset mkListOpt mkPersistDir;
inherit (config.networking) hostName;
base = "${namespace}.services.storage.syncthing";
cfg = getAttrByNamespace config base;
@ -74,7 +74,8 @@ in {
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true";
${namespace}.services.storage.impermanence.folders = mkIf cfg.enable (
["/mnt/syncthing"] ++ (builtins.attrNames cfg.shares |> map (k: "/mnt/syncthing/${k}"))
[ (mkPersistDir config "c4patino" "/mnt/syncthing") ]
++ (builtins.attrNames cfg.shares |> map (k: mkPersistDir config "c4patino" "/mnt/syncthing/${k}"))
);
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption mkOverride;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace mkPersistRootDir;
base = "${namespace}.virtualization.docker";
cfg = getAttrByNamespace config base;
nvdaCfg = getAttrByNamespace config "${namespace}.hardware.nvidia";
@ -48,6 +48,8 @@ in {
networking.firewall.allowedTCPPorts = [2376];
${namespace}.services.storage.impermanence.folders = ["/var/lib/docker"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/var/lib/docker")
];
};
}

View file

@ -6,7 +6,7 @@
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace enabled;
inherit (lib.${namespace}) getAttrByNamespace mkOptionsWithNamespace enabled mkPersistRootDir;
base = "${namespace}.virtualization.podman";
cfg = getAttrByNamespace config base;
nvdaBase = "${namespace}.hardware.nvidia";
@ -30,6 +30,8 @@ in {
podman = enabled;
};
${namespace}.services.storage.impermanence.folders = ["/var/lib/containers"];
${namespace}.services.storage.impermanence.folders = [
(mkPersistRootDir config "/var/lib/containers")
];
};
}