{ ... }: {
  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)$"
                ];
              };
            })
          ]
        ))
      ];
    };
}
