Όμορφα command prompts με το starship

Στις μέρες μας κάθε σοβαρός χρήστης του τερματικού :terminal: θα φτιάξει ένα prompt είτε λειτουργικό είτε εφετζίδικο, και σε κάποιες σπάνιες περιπτώσεις και τα δύο. Για πολύ καιρό με είχε βολέψει το zsh με τα έτοιμα themes του. Αλλά υπάρχει ένα μικρό πρόβλημα: Είναι διαβολεμένα αργό.

Οι υπάρχουσες λύσεις είτε θα χρησιμοποιούν την ίδια την γλώσσα του shell είτε όπως στην περίπτωση του powerline γραμμένα σε Python :python:. Καθόλου ελκυστικές λύσεις ειδικά εφόσον υπάρχει το starship που είναι ταχύτατο και γραμμένο στην γλώσσα Rust :rust: .

Εγκατάσταση γραμματοσειρών

Για να το αξιοποιήσουμε πλήρως θα πρέπει πρώτα να εγκαταστήσουμε ένα κατάλληλο font που να περιέχει αυτά τα όμορφα χρωματιστά εικονίδια (η εικόνα τα αδικεί) .

Θα πάμε στο NerdFonts και θα κατεβάσουμε την αγαπημένη μας γραμματοσειρά. Δοκιμάστε την “Fira Code Nerd” που έχει και ωραίες λιγκλατούρες. Θα φτιάξουμε ένα φάκελλο

mkdir -p ~/.local/share/fonts/FiraCodeNerd

και θα εγκαταστήσουμε εκεί τα αρχεία των γραμματοσειρών. Στο συμπιεσμένο φάκελο υπάρχουν πολλές εκδόσεις της γραμματοσειράς και καλό είναι να βάλουμε μόνο τα βάρη που χρειαζόμαστε. Εναλλακτικά τα αποσυμπιέζουμε εκεί όλα, σβήνουμε τις γραμματοσειρές *.ttf καθώς και όσες έχουν μέσα την λέξη Windows.

Στα αποθετήρια των διανομών θα βρούμε το απλό Fira Code που δεν περιέχει τα επιπλέον σύμβολα.

Μετά θα ρυθμίσουμε το τερματικό να χρησιμοποιεί αυτήν την γραμματοσειρά.

Εγκατάσταση του starship

Αν έχουμε εγκατεστημένη την γλώσσα Rust :rust: θα δώσουμε την εντολή

cargo install starship

διαφορετικά

 curl -fsSL https://starship.rs/install.sh | bash

Στην συνέχεια ανάλογα με το shell θα προσθέσουμε στο τέλος του κατάλληλου αρχείου αρχείου μια γραμμή

# Bash, αρχείο ~/.bashrc
eval "$(starship init bash)"

# Fish, αρχείο ~/.config/fish/config.fish
starship init fish | source

# Zsh, αρχείο ~/.zshrc
eval "$(starship init zsh)"

Ανοίγουμε ένα τερματικό και έχουμε ένα όμορφο και γρήγορο prompt.

Ρύθμιση

Θέλω να αλλάξω λίγα πράγματα. Το πρώτο είναι πως έχοντας όλα τα κελύφη την ίδια όψη, δεν ξέρεις πλέον σε ποιο είσαι. Επίσης το θέλω λίγο ποιο μαζεμένο σε μια γραμμή.
Για το πρώτο θέμα θα χρειαστώ ένα μικρό αρχείο, που θα το βάλω στο ~/.local/bin/starship_check_shell.sh με τα παρακάτω

#!/usr/bin/env bash

shell=${1:-bash}

if [ "$STARSHIP_SHELL" == "${shell}" ]
then
    echo true
else
    exit 1
fi

και θα το κάνω εκτελέσιμο

chmod +x ~/.local/bin/starship_check_shell.sh

Στην συνέχεια θα φτιάξω ένα αρχείο ~/.config/starship.toml με τα παρακάτω

# ~/.config/starship.toml

# Don't print a new line at the start of the prompt
add_newline = false

# One one Line
[line_break]
disabled = true

# Show Shell
[custom.zsh]
command = "echo 🚀"
when = "~/.local/bin/starship_check_shell.sh zsh"
prefix = ""

[custom.fish]
command = "echo 🐟"
when = "~/.local/bin/starship_check_shell.sh fish"
prefix = ""

[custom.bash]
command = "echo "
when = "~/.local/bin/starship_check_shell.sh bash"
prefix = ""

[git_branch]
symbol = "🌱 "

Κάποια σύμβολα ίσως δεν τα δεις σωστά, γιατί δεν έχεις την κατάλληλη γραμματοσειρά στον υπολογιστή σου. Κάνε μια αντιγραφή και θα είσαι εντάξει, ή διάλεξε από την γραμματοσειρά όποιο σύμβολο σου αρέσει.

Ένας διαφορετικός τρόπος

Μια άλλη λύση, αν θέλεις διαφορετικά prompts είναι να φτιάξεις πολλά αρχεία ρυθμίσεων. Αντί για τις custom εντολές φτιάξε για κάθε κέλυφος ένα αρχείο που θα περιέχει τα εξής

# ~/.config/starship_zsh.toml
[character]
symbol="🚀 ❯"

και στο .zshrc θα βάλουμε

export STARSHIP_CONFIG=~/.config/starship_zsh.toml
eval "$(starship init zsh)"

Αλλάζοντας την σειρά εμφάνισης

Αυτό θα γίνει με μια γραμμή σαν την παρακάτω:

prompt_order=["rust","line_break","package","line_break","character"]

Αυτό θα απενεργοποιήσει οτιδήποτε δεν δηλώνετε ρητά. Μέτρησα ~40 διαφορετικά modules. Κανονικά θα έβαζα μόνο αυτά που μου είναι χρήσιμα, αλλά είναι τόσο γρήγορο που δεν αξίζει τον κόπο. Είναι καλύτερα να απενεργοποιήσει απλά τα ενοχλητικά, όπως έκανα με το line_break

Περισσότερες αλλαγές

Μπορούμε να αλλάξουμε πολλ´ες παραμέτρους σε κάθε module καθώς και τα χρώματα. Στον παρακάτω σύνδεσμο θα βρούμε όλλα τα modules με παραδείγματα για το καθένα:

Μοιραστείτε το prompt σας

Το starship είναι ενα νέο εργο και δεν θα βρείς ακόμα έτοιμα setup ή αντίστοιχα άρθρα. Ας μοιραστούμε λοιπόν εδώ ότι φτιάξαμε. Το δικό μου prompt με zsh μοιάζει με

image

1 Like