From b7ab518f5879c6b385327a2186ee30abf52710ca Mon Sep 17 00:00:00 2001 From: alexion Date: Sun, 11 Oct 2026 22:40:44 -0400 Subject: [PATCH] refactor(screenshot): simplify capture bindings --- .../modules/desktop/utilities/screenshot.nix | 59 ++++++------------- 1 file changed, 19 insertions(+), 40 deletions(-) diff --git a/configs/nixos/modules/desktop/utilities/screenshot.nix b/configs/nixos/modules/desktop/utilities/screenshot.nix index ec5e65a..bbeb442 100644 --- a/configs/nixos/modules/desktop/utilities/screenshot.nix +++ b/configs/nixos/modules/desktop/utilities/screenshot.nix @@ -7,26 +7,26 @@ # Keyboard-driven screenshots copy to the clipboard before Satty opens for # annotation. Satty copies annotated screenshots when it saves them. let - user = config.user.name; - - grimblast = "${pkgs.grimblast}/bin/grimblast"; - satty = "${pkgs.satty}/bin/satty"; - tee = "${pkgs.coreutils}/bin/tee"; - wl-copy = "${pkgs.wl-clipboard}/bin/wl-copy"; - xdgUserDir = "${pkgs.xdg-user-dirs}/bin/xdg-user-dir"; + screenshotKey = keys: target: { + inherit keys; + action = { + kind = "exec"; + command = "${capture target}"; + }; + }; # Copy the original screenshot before Satty opens. # Satty copies and saves annotated screenshots when the user presses Enter. capture = target: pkgs.writeShellScript "screenshot-${target}" '' - dir="$(${xdgUserDir} PICTURES)/Screenshots" - mkdir -p "$dir" - ${grimblast} save ${target} - \ - | ${tee} >(${wl-copy}) \ - | ${satty} --filename - \ + dir="$(${lib.getExe' pkgs.xdg-user-dirs "xdg-user-dir"} PICTURES)/Screenshots" + ${lib.getExe' pkgs.coreutils "mkdir"} -p "$dir" + ${lib.getExe pkgs.grimblast} save ${target} - \ + | ${lib.getExe' pkgs.coreutils "tee"} >(${lib.getExe' pkgs.wl-clipboard "wl-copy"}) \ + | ${lib.getExe pkgs.satty} --filename - \ --output-filename "$dir/screenshot-%Y%m%d-%H%M%S.png" \ - --copy-command ${wl-copy} \ + --copy-command ${lib.getExe' pkgs.wl-clipboard "wl-copy"} \ --save-after-copy \ --early-exit \ --actions-on-enter save-to-clipboard @@ -37,33 +37,7 @@ in lib.mkEnableOption "screenshots via grimblast and satty"; config = lib.mkIf config.modules.desktop.utilities.screenshot.enable { - registry.keybind.${config.networking.hostName} = { - screenshot-area = { - keys = "Print"; - action = { - kind = "exec"; - command = "${capture "area"}"; - }; - }; - - screenshot-active = { - keys = "SHIFT + Print"; - action = { - kind = "exec"; - command = "${capture "active"}"; - }; - }; - - screenshot-screen = { - keys = "CTRL + Print"; - action = { - kind = "exec"; - command = "${capture "screen"}"; - }; - }; - }; - - home-manager.users.${user} = { + home-manager.users.${config.user.name} = { # satty is a one-shot annotation surface, so float it rather than letting # it claim a tile in the layout. wayland.windowManager.hyprland.settings.window_rule = [ @@ -72,7 +46,12 @@ in float = true; } ]; + }; + registry.keybind.${config.networking.hostName} = { + screenshot-area = screenshotKey "Print" "area"; + screenshot-active = screenshotKey "SHIFT + Print" "active"; + screenshot-screen = screenshotKey "CTRL + Print" "screen"; }; }; }