{pkgs, host, ...}: { programs.fish = { enable = true; interactiveShellInit = '' set fish_greeting # Disable greeting set show_startup_tips false set -U tide_right_prompt_items status\x1ecmd_duration\x1etime ''; shellInit = " fish_add_path /usr/local/go/bin fish_add_path ~/go/bin fish_add_path ~/.local/bin set -gx MANPAGER 'nvim +Man!' set -gx EDITOR 'nvim' set -gx _JAVA_AWT_WM_NONREPARENTING 1 set -gx NIX_FLAKE '/home/e/dev/nix' "; plugins = [ { name = "fzf"; inherit (pkgs.fishPlugins.fzf-fish) src; } { name = "puffer"; inherit (pkgs.fishPlugins.puffer) src; } ]; functions = { nix-shell = { wraps = "nix-shell"; body = '' command nix-shell $argv --command "fish" ''; }; nix = { wraps = "nix"; body = '' if status is-interactive and test (count $argv) = 1 -a "$argv[1]" = develop nix develop --command (status fish-path) else command nix $argv end ''; }; fish_jj_prompt = { body = '' if not command -sq jj return 1 end if not jj root &>/dev/null return 1 end # Generate prompt set -l info "$( jj log --ignore-working-copy --no-graph --color=always --revisions=@ --template " separate( ' ', self.change_id().shortest(), bookmarks.join(', '), if(conflict, label('conflict', '×')), if(empty, label('empty', '(empty)')), if(divergent, label('divergent', '(divergent)')), if(hidden, label('hidden', '(hidden)')), ) " )" or return 1 if test -n $info printf ' (jj: %s)' $info else return 1 end ''; }; fish_vcs_prompt = { body = '' fish_jj_prompt $argv or fish_git_prompt $argv or fish_hg_prompt $argv or fish_fossil_prompt $argv ''; }; }; shellAbbrs = { g = "git"; k = "kubectl"; }; shellAliases = { ":q" = "exit"; hms = "home-manager switch --flake $NIX_FLAKE#${host.username}"; rbs = "sudo nixos-rebuild switch --flake $NIX_FLAKE#${host.hostName}"; mpv = "mpv --no-keepaspect-window"; cat = "bat -pp"; tcd = "cd $(mktemp -d)"; docker = "nerdctl"; vimdiff = "nvim -d"; }; }; }