diff --git a/modules/modules.nix b/modules/modules.nix index 35bf06ff..f4a622c1 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -249,6 +249,7 @@ let ./services/cachix-agent.nix ./services/caffeine.nix ./services/cbatticon.nix + ./services/cliphist.nix ./services/clipman.nix ./services/clipmenu.nix ./services/comodoro.nix diff --git a/modules/services/cliphist.nix b/modules/services/cliphist.nix new file mode 100644 index 00000000..6ba733fa --- /dev/null +++ b/modules/services/cliphist.nix @@ -0,0 +1,50 @@ +{ config, lib, pkgs, ... }: +let cfg = config.services.cliphist; +in { + meta.maintainers = [ lib.maintainers.janik ]; + + options.services.cliphist = { + enable = + lib.mkEnableOption "cliphist, a clipboard history “manager” for wayland"; + + package = lib.mkPackageOption pkgs "cliphist" { }; + + systemdTarget = lib.mkOption { + type = lib.types.str; + default = "graphical-session.target"; + example = "sway-session.target"; + description = '' + The systemd target that will automatically start the cliphist service. + + When setting this value to `"sway-session.target"`, + make sure to also enable {option}`wayland.windowManager.sway.systemd.enable`, + otherwise the service may never be started. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.cliphist" pkgs + lib.platforms.linux) + ]; + + home.packages = [ cfg.package ]; + + systemd.user.services.cliphist = { + Unit = { + Description = "Clipboard management daemon"; + PartOf = [ "graphical-session.target" ]; + }; + + Service = { + Type = "simple"; + ExecStart = + "${pkgs.wl-clipboard}/bin/wl-paste --watch ${cfg.package}/bin/cliphist store"; + Restart = "on-failure"; + }; + + Install = { WantedBy = [ cfg.systemdTarget ]; }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 182c7e27..b02d4c79 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -205,6 +205,7 @@ import nmt { ./modules/services/barrier ./modules/services/borgmatic ./modules/services/cachix-agent + ./modules/services/cliphist ./modules/services/clipman ./modules/services/comodoro ./modules/services/devilspie2 diff --git a/tests/modules/services/cliphist/cliphist-sway-session-target.nix b/tests/modules/services/cliphist/cliphist-sway-session-target.nix new file mode 100644 index 00000000..25da0f13 --- /dev/null +++ b/tests/modules/services/cliphist/cliphist-sway-session-target.nix @@ -0,0 +1,17 @@ +{ ... }: + +{ + services.cliphist = { + enable = true; + systemdTarget = "sway-session.target"; + }; + + test.stubs = { + cliphist = { }; + wl-clipboard = { }; + }; + + nmt.script = '' + assertFileExists home-files/.config/systemd/user/cliphist.service + ''; +} diff --git a/tests/modules/services/cliphist/default.nix b/tests/modules/services/cliphist/default.nix new file mode 100644 index 00000000..01101332 --- /dev/null +++ b/tests/modules/services/cliphist/default.nix @@ -0,0 +1 @@ +{ cliphist-sway-session-target = ./cliphist-sway-session-target.nix; }