{ ... }: { flake.homeManagerModules.wisdomDesktopScreenshot = { config, lib, pkgs, ... }: let root = config.chiasson.home; cfg = config.chiasson.home.desktop.screenshot; hyprlandHm = lib.attrByPath [ "wayland" "windowManager" "hyprland" ] { } config; hyprlandHmEnabled = hyprlandHm.enable or false; keyOk = cfg.swiftshareApiKeyFile != null && cfg.swiftshareApiKeyFile != ""; uploadScript = builtins.readFile ./scripts/swiftshare-upload.sh; screenshotScript = builtins.readFile ./scripts/swiftshare-screenshot.sh; in { options.chiasson.home.desktop.screenshot.enable = lib.mkEnableOption '' grim/slurp/swappy + SwiftShare helpers; Hyprland binds if HM Hyprland is on. ''; options.chiasson.home.desktop.screenshot.swiftshareApiKeyFile = lib.mkOption { type = lib.types.nullOr lib.types.str; default = null; description = '' File with SwiftShare API key (sops path is fine). Required when screenshot module is on. ''; }; config = lib.mkMerge [ (lib.mkIf (root.enable && cfg.enable) { assertions = [ { assertion = keyOk; message = "chiasson.home.desktop.screenshot: set chiasson.home.desktop.screenshot.swiftshareApiKeyFile to your SwiftShare API key file path."; } ]; }) (lib.mkIf (root.enable && cfg.enable && keyOk) ( let apiKeyFile = cfg.swiftshareApiKeyFile; swiftshareUpload = pkgs.writeShellScriptBin "swiftshare-upload" ( builtins.replaceStrings [ "@API_KEY_FILE@" ] [ apiKeyFile ] uploadScript ); swiftshareScreenshot = pkgs.writeShellScriptBin "swiftshare-screenshot" screenshotScript; in lib.mkMerge [ { home.packages = with pkgs; [ grim slurp swappy wl-clipboard libnotify curl jq swiftshareUpload swiftshareScreenshot ]; } (lib.mkIf hyprlandHmEnabled { wayland.windowManager.hyprland.settings = { bind = [ ", Print, exec, grim -g \"$(slurp)\" - | wl-copy" "Control, Print, exec, grim -g \"$(slurp)\" - | swappy -f -" "SUPER, Print, exec, swiftshare-screenshot" ]; windowrule = [ "float on, opacity 1.0 override, match:class ^(swappy)$" ]; }; }) ] )) ]; }; }