(final: prev:
with prev;
let
  import_script = (_: path: import (path) { inherit pkgs lib; });
  create_script = (name: text: runtimeInputs:
    let
      script_body = pkgs.writeTextFile {
        inherit name;
        executable = true;
        text = ''
          ${builtins.readFile text}
        '';
      };
    in
    (pkgs.writeShellApplication {
      inherit name runtimeInputs;
      text = ''exec ${script_body} "$@"'';
      checkPhase = "";
    }));
  create_scripts =
    lib.mapAttrs (name: deps: create_script name ./${name} deps);

  pass = pkgs.pass.withExtensions (ex: with ex; [
    pass-otp
  ]);
in
create_scripts
  {
    br = [ ];
    bmenu = [ final.bemenu final.dhist fish j4-dmenu-desktop jq sway ];
    down_meme = [ wl-clipboard yt-dlp libnotify ];
    wl-copy-file = [ wl-clipboard fish ];
    _diffr = [ diffr ];
    _thunar-terminal = [ final.terminal ];
    _sway_idle_toggle = [ final.swayidle ];
    kak-pager = [ fish final._diffr ];
    kak-man-pager = [ final.kak-pager ];
    helix-pager = [ fish final._diffr ];
    helix-man-pager = [ final.helix-pager ];
    musmenu = [ mpc-cli final.wdmenu trash-cli xdg-user-dirs libnotify sd wl-clipboard ];
    showkeys =
      [ ]; # This will not work unless programs.wshowkeys is enabled systemwide
    terminal = [ alacritty ];
    playerctl-status = [ playerctl ];
    wpass = [ final.wdmenu fd pass sd wl-clipboard wtype ];
    screenshotsh =
      [ capitaine-cursors grim slurp jq sway wl-clipboard xdg-user-dirs ];
    volumesh = [ pulseaudio libnotify ];
    pulse_sink = [ pulseaudio pamixer final.wdmenu ];
    color_picker = [ grim slurp wl-clipboard libnotify imagemagick ];
    dzadd = [ procps libnotify final.wdmenu jq mpv pqiv python3Packages.deemix mpc-cli final.mpdDup ];
    mpdDup = [ mpc-cli perl ];
    readQrCode = [ grim zbar wl-clipboard ];
  } // lib.mapAttrs import_script {
  wdmenu = ./wdmenu.nix;
  wlauncher = ./wlauncher.nix;
  _gpg-unlock = ./_gpg-unlock.nix;
})
