diff --git a/config/grapheio/scripts/screenshot.sh b/config/grapheio/scripts/screenshot.sh new file mode 100755 index 0000000..1e9bf63 --- /dev/null +++ b/config/grapheio/scripts/screenshot.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -e + +# Dependencies: +# - slurp +# - grim + +ACTION=$1 + +DATESTAMP=$(date +"%Y%m%d%H%M%S") +OUT_DIR="${HOME}/screenshots" +OUT_FILE="capture-${ACTION}-${DATESTAMP}.png" + +case $ACTION in + region) + [[ ! -d "${OUT_DIR}" ]] && mkdir $OUT_DIR + slurp | grim -t png -g - "${OUT_DIR}/${OUT_FILE}" + ;; + screen) + [[ ! -d "${OUT_DIR}" ]] && mkdir $OUT_DIR + grim -t png "${OUT_DIR}/${OUT_FILE}" + ;; + *) + echo "Unknown action" + exit 1 + ;; +esac diff --git a/modules/desktop/grapheio.nix b/modules/desktop/grapheio.nix index 6a5e6fb..f6a0a66 100644 --- a/modules/desktop/grapheio.nix +++ b/modules/desktop/grapheio.nix @@ -115,6 +115,8 @@ in swaync.enable = true; # Clipboard manager (history) cliphist.enable = true; + # Take screenshots + screenshot.enable = true; }; }; diff --git a/modules/desktop/tools/screenshot.nix b/modules/desktop/tools/screenshot.nix new file mode 100644 index 0000000..8f37f89 --- /dev/null +++ b/modules/desktop/tools/screenshot.nix @@ -0,0 +1,31 @@ +{ config, lib, pkgs, inputs, ... }: + +with lib; +let + cfg = config.samfelag.modules.desktop.tools.screenshot; + hyprCfg = config.samfelag.modules.desktop.wm.hyprland; +in +{ + options.samfelag.modules.desktop.tools.screenshot = { + enable = mkEnableOption "Screenshot utilities"; + }; + + config = mkIf cfg.enable { + + # - Screenshot utilities --------------------- + environment.systemPackages = [ + pkgs.slurp # to select the region + pkgs.grim # actual screenshot program + ]; + + # - Hyprland keybindings --------------------- + hm.wayland.windowManager.hyprland.settings = lib.mkIf hyprCfg.enable { + bind = [ + # Screenshots + "${hyprCfg.mod}, s, exec, $HOME/.config/grapheio/scripts/screenshot.sh region" + "${hyprCfg.mod}, SHIFT s, exec, $HOME/.config/grapheio/scripts/screenshot.sh screen" + ]; + }; + + }; +}