Compare commits

...

26 commits

Author SHA1 Message Date
bd7fc9355a WIP: add notes for missing persistence/backup
Some checks failed
ci/woodpecker/push/check Pipeline failed
TODO:
* Look at for more inspiration https://github.com/nix-community/impermanence/pull/108
* Do home-manager
* Common files https://github.com/nix-community/impermanence/issues/10
2023-11-11 18:31:27 +00:00
21596a7c15 nixos: services: quassel: persist data 2023-11-11 18:31:27 +00:00
ae84f7fef7 nixos: services: pirate: persist data 2023-11-11 18:31:27 +00:00
dd8d514c3b nixos: services: monitoring: persist data 2023-11-11 18:31:27 +00:00
be2fbd0267 nixos: services: nginx: persist SSL certificates 2023-11-11 18:31:27 +00:00
29a711ec44 nixos: services: transmission: persist data 2023-11-11 18:31:27 +00:00
d4bd85f47c nixos: services: sabnzbd: persist data 2023-11-11 18:31:27 +00:00
d983524687 nixos: services: rss-bridge: persist data 2023-11-11 18:31:27 +00:00
eddc721e9b nixos: services: podgrab: persist data 2023-11-11 18:31:27 +00:00
3ec701229e nixos: services: nextcloud: persist data 2023-11-11 18:31:27 +00:00
0482b8649b nixos: services: navidrome: persist data 2023-11-11 18:31:27 +00:00
ac2c1cf69f nixos: services: lohr: persist data 2023-11-11 18:31:27 +00:00
e7a2b84821 nixos: services: jellyfin: persist data 2023-11-11 18:31:27 +00:00
aa6ec00a40 nixos: services: indexers: persist data 2023-11-11 18:31:27 +00:00
be58c8d8cd nixos: services: postgresql: persist data 2023-11-11 18:31:27 +00:00
1e4ae91b44 nixos: services: postgresql-backup: persist data 2023-11-11 18:31:27 +00:00
4f269ee64f nixos: services: paperless: persist data 2023-11-11 18:31:27 +00:00
1739ed3158 nixos: services: matrix: persist data 2023-11-11 18:31:27 +00:00
9df74cbf08 nixos: services: gitea: persist repositories 2023-11-11 18:31:27 +00:00
25157000af nixos: services: flood: persist data 2023-11-11 18:31:27 +00:00
9a7123a4ae nixos: services: calibre-web: persist library 2023-11-11 18:31:27 +00:00
d141a86040 nixos: services: blog: persist website data 2023-11-11 18:31:27 +00:00
b09449492f nixos: hardware: bluetooth: persist connections 2023-11-11 18:31:27 +00:00
15119d97da nixos: hardware: netowrking persist connections 2023-11-11 18:31:27 +00:00
b980f14a88 nixos: services: ssh-server: persist host keys 2023-11-11 18:31:27 +00:00
641e93dc32 WIP: nixos: system: add persist
This is the module that takes care of configuring impermanence at the
system level.

WIP:
    * address FIXMEs
    * activate home-manager persistence?
        * set `programs.fuse.userAllowOther = true;` ?
    * point `age` to persisted paths [1] ?
    * make sure all services and modules are persisted correctly...

[1]: b1d18d25b8
2023-11-11 18:31:27 +00:00
30 changed files with 205 additions and 0 deletions

View file

@ -18,6 +18,13 @@ in
services.blueman.enable = true;
}
# Persist bluetooth files
{
my.system.persist.directories = [
"/var/lib/bluetooth"
];
}
# Support for additional bluetooth codecs
(lib.mkIf cfg.loadExtraCodecs {
hardware.pulseaudio = {

View file

@ -22,6 +22,11 @@ in
config = lib.mkMerge [
(lib.mkIf cfg.wireless.enable {
networking.networkmanager.enable = true;
# Persist NetworkManager files
my.system.persist.directories = [
"/etc/NetworkManager/system-connections"
];
})
];
}

View file

@ -42,5 +42,12 @@ in
# Those are all subdomains, no problem
my.services.nginx.virtualHosts = hostsInfo;
my.system.persist.directories = [
"/var/www/blog"
"/var/www/cv"
"/var/www/dev"
"/var/www/key"
];
};
}

View file

@ -54,6 +54,11 @@ in
];
};
my.system.persist.directories = [
"/var/lib/${config.services.calibre-web.dataDir}"
cfg.libraryPath
];
services.fail2ban.jails = {
calibre-web = ''
enabled = true

View file

@ -46,5 +46,9 @@ in
inherit (cfg) port;
}
];
my.system.persist.directories = [
"/var/lib/${cfg.stateDir}"
];
};
}

View file

@ -135,6 +135,11 @@ in
];
};
my.system.persist.directories = [
config.services.gitea.lfs.contentDir
config.services.gitea.repositoryRoot
];
services.fail2ban.jails = {
gitea = ''
enabled = true

View file

@ -36,5 +36,8 @@ in
forceSSL = true;
useACMEHost = config.networking.domain;
};
# FIXME: backup
# FIXME: persistence
};
}

View file

@ -34,6 +34,10 @@ in
port = jackettPort;
}
];
my.system.persist.directories = [
config.services.jackett.dataDir
];
})
(lib.mkIf cfg.nzbhydra.enable {
@ -47,6 +51,10 @@ in
port = nzbhydraPort;
}
];
my.system.persist.directories = [
config.services.nzbhydra2.dataDir
];
})
(lib.mkIf cfg.prowlarr.enable {
@ -61,6 +69,10 @@ in
}
];
my.system.persist.directories = [
"/var/lib/${config.systemd.services.prowlarr.serviceConfig.StateDirectory}"
];
services.fail2ban.jails = {
prowlarr = ''
enabled = true

View file

@ -35,5 +35,9 @@ in
};
}
];
my.system.persist.directories = [
"/var/lib/${config.systemd.services.jellyfin.serviceConfig.StateDirectory}"
];
};
}

