diff --git a/options/custom/desktops/niri/default.nix b/options/custom/desktops/niri/default.nix index 33bc5be..d608200 100644 --- a/options/custom/desktops/niri/default.nix +++ b/options/custom/desktops/niri/default.nix @@ -35,8 +35,13 @@ in { }; }; - # Enable rootless Xwayland - services.xwayland-satellite.enable = cfg.xwayland; + services = { + # Enable rootless Xwayland + xwayland-satellite.enable = cfg.xwayland; + + # Enable X11/Wayland clipboard sync + clipsync.enable = true; + }; }; # https://github.com/YaLTeR/niri diff --git a/options/custom/services/clipnotify.nix b/options/custom/services/clipnotify.nix new file mode 100644 index 0000000..56b1aef --- /dev/null +++ b/options/custom/services/clipnotify.nix @@ -0,0 +1,43 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; let + cfg = config.custom.services.clipsync; + + clipnotify = getExe pkgs.clipnotify; + wl-copy = getExe' pkgs.wl-clipboard "wl-copy"; + xclip = getExe pkgs.xclip; +in { + options.custom.services.clipsync = { + enable = mkOption {default = false;}; + }; + + config = mkIf cfg.enable { + # https://github.com/cdown/clipnotify + systemd.user.services.clipsync = { + enable = true; + wantedBy = ["graphical-session.target"]; + + unitConfig = { + Description = "Sync clipboard between Wayland and X11"; + + After = + ["graphical-session.target"] + ++ optionals config.custom.services.xwayland-satellite.enable ["xwayland-satellite.service"]; + }; + + serviceConfig = { + Type = "simple"; + + ExecStart = pkgs.writeShellScript "clipsync" '' + while ${clipnotify}; do + ${xclip} -selection clipboard -out | ${wl-copy} + done + ''; + }; + }; + }; +}