{ user ? throw "user argument is required" }: { config, lib, pkgs, ... }: let hmConfig = config.home-manager.users.${user.name}; in { home-manager.users.${user.name} = { home = { packages = with pkgs; [ wl-clipboard cliphist ]; persistence."/cache${user.home}".directories = [ "${hmConfig.xdg.relativeCacheHome}/cliphist" ]; }; systemd.user.services = { cliphist-text = { Unit = { Description = "Clipboard manager (text)"; BindsTo = [ "graphical-session.target" ]; After = [ "graphical-session.target" ]; }; Service.ExecStart = lib.meta.getExe (pkgs.writeShellApplication { name = "init-cliphist-text"; runtimeInputs = with pkgs; [ wl-clipboard cliphist ]; text = "exec wl-paste --type text --watch cliphist store"; }); Install.WantedBy = [ "graphical-session.target" ]; }; cliphist-image = { Unit = { Description = "Clipboard manager (images)"; BindsTo = [ "graphical-session.target" ]; After = [ "graphical-session.target" ]; }; Service.ExecStart = lib.meta.getExe (pkgs.writeShellApplication { name = "init-cliphist-image"; runtimeInputs = with pkgs; [ wl-clipboard cliphist ]; text = "exec wl-paste --type image --watch cliphist store"; }); Install.WantedBy = [ "graphical-session.target" ]; }; }; wayland.windowManager.hyprland.settings.bind = [ "$mod, v, exec, cliphist list | ${lib.meta.getExe pkgs.rofi-wayland} -cache-dir ${hmConfig.xdg.cacheHome}/rofi -dmenu -display-columns 2 | cliphist decode | wl-copy" "$mod_CTRL, v, exec, cliphist list | ${lib.meta.getExe pkgs.rofi-wayland} -cache-dir ${hmConfig.xdg.cacheHome}/rofi -dmenu -display-columns 2 | cliphist delete" "$mod_CTRL_SHIFT, v, exec, cliphist wipe" ]; }; }