From fb49fbc3684154df979618670ccc55819d4b9759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaros=C5=82aw=20Wygoda?= Date: Sat, 27 Aug 2022 20:52:41 +0200 Subject: [PATCH] clipman: add module --- .github/CODEOWNERS | 3 + modules/lib/maintainers.nix | 6 ++ modules/misc/news.nix | 8 +++ modules/modules.nix | 1 + modules/services/clipman.nix | 58 +++++++++++++++++++ tests/default.nix | 1 + .../clipman/clipman-sway-session-target.nix | 20 +++++++ .../clipman-sway-session-target.service | 13 +++++ tests/modules/services/clipman/default.nix | 1 + 9 files changed, 111 insertions(+) create mode 100644 modules/services/clipman.nix create mode 100644 tests/modules/services/clipman/clipman-sway-session-target.nix create mode 100644 tests/modules/services/clipman/clipman-sway-session-target.service create mode 100644 tests/modules/services/clipman/default.nix diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 22c23275a..9ade1106a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -369,6 +369,9 @@ Makefile @thiagokokada /modules/services/cbatticon.nix @pmiddend +/modules/services/clipman.nix @jwygoda +/tests/modules/services/clipman @jwygoda + /modules/services/clipmenu.nix @DamienCassou /modules/services/devilspie2.nix @dawidsowa diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index 5b557644a..7aa1842af 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -233,6 +233,12 @@ githubId = 1553581; name = "Josh Robson Chase"; }; + jwygoda = { + name = "Jarosław Wygoda"; + email = "jaroslaw@wygoda.me"; + github = "jwygoda"; + githubId = 20658981; + }; hawkw = { name = "Eliza Weisman"; email = "eliza@elizas.website"; diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 1be3e26fa..9ed95f3d1 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -869,6 +869,14 @@ in A new module is available: 'services.cachix-agent'. ''; } + + { + time = "2022-12-28T21:48:22+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'services.clipman'. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 44aa17da4..7e6d2e71d 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -207,6 +207,7 @@ let ./services/cachix-agent.nix ./services/caffeine.nix ./services/cbatticon.nix + ./services/clipman.nix ./services/clipmenu.nix ./services/devilspie2.nix ./services/dropbox.nix diff --git a/modules/services/clipman.nix b/modules/services/clipman.nix new file mode 100644 index 000000000..4afee9a3e --- /dev/null +++ b/modules/services/clipman.nix @@ -0,0 +1,58 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.clipman; + +in { + meta.maintainers = [ maintainers.jwygoda ]; + + options.services.clipman = { + enable = mkEnableOption "clipman, a simple clipboard manager for Wayland"; + + package = mkPackageOption pkgs "clipman" { }; + + systemdTarget = mkOption { + type = types.str; + default = "graphical-session.target"; + example = "sway-session.target"; + description = '' + The systemd target that will automatically start the Waybar service. + + + When setting this value to "sway-session.target", + make sure to also enable , + otherwise the service may never be started. + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.clipman" pkgs + lib.platforms.linux) + ]; + + home.packages = [ cfg.package ]; + + systemd.user.services.clipman = { + Unit = { + Description = "Clipboard management daemon"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + }; + + Service = { + ExecStart = + "${pkgs.wl-clipboard}/bin/wl-paste -t text --watch ${cfg.package}/bin/clipman store"; + ExecReload = "${pkgs.coreutils}/bin/kill -SIGUSR2 $MAINPID"; + Restart = "on-failure"; + KillMode = "mixed"; + }; + + Install = { WantedBy = [ cfg.systemdTarget ]; }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 1459f86b0..ac31f3b50 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -167,6 +167,7 @@ import nmt { ./modules/services/barrier ./modules/services/borgmatic ./modules/services/cachix-agent + ./modules/services/clipman ./modules/services/devilspie2 ./modules/services/dropbox ./modules/services/emacs diff --git a/tests/modules/services/clipman/clipman-sway-session-target.nix b/tests/modules/services/clipman/clipman-sway-session-target.nix new file mode 100644 index 000000000..129ab554f --- /dev/null +++ b/tests/modules/services/clipman/clipman-sway-session-target.nix @@ -0,0 +1,20 @@ +{ ... }: + +{ + home.stateVersion = "21.11"; + + services.clipman = { + enable = true; + systemdTarget = "sway-session.target"; + }; + + test.stubs = { + clipman = { }; + wl-clipboard = { }; + }; + + nmt.script = '' + serviceFile=$(normalizeStorePaths home-files/.config/systemd/user/clipman.service) + assertFileContent "$serviceFile" ${./clipman-sway-session-target.service} + ''; +} diff --git a/tests/modules/services/clipman/clipman-sway-session-target.service b/tests/modules/services/clipman/clipman-sway-session-target.service new file mode 100644 index 000000000..0d0478cc7 --- /dev/null +++ b/tests/modules/services/clipman/clipman-sway-session-target.service @@ -0,0 +1,13 @@ +[Install] +WantedBy=sway-session.target + +[Service] +ExecReload=/nix/store/00000000000000000000000000000000-coreutils/bin/kill -SIGUSR2 $MAINPID +ExecStart=@wl-clipboard@/bin/wl-paste -t text --watch @clipman@/bin/clipman store +KillMode=mixed +Restart=on-failure + +[Unit] +After=graphical-session.target +Description=Clipboard management daemon +PartOf=graphical-session.target diff --git a/tests/modules/services/clipman/default.nix b/tests/modules/services/clipman/default.nix new file mode 100644 index 000000000..abca59c09 --- /dev/null +++ b/tests/modules/services/clipman/default.nix @@ -0,0 +1 @@ +{ clipman-sway-session-target = ./clipman-sway-session-target.nix; }