Unixery & daemon worship 🔥


It's a Unix system! I know this!

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