Repository

Looks good to me!

User Tools

Site Tools


kb:localhost:software:fish:start

Fish

Changelog

  • 2025-01-31: Init

A nice guide on ArchWiki. A configuration for Bash:

.bashrc
# Drop in to fish shell if:
#   1. Parent shell is not fish and shell level == 1
#      OR parent shell is tmux
#   2. Not executing a bash command, e.g. 'bash -c'
parent_name=$(ps --no-header --pid=$PPID --format=comm)
if [[
    (($parent_name != "fish" && $SHLVL == 1)
      || ($parent_name == "tmux: server"))
    && -z ${BASH_EXECUTION_STRING}
]]
then
        shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=''
        exec fish $LOGIN_OPTION
fi

Commentary on the fish shell by Julia initially, more recently, and on modern terminal setups.

A checklist for new users (like me) to configure Fish:

  • Run fish_config to configure via a web browser.

Also apparently dotfiles are a thing: https://dotfiles.github.io/

Also Bass might be interesting: https://github.com/edc/bass

set -U fish_greeting

Others

  • VSCode's remote SSH extension (as of 2025-02-10) does not play well with a default Fish shell on the remote side. Either modify the way .bashrc checks whether to activate the Fish shell, or on the client side VSCode set remote.SSH.useLocalServer = false in the workspace configuration.
  • Installing fish on old OpenSUSE might be a bit difficult (fish:v2.7.1).
    • First to resolve is the automated web browser opening requirement, which can be disabled by commenting out the webbrowser.open line in /usr/share/fish/tools/web_config/webconfig.py.
    • Extract the localhost path stored in /root/.cache/fish/web_config-.html*, then forward the default :8000 port and use the web config. * Prompt may fail when using the web config. Insert it manually at *.config/fish/functions/fish_prompt.fish*. A simple I like, using the interactive prompt as base and substituting the $PWD for (prompt_pwd) <file fish .config/fish/functions/fish_prompt.fish> function fish_prompt --description 'Informative prompt' #Save the return status of the previous command set -l last_pipestatus $pipestatus set -lx __fish_last_status $status # Export for __fish_print_pipestatus. if functions -q fish_is_root_user; and fish_is_root_user printf '%s@%s %s%s%s# ' $USER (prompt_hostname) (set -q fish_color_cwd_root and set_color $fish_color_cwd_root or set_color $fish_color_cwd)
      (prompt_pwd) (set_color normal) else set -l status_color (set_color $fish_color_status) set -l statusb_color (set_color --bold $fish_color_status) set -l pipestatus_string (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus) printf '[%s] %s%s@%s %s%s %s%s%s \n> '
      (date "+%H:%M:%S")
      (set_color brblue) $USER (prompt_hostname)
      (set_color $fish_color_cwd) (prompt_pwd) $pipestatus_string
      (set_color normal) end end </file> To start ssh-agent, eval (ssh-agent).
kb/localhost/software/fish/start.txt · Last modified: by Justin