{ pkgs, config, lib, ... }: with lib; { options.components.terminal.zsh.enable = mkOption { type = lib.types.bool; default = config.components.terminal.enable; }; config = mkIf (config.components.terminal.zsh.enable) { home-manager.sharedModules = [ { programs.zsh = { enable = true; defaultKeymap = "viins"; }; # a better cat programs.bat = { enable = true; config.theme = "gruvbox-light"; }; home.shellAliases.cat = "${pkgs.bat}/bin/bat"; # a better ls # todo what's the new shit? #programs.eza = { # enable = true; # enableAliases = true; #}; home.shellAliases.llt = "${pkgs.eza}/bin/exa -a --tree"; # use z instead of cd # use zi to fuzzy search through all registered directories programs.zoxide = { enable = true; enableZshIntegration = true; }; # provide better `Ctrl+r` command in terminal programs.mcfly = { enable = true; keyScheme = "vim"; fuzzySearchFactor = 3; enableZshIntegration = true; enableBashIntegration = true; }; } ]; programs.zsh = { enable = true; enableCompletion = true; syntaxHighlighting.enable = true; shellAliases = { ls = "ls --color=tty"; l = "ls -CFh"; la = "ls -Ah"; ll = "ls -lh"; lt = "ls -lct --reverse"; less = "less -S"; top = "htop"; version = "date '+%Y%m%d%H%M%S'"; vclip = "xclip -selection clipboard"; df = "df -h"; timestamp = "date +%Y%m%d%H%M%S"; nix-show-garbadge-roots = "ls -lh /nix/var/nix/gcroots/auto/"; }; interactiveShellInit = '' kpaste() { arg=cat if [[ $# -ne 0 ]]; then arg+=("''${@}") elif [[ -t 0 ]] && [[ -o interactive ]]; then arg=(wl-paste) fi "''${arg[@]}" | curl -sS http://p.r --data-binary @- | \ sed '$ {p;s|http://p.r|https://p.krebsco.de|}' } ''; }; }; }