Στις μέρες μας κάθε σοβαρός χρήστης του τερματικού θα φτιάξει ένα prompt
είτε λειτουργικό είτε εφετζίδικο, και σε κάποιες σπάνιες περιπτώσεις και τα δύο. Για πολύ καιρό με είχε βολέψει το zsh
με τα έτοιμα themes του. Αλλά υπάρχει ένα μικρό πρόβλημα: Είναι διαβολεμένα αργό.
Οι υπάρχουσες λύσεις είτε θα χρησιμοποιούν την ίδια την γλώσσα του shell είτε όπως στην περίπτωση του powerline
γραμμένα σε Python . Καθόλου ελκυστικές λύσεις ειδικά εφόσον υπάρχει το starship
που είναι ταχύτατο και γραμμένο στην γλώσσα Rust .
Εγκατάσταση γραμματοσειρών
Για να το αξιοποιήσουμε πλήρως θα πρέπει πρώτα να εγκαταστήσουμε ένα κατάλληλο font που να περιέχει αυτά τα όμορφα χρωματιστά εικονίδια (η εικόνα τα αδικεί) .
Θα πάμε στο NerdFonts και θα κατεβάσουμε την αγαπημένη μας γραμματοσειρά. Δοκιμάστε την “Fira Code Nerd” που έχει και ωραίες λιγκλατούρες. Θα φτιάξουμε ένα φάκελλο
mkdir -p ~/.local/share/fonts/FiraCodeNerd
και θα εγκαταστήσουμε εκεί τα αρχεία των γραμματοσειρών. Στο συμπιεσμένο φάκελο υπάρχουν πολλές εκδόσεις της γραμματοσειράς και καλό είναι να βάλουμε μόνο τα βάρη που χρειαζόμαστε. Εναλλακτικά τα αποσυμπιέζουμε εκεί όλα, σβήνουμε τις γραμματοσειρές *.ttf
καθώς και όσες έχουν μέσα την λέξη Windows
.
Στα αποθετήρια των διανομών θα βρούμε το απλό Fira Code που δεν περιέχει τα επιπλέον σύμβολα.
Μετά θα ρυθμίσουμε το τερματικό να χρησιμοποιεί αυτήν την γραμματοσειρά.
Εγκατάσταση του starship
Αν έχουμε εγκατεστημένη την γλώσσα 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 μοιάζει με