{
  pkgs,
  sysLib,
  shell_library,
  system,
  ...
}: let
  functionCall = {
    file,
    dependencies,
    replacementStrings,
    ...
  }:
    sysLib.writeShellScriptWithLibraryAndKeepPath {
      name = "${builtins.baseNameOf file}";
      src = file;
      dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash coreutils;});
      inherit replacementStrings;
    }
    + "/bin/${builtins.baseNameOf file}";
  shell = {
    file,
    dependencies,
    replacementStrings ? null,
    ...
  }: ''
    ''${{
      ${functionCall {inherit file dependencies replacementStrings;}}
    }}
  ''; # closes the lf tui
  pipe = {
    file,
    dependencies,
    replacementStrings ? null,
    ...
  }: ''
    %{{
      ${functionCall {inherit file dependencies replacementStrings;}}
    }}
  ''; # runs the command in the ui/term bar
  async = {
    file,
    dependencies,
    replacementStrings ? null,
    ...
  }: ''
    &{{
      ${functionCall {inherit file dependencies replacementStrings;}}
    }}
  ''; # runs the command in the background
  wait = {
    file,
    dependencies,
    replacementStrings ? null,
    ...
  }: ''
    !{{
      ${functionCall {inherit file dependencies replacementStrings;}}
    }}
  ''; # adds a prompt after the command has run
in {
  archive = shell {
    file = ./scripts/archive;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        fzf
        gnutar
        xz
        p7zip
        zip
        ;
    };
  };
  broot_jump = shell {
    file = ./scripts/broot_jump;
    dependencies = builtins.attrValues {
      inherit (pkgs) broot;
    };
  };
  chmod = pipe {
    file = ./scripts/chmod;
    dependencies = [];
  };
  clear_trash = shell {
    file = ./scripts/clear_trash;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        fzf
        trashy
        ;
    };
  };
  dl_file = pipe {
    file = ./scripts/dl_file;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        xdragon
        curl
        ;
    };
  };
  dragon = pipe {
    file = ./scripts/dragon;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        xdragon
        ;
    };
  };
  dragon_individual = pipe {
    file = ./scripts/dragon_individual;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        xdragon
        ;
    };
  };
  dragon_stay = pipe {
    file = ./scripts/dragon_stay;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        xdragon
        ;
    };
  };
  fzf_jump = shell {
    file = ./scripts/fzf_jump;
    dependencies = builtins.attrValues {
      inherit (pkgs) fzf lf gnused;
    };
  };
  mk_dir = pipe {
    file = ./scripts/mk_dir;
    dependencies = [];
  };
  mk_file = shell {
    file = ./scripts/mk_file;
    dependencies = [];
  };
  mk_ln = pipe {
    file = ./scripts/mk_ln;
    dependencies = [];
  };
  mk_scr_default = shell {
    file = ./scripts/mk_scr_default;
    dependencies = builtins.attrValues {inherit (pkgs) neovim;};
    replacementStrings = {
      SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}";
    };
  };
  mk_scr_temp = shell {
    file = ./scripts/mk_scr_temp;
    dependencies = builtins.attrValues {inherit (pkgs) neovim;};
    replacementStrings = {
      SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}";
      TO_BE_SHELL_LIBRARY_PATH = "%SHELL_LIBRARY_PATH"; # replacement is not recursive
    };
  };
  open = shell {
    file = ./scripts/open;
    dependencies = builtins.attrValues {inherit (pkgs) file xdg-utils neovim git;};
  };
  open_config = shell {
    file = ./scripts/open_config;
    dependencies = builtins.attrValues {
      #inherit
      #(pkgs)
      ## TODO rewrite this:  bookmenu, https://github.com/jarun/buku
      #
      #buku
      #;
    };
  };
  restore_trash = shell {
    file = ./scripts/restore_trash;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        fzf
        trashy
        ;
    };
  };
  set_wall_paper = pipe {
    file = ./scripts/set_wall_paper;
    dependencies = [];
  };
  stripspace = pipe {
    file = ./scripts/stripspace;
    dependencies = [];
  };
  trash = pipe {
    file = ./scripts/trash;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        trashy
        trash-cli
        findutils
        ;
    };
  };
  unarchive = pipe {
    file = ./scripts/unarchive;
    dependencies = builtins.attrValues {
      inherit
        (pkgs)
        gnutar
        unzip
        # TODO this is unfree! unrar
        
        p7zip
        ;
    };
  };
}
# vim: ts=2