about summary refs log tree commit diff stats
path: root/modules/by-name/un/unison/module.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/un/unison/module.nix')
-rw-r--r--modules/by-name/un/unison/module.nix92
1 files changed, 92 insertions, 0 deletions
diff --git a/modules/by-name/un/unison/module.nix b/modules/by-name/un/unison/module.nix
new file mode 100644
index 00000000..baf92b02
--- /dev/null
+++ b/modules/by-name/un/unison/module.nix
@@ -0,0 +1,92 @@
+{
+  lib,
+  config,
+  pkgs,
+  sysLib,
+  ...
+}: let
+  cfg = config.soispha.services.unison;
+
+  script = import ./shellScript.nix {inherit sysLib lib pkgs cfg;};
+in {
+  options.soispha.services.unison = let
+    homePath = lib.types.strMatching "^~.*";
+  in {
+    enable = lib.mkEnableOption "a unison home sync script";
+
+    dataDir = lib.mkOption {
+      type = lib.types.path;
+      description = ''
+        This directory is used by unison to store it's data.
+      '';
+    };
+
+    foreign = {
+      address = lib.mkOption {
+        type = lib.types.str;
+        description = ''
+          The address to contact via ssh, when syncing.
+        '';
+      };
+      userName = lib.mkOption {
+        type = lib.types.str;
+        description = ''
+          The user name to try to login with at the foreign host.
+        '';
+      };
+    };
+
+    userSourceDir = lib.mkOption {
+      description = ''
+        The directory to replace the `~` in the relative user paths with.
+        If using `impermanence`, this should be the path to the persistent home directory.
+      '';
+    };
+
+    pathsToIgnore = lib.mkOption {
+      type = lib.types.listOf homePath;
+      default = [];
+      description = ''
+        A list of the paths that should not be synced.
+        Beware that this applies not only to this path, but also to all paths under it.
+      '';
+    };
+    pathsToSync = lib.mkOption {
+      type = lib.types.listOf homePath;
+      default = [];
+      description = ''
+        A list of the paths that should be synced.
+        Beware that this applies not only to this path, but also to all paths under it.
+      '';
+    };
+
+    unisonOptions = lib.mkOption {
+      internal = true;
+      default = {
+        sshcmd = "ssh";
+        ui = "text";
+        auto = "true";
+        # This is a trap, thanks to the HM links
+        # TODO: Auto-ignore all `home.file` paths <2024-10-24>
+        links = "false";
+
+        backupdir = "${cfg.dataDir}/backups";
+        backuploc = "central";
+      };
+      type = lib.types.attrsOf lib.types.str;
+      description = "The options passed to every unison call.";
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    home-manager.users.soispha = {
+      home.sessionVariables = {
+        UNISON = cfg.dataDir;
+      };
+      home.packages = [
+        pkgs.unison
+        script
+      ];
+    };
+  };
+}