{ config, pkgs, lib, ... }: let inherit (lib) mkIf mkOption mkMerge types; cfg = config.shells; aliases = { "ls" = "lsd --color=never"; "ll" = "lsd -la --color=never"; "llt" = "lsd --tree --color=never"; "cp" = "cp --verbose"; "rm" = "rm --verbose"; "mv" = "mv --verbose"; "mkdir" = "mkdir --verbose"; "v" = "nvim"; "music" = "ncmpcpp"; "tls" = "tmux ls"; "tkl" = "tmux kill-session -t"; "tch" = "tmux attach"; "ytmusic" = "yt-dlp -f 'ba' -x --audio-format mp3 -o '%(id)s.%(ext)s'"; "ytvid" = "yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'"; }; in { options.shells = { fish.enable = mkOption { default = false; type = types.bool; description = ''Enables FISH''; }; zsh.enable = mkOption { default = true; type = types.bool; description = ''Enables ZSH''; }; }; config = { programs.fish = { enable = cfg.fish.enable; shellAliases = aliases; plugins = [ { name = "hydro"; src = pkgs.fishPlugins.hydro.src; } ]; functions = { __fish_command_not_found_handler = { body = "__fish_default_command_not_found_handler $argv[1]"; onEvent = "fish_command_not_found"; }; su = "command su --shell=/usr/bin/fish $argv"; }; }; programs.bash = { enable = true; historyIgnore = ["ls" "exit"]; shellAliases = aliases; }; programs.zsh = { enable = cfg.zsh.enable; enableCompletion = true; defaultKeymap = "emacs"; shellAliases = aliases; autosuggestion.enable = true; syntaxHighlighting.enable = true; history.path = "${config.xdg.dataHome}/zsh/zsh_history"; initContent = '' [ -f ~/.p10k.zsh ]; source ~/.p10k.zsh ''; plugins = [ { name = "powerlevel10k"; src = pkgs.zsh-powerlevel10k; file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; } ]; }; home.file.".p10k.zsh" = mkIf cfg.zsh.enable { source = ../config/p10k-config; }; }; }