{ config, lib, pkgs, inputs, ... }: let shellType = config.my.shell.type; in { options.my.shell.tools.enable = lib.mkEnableOption "shell tools and utilities"; config = lib.mkIf config.my.shell.tools.enable { home-manager.users.jawz.programs = { hstr.enable = true; htop = { enable = true; package = pkgs.htop-vim; }; eza = { enable = true; git = true; icons = "auto"; }; zoxide = { enable = true; enableBashIntegration = shellType == "bash"; enableZshIntegration = shellType == "zsh"; }; bat = { enable = true; config.pager = "less -FR"; extraPackages = builtins.attrValues { inherit (pkgs.bat-extras) batman # man pages batpipe # piping batgrep # ripgrep batdiff # this is getting crazy! batwatch # probably my next best friend prettybat # trans your sourcecode! ; }; }; password-store = { enable = false; package = pkgs.gopass; settings = { PASSWORD_STORE_AUTOCLIP = "true"; PASSWORD_STORE_AUTOIMPORT = "false"; PASSWORD_STORE_CLIPTIMEOUT = "45"; PASSWORD_STORE_EXPORTKEYS = "false"; PASSWORD_STORE_NOPAGER = "false"; PASSWORD_STORE_NOTIFICATIONS = "false"; PASSWORD_STORE_PARSING = "true"; PASSWORD_STORE_PATH = "/home/jawz/.local/share/pass"; PASSWORD_STORE_SAFECONTENT = "true"; }; }; ${shellType} = { shellAliases = inputs.self.lib.mergeAliases inputs.self.lib.commonAliases { cd = "z"; hh = "hstr"; ls = "eza --icons --group-directories-first"; rm = "trash"; b = "bat"; f = "fzf --multi --exact -i"; unique-extensions = '' fd -tf | rev | cut -d. -f1 | rev | tr '[:upper:]' '[:lower:]' | sort | uniq --count | sort -rn''; }; } // inputs.self.lib.shellConditional shellType '' if command -v fzf-share >/dev/null; then source "$(fzf-share)/key-bindings.bash" source "$(fzf-share)/completion.bash" fi '' '' if command -v fzf-share >/dev/null; then source "$(fzf-share)/key-bindings.bash" source "$(fzf-share)/completion.bash" fi ''; }; programs = { starship.enable = true; tmux.enable = true; fzf.fuzzyCompletion = true; neovim = { enable = true; vimAlias = true; }; }; users.users.jawz.packages = builtins.attrValues { inherit (pkgs) ripgrep # modern grep du-dust # rusty du similar to gdu fd # modern find, faster searches fzf # fuzzy finder! super cool and useful gdu # disk-space utility checker, somewhat useful tealdeer # man for retards trash-cli # oop! did not meant to delete that jq # json parser yq # yaml parser smartmontools # check hard drie health ; inherit (inputs.jawz-scripts.packages.x86_64-linux) rmlint # amazing dupe finder that integrates well with BTRFS ; }; environment.variables = { HISTFILE = "\${XDG_STATE_HOME}/bash/history"; LESSHISTFILE = "-"; RIPGREP_CONFIG_PATH = "\${XDG_CONFIG_HOME}/ripgrep/ripgreprc"; }; }; }