{ pkgs, lib, ... }: { programs.fish.enable = true; programs.fish.plugins = [ pkgs.fishPlugins.fisher ]; xdg.configFile."fish/fish_plugins".text = '' fishpkg/fish-humanize-duration franciscolourenco/done Gazorby/fish-abbreviation-tips jorgebucaran/autopair.fish jorgebucaran/replay.fish joseluisq/gitnow matthewess/fish-autovenv nbsmokee/fish-spin oh-my-fish/plugin-bang-bang PatrickF1/colored_man_pages.fish ''; programs.fish.functions = { # user functions mkdcd = { argumentNames = [ "target" ]; body = '' if test -z "$target" echo "mkdcd requires an argument" 1>&2 return 1 end mkdir -p $target cd $target ''; }; from-dir = { argumentNames = [ "dir" ]; body = '' pushd $dir set -e argv[1] $argv popd ''; }; darwin-rebuild-edit-with = { argumentNames = [ "editor" "file" ]; body = '' if test -z "$file" set file flake.nix end from-nix $editor $file ''; }; } // lib.optionalAttrs pkgs.stdenv.isDarwin { # light/dark mode helpers # determine if dark mode is active is-dark-mode.body = '' defaults read -g AppleInterfaceStyle &>/dev/null ''; # toggles `$term_background` between "light" and "dark". other Fish functions trigger when this # variable changes. we use a universal variable so that all instances of Fish have the same # value for the variable. toggle-background.body = '' if test "$term_background" = light set -U term_background dark else set -U term_background light end ''; # set `$term_background` based on whether macOS is light or dark mode set-background-to-macOS.body = '' if is-dark-mode set -U term_background dark else set -U term_background light end ''; # set `$term_background` based on an env var set-background-to-env = { argumentNames = [ "env_var" ]; body = '' switch $$env_var case 1 echo "Setting dark mode" set -U term_background dark case 0 echo "Setting light mode" set -U term_background light end ''; }; # sets shell utilities to light or dark colorscheme based on `$term_background`. set-shell-colors = { body = '' # Use correct theme for `btm` and `bat` if test "$term_background" = light alias btm "btm --color nord-light" set -xg BAT_THEME OneHalfLight else alias btm "btm --color nord" set -xg BAT_THEME OneHalfDark end # Set LS_COLORS set -xg LS_COLORS (${pkgs.vivid}/bin/vivid generate one-$term_background) ''; onVariable = "term_background"; }; }; # aliases # TODO: refactor into abbreviations programs.fish.shellAliases = let nixConfigDirectory = "~/dotfiles.nix"; in { # Nix related from-nix = "from-dir ${nixConfigDirectory}"; # darwin-rebuild build drb = "from-nix darwin-rebuild build --flake ."; # darwin-rebuild switch full drsf = "from-nix darwin-rebuild switch --flake ."; # darwin-rebuild switch (no homebrew) drs = "drsf --override-input homebrew-enabled github:boolean-option/false"; # edit darwin-rebuild config in code/codium drc = "code ${nixConfigDirectory}"; # edit darwin-rebuild config in (neo)vim drv = "vim ${nixConfigDirectory}"; # edit darwin-rebuild config in helix drh = "darwin-rebuild-edit-with hx"; flakeup = "nix flake update ${nixConfigDirectory}/"; nb = "nix build"; nd = "nix develop"; nf = "nix flake"; nr = "nix run"; ns = "nix search nixpkgs"; nsh = "nix shell"; nrp = "nix repl --expr '{ pkgs = (import { }); }'"; # Other ".." = "cd .."; ":q" = "exit"; cat = "${pkgs.bat}/bin/bat --style=plain --paging=never"; du = "${pkgs.du-dust}/bin/dust"; g = "${pkgs.gitAndTools.git}/bin/git"; ls = "${pkgs.eza}/bin/eza"; ll = "ls -l --time-style long-iso --icons"; la = "ll -a"; http = "${pkgs.xh}/bin/xh"; https = "${pkgs.xh}/bin/xhs"; top = "${pkgs.bottom}/bin/btm"; htop = "${pkgs.bottom}/bin/btm"; colortest = "${pkgs.terminal-colors}/bin/terminal-colors -o"; } // lib.optionalAttrs pkgs.stdenv.isDarwin { tb = "toggle-background"; sb = "set-background-to-macOS"; }; # Configuration that should be above `loginShellInit` and `interactiveShellInit`. programs.fish.shellInit = '' set -U fish_term24bit 1 ${lib.optionalString pkgs.stdenv.isDarwin "set-background-to-macOS"} ''; home.sessionVariables.VIRTUAL_ENV_DISABLE_PROMPT = "true"; programs.fish.interactiveShellInit = '' set -g fish_greeting (set_color blue)"(づ ̄ ³ ̄)づ "(set_color cyan)"h"(set_color red)"e"(set_color yellow)"l"(set_color green)"l"(set_color magenta)"o "(set_color blue)"(づ ̄ ³ ̄)づ"(set_color normal) fish_vi_key_bindings ${lib.optionalString pkgs.stdenv.isDarwin "set-shell-colors"} ''; }