Skip to main content

Nerdiger Shell Prompt

Einleitung

In einem YouTube Video vom gpn24 gesehen habe (dieses hier: https://www.youtube.com/watch?v=VqAG4cCthWA), in dem es eigentlich um "wie macht man SSH richtig" geht, ist mir der grandiose Nerd Prompt aufgefallen, den der Präsentator auf seinen Systemen in Einsatz hat:

grafik.png


Sorry, aber da musste ich herausfinden, wie man sich den baut und ob man dafür ggf. extra Tools benötigt - und weil ich in der Firma Windows verwenden muss, natürlich auch, ob das auch für die Powershell geht :D

Und weil ich immer weniger eine klassische Websuche verwende sondern ChatGPT meine Dinge recherchieren lasse (prüfen muss ich die Quellen und Informationen so oder so), hab ich einfach mal das Bild der KI vor die Füße geworfen und es kam eine erschöpfende Antwort mit technischen Details zum Vorschein, an der ich mich dann versucht habe.

Meine Anleitung ist für Fedora Linux mit KDE / Plasma als Desktop Umgebung, kann aber sicherlich recht einfach auch auf Debian basierte Distributionen angepasst werden - im Grunde ist abgesehen von dnf/apt und den ggf. abweichenden Paketnamen vieles identisch. Zu den Unterschieden zu GNOME kann ich allerdings nicht viel beitragen, da ich selber kein GNOME im Einsatz habe.

Den Teil für die PowerShell findet ihr dann hier: <PS Artikel einfügen>

Vielleicht baue ich das unter Fedora auch noch mal auf "Oh my Posh" um, damit ich in beiden Welten das gleiche Tool verwende. Ich hatte unter Windows auch erst mit Starship experimentiert, da gefiel mir das aber nicht so gut (Installation / Update etc.).

Vorbereitungen

Nerd Font

Zuerst benötigt man für die Shell (ich habe ganz klassisch eine bash im Einsatz) einen sog. "Nerd Font", der die benötigten Zeichen überhaupt darstellen kann.

sudo dnf install -y unzip fontconfig #Bei mir beides bereits installiert, nur der Vollständigkeit halber

mkdir -p ~/.local/share/fonts/FiraCodeNerdFont
cd /tmp

curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraCode.zip
unzip -o FiraCode.zip -d ~/.local/share/fonts/FiraCodeNerdFont

fc-cache -fv

Ich habe hier FiraCode ausgewählt. Es gibt aber durchaus noch mehr im Internet. Danach in Konsole (dem KDE Terminal):

Einstellungen → Profile verwalten → Profil bearbeiten → Erscheinungsbild → Schriftart

Hier dann den Nerd Font als Standard für die Anzeige festlegen.

Starship

Installieren

Für die Darstellung des Prompts verwende ich Starship (https://starship.rs/guide/) und zwar über das bereitgestellt COPR Repository direkt über DNF, da hier dann auch Updates automatisch erfolgen.

sudo dnf copr enable atim/starship
sudo dnf install starship

Einmal checken, ob ~/.local/bin Teil des Pfades ist, ansonsten den Pfad entsprechend erweitern:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

Aktivieren

Jetzt muss Starship für die Shell aktiviert werden, so dass es beim laden der Shell automatisch mit ausgeführt wird.

Für Bash:

echo 'eval "$(starship init bash)"' >> ~/.bashrcexec bash

Für Zsh:

echo 'eval "$(starship init zsh)"' >> ~/.zshrcexec zsh

Für Fish:


mkdir -p ~/.config/fish
echo 'starship init fish | source' >> ~/.config/fish/config.fish
exec fish

Konfigurieren

Starship bringt einige presets mit, die einen vorgefertigten Prompt festlegen. 

Zum Beispiel:

starship preset pastel-powerline -o ~/.config/starship.toml

Keines davon sah aber so aus wie im Beispiel aus dem Video. Hier muss man dann leider eine eigene config bauen (was auf der Starship Webseite aber gut beschrieben ist).

mkdir -p ~/.config # Wenn es noch kein .config gibt

cat > ~/.config/starship.toml <<'EOF'
add_newline = false
command_timeout = 1000

format = """\
[](fg:#d9d9d9)\
$time\
[](fg:#d9d9d9 bg:#c70000)\
$status\
[](fg:#c70000 bg:#263238)\
$username\
$hostname\
[](fg:#263238 bg:#2f6f9f)\
$directory\
[](fg:#2f6f9f bg:#d7af00)\
$cmd_duration\
[](fg:#d7af00)\
$line_break\
$character"""

[time]
disabled = false
time_format = "%T"
format = "[ $time ]($style)"
style = "fg:#222222 bg:#d9d9d9"

[status]
disabled = false
symbol = "x"
success_symbol = ""
format = "[ $symbol ]($style)"
style = "fg:white bg:#c70000"

[username]
show_always = true
style_user = "fg:white bg:#263238"
style_root = "fg:white bg:#c70000"
format = "[ $user]($style)"

[hostname]
ssh_only = false
style = "fg:white bg:#263238"
format = "[@$hostname ]($style)"

[directory]
style = "fg:white bg:#2f6f9f"
format = "[ $path ]($style)"
truncation_length = 3
home_symbol = "~"

[cmd_duration]
min_time = 1000
format = "[ $duration ]($style)"
style = "fg:#222222 bg:#d7af00"

[line_break]
disabled = false

[character]
success_symbol = "[\\$](bold green) "
error_symbol = "[\\$](bold red) "
vimcmd_symbol = "[❮](bold green) "
EOF

So sieht mein Prompt dann am Ende aus:

grafik.png