summaryrefslogtreecommitdiff
path: root/modules/syncthing.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/syncthing.nix')
-rw-r--r--modules/syncthing.nix136
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;
+ };
+ };
+ };
+}