Zur Fish Shell wechseln
Als ich GhostBSD ausprobiert habe, habe ich mal weider Lust bekommen, die Fish-Shell auszuprobieren, des unter GhostBSD ist diese Standard. Fish hatte ich schon mal benutzt, bin jetzt aber seit längerem bei ZSH mit Zim Framework hängen geblieben. Ein Vorteil bei Fish ist, dass es bereits von Haus aus eine super funktionierende Auto-Vervollständigung mitbringt.
Als Standardshell setzen
Nachdem Fish installiert wurde, muss der komplette Pfad zu fish in /etc/shells
eingetragen werden. Danach kann man fish als Standardshell setzen. Beispiel für Fish auf macOS aus Homebrew:
chsh -s /opt/homebrew/bin/fish
Alternativ kann man die Default-Shell belassen und beim Start einer interaktiven Shell zu Fish wechseln. Die Default-Shell ist immer vorhanden und sollte immer lauffähig sein, man gewinnt also etwas Sicherheit. Zum Beispiel auf einem FreeBSD_server:
printf "\n# switch to fish in interactive shell\ntest -t 0 && which -s fish && exec fish\n" >> $HOME/.shrc
Oder in Alpine Linux:
printf "\n# switch to fish in interactive shell\ntest -t 0 && which fish > /dev/null && exec fish\n" >> $HOME/.profile
Plugin-Manager
Man kann optional den Plugin-Manager Fisher installieren. Der vereinfacht es, Plugins und Prompts zu installieren. Aber noch schnell der Hinweis: Software aus irgendwelchen Git-Repos sind natürlich auch ein potentielles Einfallstor für Malware. Auch zum späteren Zeitpunkt bei ungeprüften Updates. Denkt also selbst darüber nach, was ihr macht:
curl -sL https://raw.githubusercontent.com/thenktor/fisher/main/functions/fisher.fish | source && fisher install thenktor/fisher
Custom-Prompt
Ich möchte einen Prompt mit den folgenden Eigenschaften:
- Schnell
- Wenig Geflacker beim Update
- In einem Git-Repo soll er die Branch anzeigen und ob Änderungen vorhanden sind
- Bei Bedarf Anzeige des Benutzernamens und des Hosts
Der Hydro-Prompt kann das nach ein paar Änderungen. Folgendermaßen wird er installiert und mit ein paar Farben aufgepeppt:
set -U fish_prompt_pwd_dir_length 3
set -U hydro_color_prompt brgreen
set -U hydro_color_git brmagenta
set -U hydro_color_pwd brblue
set -U hydro_color_who bryellow
fisher install thenktor/hydro
ZSH History importieren
Um die seit langem gepflegte ZSH-History in Fish zu importieren, habe ich dieses ZSH-Skript erstellt:
curl -L https://raw.githubusercontent.com/thenktor/zsh-history-to-fish/refs/heads/main/zsh-fish.sh -o zsh-fish.sh
chmod +x zsh-fish.sh
./zsh-fish.sh
Sonstiges
Die Pfad-Variable kann man folgendermaßen anpassen:
fish_add_path -p $HOME/bin
Und einen Alias setzen, z.B. für eza statt ls:
alias --save ll "eza --long --group --git"
Um Tools zur Umgebung hinzuzufügen, kann man Dateien in .config/fish/conf.d/
anlegen. Diese müssen die Endung fish
haben. Hier ein Beispiel für zoxide
auf FreeBSD:
echo "\
if status is-interactive
# Commands to run in interactive sessions can go here
if which -s zoxide
zoxide init fish | source
end
end" > $HOME/.config/fish/conf.d/zoxide.fish
Oder falls which
die Option -s
nicht kennt (z.B. Alpine Linux oder Debian):
echo "\
if status is-interactive
# Commands to run in interactive sessions can go here
if which zoxide > /dev/null
zoxide init fish | source
end
end" > $HOME/.config/fish/conf.d/zoxide.fish