Fish configuration#

fish is our interative shell set in tmux and the terminals.

  • Apart from config.fish, we have separate files for setting various pices of config such that the separate scripts “look” similar in structure to our bash counterparts.

  • Machine-specific customization is overlayed via os and user sepcific files.

  • Exactly which os and which user file gets included is determined via chezmoi generated symlinks.

Directory layout#

Show layout
home/dot_config/fish#
$ lsd --almost-all --tree home/dot_config/fish
fish
├── completions
│   ├── .keep
│   └── mg.fish
├── conf.d
│   ├── fzf-config.fish
│   └── git-config.fish
├── config.fish
├── functions
│   ├── .keep
│   └── mg.fish
├── generated
│   └── fzf-fragments.fish.tmpl
├── linux-arch-config.fish
├── linux-config.fish
├── linux-ubuntu-config.fish
├── no-op.fish
├── symlink_os-config.fish.tmpl
├── symlink_user-config.fish.tmpl
└── vvnraman-config.fish

Load order#

Implicit Fish startup behavior

  1. First fish auto-loads conf.d/*.fish scripts

  2. Then it loads config.fish as the main startup file.

  3. config.fish explicitly loads os and user specific config files.

    config.fish#
    10# custom binaries in `bin`
    11# Add other entries to path above.
    12fish_add_path --path --prepend "$HOME/.local/bin"
    13fish_add_path --path --prepend "$HOME/bin"
    14
    15source_script ~/.config/fish/user-config.fish
    16source_script ~/.config/fish/os-config.fish
    
  4. Linux distro agnostic config is present in dot_config/fish/linux-config.fish, which is loaded by distro specific configs

    linux-arch-config.fish#
    1if test -f "$HOME/.config/fish/linux-config.fish"
    2  source "$HOME/.config/fish/linux-config.fish"
    3end
    4
    5set --universal --export SSH_AUTH_SOCK $XDG_RUNTIME_DIR/ssh-agent.socket
    6
    7fish_add_path --path --prepend "$HOME/.local/bin/vvnraman/arch/"
    
    linux-ubuntu-config.fish#
    1if test -f "$HOME/.config/fish/linux-config.fish"
    2  source "$HOME/.config/fish/linux-config.fish"
    3end
    

Relevant changelogs#