View file

@ -104,5 +104,9 @@ in
inherit (cfg) port;
}
];
my.system.persist.directories = [
"/var/lib/${config.systemd.services.lohr.serviceConfig.StateDirectory}"
];
};
}

View file

@ -257,5 +257,9 @@ in
config.services.matrix-synapse.dataDir
];
};
my.system.persist.directories = [
config.services.matrix-synapse.dataDir
];
};
}

View file

@ -49,5 +49,8 @@ in
inherit (cfg) port;
}
];
# FIXME: backup
# FIXME: persistence
};
}

View file

@ -131,5 +131,10 @@ in
inherit (cfg.grafana) port;
}
];
my.system.persist.directories = [
config.services.grafana.dataDir
"/var/lib/${config.services.prometheus.stateDir}"
];
};
}

View file

@ -53,5 +53,9 @@ in
inherit (cfg) port;
}
];
my.system.persist.directories = [
"/var/lib/${config.systemd.services.navidrome.serviceConfig.StateDirectory}"
];
};
}

View file

@ -82,5 +82,10 @@ in
"${config.services.nextcloud.home}/data/appdata_*/preview"
];
};
my.system.persist.directories = [
config.services.nextcloud.home
config.services.nextcloud.datadir
];
};
}

View file

@ -467,5 +467,9 @@ in
}
];
};
my.system.persist.directories = [
config.users.user.acme.home
];
};
}

View file

@ -164,5 +164,10 @@ in
config.services.paperless.mediaDir
];
};
my.system.persist.directories = [
config.services.paperless-ng.dataDir
config.services.paperless-ng.mediaDir
];
};
}

View file

@ -18,6 +18,11 @@ let
enable = true;
group = "media";
};
# Thankfully those old style services all define users with homes
my.system.persist.directories = [
config.users.user.${service}.home
];
};
mkRedirection = service: {

View file

@ -37,5 +37,10 @@ in
inherit (cfg) port;
}
];
my.system.persist.directories =
builtins.map
(d: "/var/lib/${d}")
config.systemd.services.podgrab.serviceConfig.StateDirectory;
};
}

View file

@ -24,5 +24,9 @@ in
(config.services.postgresqlBackup.location + "/*.prev.sql.gz")
];
};
my.system.persist.directories = [
config.services.postgresqlBackup.location
];
};
}

View file

@ -18,6 +18,13 @@ in
};
})
# Only persist directory if the actual service is enabled
(lib.mkIf config.services.postgresql.enable {
my.system.persist.directories = [
config.services.postgresql.dataDir
];
})
# Taken from the manual
(lib.mkIf cfg.upgradeScript {
containers.temp-pg.config.services.postgresql = {

View file

@ -46,5 +46,9 @@ in
# Because Quassel does not use the socket, I simply trust its connection
authentication = "host quassel quassel localhost trust";
};
my.system.persist.directories = [
config.services.quassel.dataDir
];
};
}

View file

@ -20,5 +20,9 @@ in
forceSSL = true;
useACMEHost = config.networking.domain;
};
my.system.persist.directories = [
config.services.rss-bridge.dataDir
];
};
}

View file

@ -25,6 +25,10 @@ in
}
];
my.system.persist.files = [
config.services.sabnzbd.configFile
];
services.fail2ban.jails = {
sabnzbd = ''
enabled = true

View file

@ -20,6 +20,14 @@ in
};
};
# Persist SSH keys
my.system.persist.files = [
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_ed25519_key.pub"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_rsa_key.pub"
];
# Opens the relevant UDP ports.
programs.mosh.enable = true;
};

View file

@ -76,5 +76,8 @@ in
inherit (cfg) port;
}
];
# FIXME: backup
# FIXME: persistence
};
}

View file

@ -91,5 +91,9 @@ in
allowedTCPPorts = [ cfg.peerPort ];
allowedUDPPorts = [ cfg.peerPort ];
};
my.system.persist.directories = [
config.services.transmission.home
];
};
}

View file

@ -119,5 +119,7 @@ in
config.services.vikunja.settings.files.basepath
];
};
# FIXME: persistence
};
}

View file

@ -9,6 +9,7 @@
./language
./nix
./packages
./persist
./podman
./printing
./users

View file

@ -0,0 +1,68 @@
# Ephemeral root configuration
{ config, inputs, lib, ... }:
let
cfg = config.my.system.persist;
in
{
imports = [
inputs.impermanence.nixosModules.impermanence
];
options.my.system.persist = with lib; {
enable = mkEnableOption "stateless system configuration";
mountPoint = lib.mkOption {
type = types.str;
default = "/persistent";
example = "/etc/nix/persist";
description = ''
Which mount point should be used to persist this system's files and
directories.
'';
};
files = lib.mkOption {
type = with types; listOf str;
default = [ ];
example = [
"/etc/nix/id_rsa"
];
description = ''
Additional files in the root to link to persistent storage.
'';
};
directories = lib.mkOption {
type = with types; listOf str;
default = [ ];
example = [
"/var/lib/libvirt"
];
description = ''
Additional directories in the root to link to persistent storage.
'';
};
};
config = lib.mkIf cfg.enable {
environment.persistence."${cfg.mountPoint}" = {
files = [
"/etc/machine-id"
]
++ cfg.files
;
directories = [
"/etc/nixos"
"/var/log"
"/var/lib/systemd/coredump"
]
++ (lib.optionals config.virtualisation.docker.enable [
"/var/lib/docker"
])
# FIXME: podman
++ cfg.directories
;
};
};
}