diff options
Diffstat (limited to 'modules/syncthing.nix')
| -rw-r--r-- | modules/syncthing.nix | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/modules/syncthing.nix b/modules/syncthing.nix new file mode 100644 index 0000000..0c5e53e --- /dev/null +++ b/modules/syncthing.nix @@ -0,0 +1,136 @@ +{ + config, + lib, + username, + ... +}: +let + cfg = config.os.srv.syncthing; + allFolders = { + "openmw-config" = { + path = "/home/${username}/.config/openmw"; + id = "openmw-config"; + devices = [ "oci" ]; + versioning = { + type = "simple"; + params.keep = "3"; + }; + ignorePatterns = [ + "settings.cfg" + "*.log" + ]; + }; + + "openmw-mods" = { + path = "/home/${username}/games/openmw"; + id = "openmw-mods"; + devices = [ "oci" ]; + versioning = { + type = "trashcan"; + params.cleanoutDays = "7"; + }; + }; + + "game-saves" = { + path = "/home/${username}/.saves"; + id = "game-saves"; + devices = [ "oci" ]; + versioning = { + type = "staggered"; + params = { + cleanInterval = "3600"; + maxAge = "2592000"; + }; + }; + }; + + "keepass" = { + path = "/home/${username}/.keepass"; + id = "keepass"; + devices = [ + { + name = "oci"; + encryptionPasswordFile = config.sops.secrets."syncthing/encryption/keepass".path; + } + ]; + versioning = { + type = "staggered"; + params = { + cleanInterval = "3600"; + maxAge = "31536000"; + }; + }; + }; + + "sync" = { + path = "/home/${username}/sync"; + id = "sync"; + devices = [ + { + name = "oci"; + encryptionPasswordFile = config.sops.secrets."syncthing/encryption/sync".path; + } + ]; + versioning = { + type = "staggered"; + params = { + cleanInterval = "3600"; + maxAge = "15552000"; + }; + }; + }; + + "music" = { + path = "/storage/music"; + id = "music"; + devices = [ "oci" ]; + versioning = { + type = "trashcan"; + params.cleanoutDays = "14"; + }; + }; + }; + activeFoldersSet = lib.filterAttrs (name: _: builtins.elem name cfg.activeFolders) allFolders; + + syncDirs = lib.mapAttrsToList (_: folder: folder.path) activeFoldersSet; +in +{ + options.os.srv.syncthing = { + enable = lib.mkEnableOption "enables syncthing syncing"; + + activeFolders = lib.mkOption { + type = lib.types.listOf ( + lib.types.enum [ + "openmw-config" + "openmw-mods" + "game-saves" + "keepass" + "sync" + "music" + ] + ); + default = [ + "keepass" + "sync" + ]; + description = "List of Syncthing folders to enable and sync on this specific machine."; + }; + }; + config = lib.mkIf cfg.enable { + systemd.tmpfiles.rules = map (path: "d ${path} 0755 ${username} users -") syncDirs; + + services.syncthing = { + enable = true; + user = username; + dataDir = "/home/${username}/.local/share/syncthing"; + configDir = "/home/${username}/.config/syncthing"; + # guiPasswordFile = config.sops.secrets."syncthing/gui_password".path; + + settings = { + devices."oci".id = "DQXGVDC-KGPM6RK-5NDEBJJ-R7PEWYZ-N6Z3WFZ-TSVJG5X-235SHG4-4BEJNQJ"; + + folders = activeFoldersSet; + }; + }; + }; +} |
