{ config, lib, pkgs, ... }: let inherit (lib) mkIf; hasPackage = pname: lib.any (p: p ? pname && p.pname == pname) config.home.packages; hasRipgrep = hasPackage "ripgrep"; hasLftp = hasPackage "lftp"; hasExa = hasPackage "eza"; hasLazygit = config.programs.lazygit.enable; hasLazydocker = hasPackage "lazydocker"; hasNixYourShell = hasPackage "nix-your-shell"; hasShellColor = config.programs.shellcolor.enable; hasWezterm = config.programs.wezterm.enable; shellcolor = "${pkgs.shellcolord}/bin/shellcolor"; in { programs.fish = { enable = true; interactiveShellInit = '' ${ if hasNixYourShell then "nix-your-shell fish | source" else "" } ''; plugins = [ { name = "grc"; src = pkgs.fishPlugins.grc.src; } { name = "fzf"; src = pkgs.fishPlugins.fzf.src; } { name = "tide"; src = pkgs.fishPlugins.tide.src; } { name = "sponge"; src = pkgs.fishPlugins.sponge.src; } { name = "autopair"; src = pkgs.fishPlugins.autopair.src; } { name = "puffer"; src = pkgs.fishPlugins.puffer.src; } { name = "z"; src = pkgs.fishPlugins.z.src; } ]; shellAliases = { lzg = mkIf hasLazygit "lazygit"; lzd = mkIf hasLazydocker "lazydocker"; batt = ''upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -e "percentage" -e "state"''; slp = "systemctl suspend"; sdn = "shutdown 0"; nrs = "nh os switch ~/.setup"; ls = mkIf hasExa "eza"; ll = mkIf hasExa "eza -l"; la = mkIf hasExa "eza -la"; exa = mkIf hasExa "eza"; imgcat = mkIf hasWezterm "wezterm imgcat"; }; shellAbbrs = rec { jqless = "jq -C | less -r"; n = "nix"; nd = "nix develop -c $SHELL"; ns = "nix shell"; nsn = "nix shell nixpkgs#"; nb = "nix build"; nbn = "nix build nixpkgs#"; nf = "nix flake"; glk = "gpg --list-keys --with-keygrip"; gssh = "gpg --export-ssh-key"; gnk = "gpg --full-generate-key --expert"; gek = "gpg --edit-key --expert"; udmount = "udisksctl mount -b"; udumount = "udisksctl unmount -b"; fftp = mkIf hasLftp "lftp -u ghoscht, sftp://192.168.178.43"; }; functions = { # Disable greeting fish_greeting = ""; fish_init_custom = '' tide configure --auto --style=Rainbow --prompt_colors='True color' --show_time=No --rainbow_prompt_separators=Vertical --powerline_prompt_heads=Slanted --powerline_prompt_tails=Flat --powerline_prompt_style='Two lines, frame' --prompt_connection=Solid --powerline_right_prompt_frame=No --prompt_connection_andor_frame_color=Darkest --prompt_spacing=Compact --icons='Many icons' --transient=Yes ''; }; }; home.packages = with pkgs; [grc fzf nix-your-shell]; # Applies tide configure on rebuild home.activation.configureTide = lib.hm.dag.entryAfter ["writeBoundary"] '' ${pkgs.fish}/bin/fish -c "fish_init_custom" ''; }