Add screenshot tool with SUPER+SHIFT+S bind

This commit is contained in:
Joshua Yuen 2026-09-12 20:45:33 -04:00
parent 3db6ad962e
commit 87c7040239
Signed by: josh
GPG Key ID: 530DA0331EFE99F5
5 changed files with 75 additions and 0 deletions

View File

@ -11,6 +11,7 @@
./fzf.nix
./hyprland
./kitty.nix
./screenshot.nix
./stylix.nix
./vscodium.nix
./walker.nix

View File

@ -0,0 +1,58 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.modules.screenshot;
hyprlandCfg = config.modules.hyprland;
runtimeDeps = with pkgs; [
coreutils
grim
libnotify
slurp
util-linux
wl-clipboard
];
screenshot = pkgs.writeShellScriptBin "screenshot" ''
PATH=${lib.makeBinPath runtimeDeps}:''${PATH:-}
set -euo pipefail
pictures_dir="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")"
mkdir -p "$pictures_dir"
file="$pictures_dir/screenshot_$(date +%Y-%m-%d_%H-%M-%S).png"
notify() {
notify-send -t 2500 -u low "Screenshot" "$1" 2>/dev/null || true
}
# Pick a region (Escape or a plain click cancels)
geometry="$(slurp 2>/dev/null)" || exit 0
if ! grim -g "$geometry" "$file"; then
rm -f "$file"
notify "Capture failed"
exit 1
fi
wl-copy < "$file" 2>/dev/null || true
notify "Saved to $file (also copied to clipboard)"
'';
in
{
config = mkIf cfg.enable {
home.packages = [ screenshot ];
wayland.windowManager.hyprland = mkIf hyprlandCfg.enable {
settings = {
bind = [ "SUPER SHIFT, S, exec, screenshot" ];
};
};
};
}

View File

@ -12,6 +12,7 @@
./localsend.nix
./pipewire.nix
./plasma.nix
./screenshot.nix
./shell.nix
./system.nix
./tailscale.nix

View File

@ -0,0 +1,13 @@
{
lib,
...
}:
with lib;
{
options.modules.screenshot = {
enable = mkEnableOption {
default = false;
description = "Enable screenshot capture tool (SUPER+SHIFT+S)";
};
};
}

View File

@ -24,5 +24,7 @@
modules.dictation.enable = true;
modules.screenshot.enable = true;
modules.tailscale.enable = true;
}