feat: fix all initial impermanence perm folder creation
Some checks failed
ci / treefmt (push) Failing after 4s
Some checks failed
ci / treefmt (push) Failing after 4s
This commit is contained in:
parent
6a0b61a502
commit
0fd70dd3f8
39 changed files with 184 additions and 207 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
6
modules/nixos/desktop/env/greetd/default.nix
vendored
6
modules/nixos/desktop/env/greetd/default.nix
vendored
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,14 +27,14 @@ in {
|
|||
description = "Trap AI web scrapers in an endless poison pit";
|
||||
wantedBy = ["multi-user.target"];
|
||||
serviceConfig = let
|
||||
miasmaUser = config.users.users.miasma;
|
||||
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";
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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" = {};
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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 = ''
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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}")))
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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}"))
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue