nudno@tutaj: dodajemy koloru twojej powłoce!

Ludzie mają to do siebie, że lubią ładne rzeczy. Spójrzmy na iPhone’a. Jego kolorowy, intuicyjny interfejs oraz sama w sobie solidna, schludna budowa słuchawki jest jednym z głównych powodów, dla których ma tylu fanów. I nie mówię tylko o nastoletnich dziewczynach, bo urządzenie trafiło do każdej grupy wiekowej i społecznej.

Mimo, że sam nie jestem użytkownikiem telefonu od Apple, to również preferuję, gdy uruchomienie terminala wiąże się z przyjemnym i zaskakuącym doznaniem. Zwłaszcza, że kolorowy prompt ma też swoje plusy jeżeli chodzi o produktywność. O co chodzi? Zaraz się dowiemy. Poniżej klasyczny bash w xterm, pod spodem urxvt i już skonfigurowany zsh.

1

Zacznijmy od samej powłoki. Dlaczego napisałem zsh? Jestem użytkownikiem od dwóch lat, bo bardzo spodobało mi się jak działa shell na Archowym ISO. Jako, że dla moich zastosowań różnice między dwiema powłokami nie miały znaczenia to nie musiałem wracać. Ponad to przyzwyczaiłem się, znalazłem narzędzia do poszczególnych problemów… Dla lepszej odpowiedzi na to pytanie odsyłam do Quory. Poniżej wycinek z wypowiedzi użytkownika Darshit’a Shah’a.

Bash and Zsh are both undeniably powerful shells with even more powerful scripting support. The Zsh Script is *very* similar to Bash with only small differences. But the differences are large enough that migrating scripts is not trivially easy.

Jeżeli z jakiegoś powodu musisz pozostać przy bashu (na przykład od lat w tym środowisku skryptujesz swojego Linuxa), to niestety ten poradnik nie będzie ci zbytnio odpowiadał. Ale możesz poszukać podobnych narzędzi dla swojej powłoki i osiągnąć podobne cele.

Zacznijmy od – paradoksalnie – podsumowania. Czym się dzisiaj zajmiemy? Przede wszystkim usprawnianie to podpowiedzi, które system serwuje nam po naciśnięciu klawisza Tab. Nie ograniczajmy się tylko do folderów i programów, kiedy możemy automatycznie “dopowiedzieć” sobie poszczególne argumenty. Drugą sprawą są oczywiście sprawy wyglądu, czyli sam prompt. Ostatnią małe programiki, którymi z poziomu konsoli możemy sobie pomagać.

We wszystkich tych problemach z pomocą przychodzi nam Oh-My-Zsh, framework-kombajn, z wieloma motywami, wsparciem dla wszystkiego co da się na Linuksie skompilować i dla tego czego skompilować się nie da, skrótami… Słownie: rozwiązanie to jeden skrypt instalujący!

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

I problem rozwiązany.

 

…ale przecież jesteśmy Linuksiarzami, “one-size-suits-all” to raczej dla chłopaków i dziewczyn od Apple, gdzie w OS X musimy zgodzić się na jeden wygląd / system plików. Gdzieś wewnątrz, ta mała cząstka krzyczy “po co mi do jasnej ciasnej skróty do obsługi Ruby, skoro całe życie programuje w Pythonie?!”. I słusznie, że nasz siódmy zmysł się odezwał, bo całe OMZ jest bardzo ciężkie, więc opóźnia otwarcie Terminala – jako, że ta czynność dla osób już w dobrej relacji z pigwinem jest dosyć częsta, bo szybka notatka w Vim (albo Emacs!), hasło z pass’a, czy inne potrzeby wymagają trzymania go blisko, to te kilka sekund opóznienia potrafi doprowadzić do białej gorączki. Dlatego szybko opiszę swoje doświadczenie i jak doszedłem do miejsca, w którym dzisiaj jestem.

Przeglądając fora internetowe, trafiłem na opisy tych samych symptomów, które opisałem w poprzednim akapicie – wolno startujący terminal po zainstalowaniu OMZ. W odpowiedzi, bardziej ode mnie super, użytkownicy proponowali deinstalację zestawu, rozłożenie go na części składowe, wybranie tego co mi się podoba i zaaplikowanie do własnej instalacji. Problem polegał na tym, że z natury jestem leniwy, więc chciałem sobie oszczędzić dokładniejszej obsługi Zsh – dlatego po kolejnych kilku minutkach z przeglądarką trafiłem na Antigen. Pozwala on wybrać poszczególne rozszerzenia zarówno z OMZ, jak i z jego młodszego brata, Prezto czy nawet małe skrypty, napisane przez niezależnych użytkowników – dzięki temu nie dość, że dostosujemy swoją instalację, to będzie ona bardziej kompletna niż domyślna konfiguracja Oh-My-Zsh.

…Niestety jednak, antigen ma duży problem. Nie generuje on statycznego pliku startowego, tylko za każdym razem ładuje oddzielnie poszczególne wtyczki co doprowadza nas do punktu wyjścia – zanim będziemy mogli dostać się do wiersza poleceń, musi minąć chwila. Ale przecież jesteśmy już blisko – wystarczyłoby ustalić czego potrzebujemy, jak ma dana instalacja wyglądać i wygenerować plik konfiguracyjny. Gdyby tylko istniało takie narzędzie… I dochodzimy teraz do finału całej opowieści, czyli menadżera wtyczek zgen.

2

Całość konfiguracji naszej powłoki sprowadza się wobec tego do naszego .zshrc, czyli pliku konfiguracyjnego. Poniżej zamieszczam swój, z komentarzami na temat zawartości:

#load zgen source "${HOME}/.zgen/zgen.zsh" 
#autocompletion refresh on installation of a new stuff zstyle 
':completion:*' rehash true 
#one and the only export EDITOR=vim 
#tmux + airline stuff 
#export TERM=screen-256color 
#why not start with it right away? 
ZSH_TMUX_AUTOSTART=true 
#productivity! 
export PATH=$PATH:/home/kosciak/documents/scripts 
#brew things 
export PATH="/usr/local/bin:$PATH" 
#sane npm export 
PATH="$HOME/.node/bin:$PATH" export NODE_PATH="$HOME/.node/lib/node_modules:$NODE_PATH"
#syntax highlighting in less if source-highlight is present 
if ls /bin/source-highlight 1> /dev/null 2>&1; 
  then export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s" export LESS=' -R ' 
fi 
#sounds of work dude 
if ls /bin/git-smb 1> /dev/null 2>&1; 
  then eval alias git=git-smb 
else 
  if ls /usr/local/bin/git-smb 1> /dev/null 2>&1; 
    then eval alias git=git-smb 
  fi 
fi 
#some useful shortcuts 
alias sc-suspend="sudo systemctl suspend" 
alias rmbadsteamlibs='find ~/.steam/root/ \( -name "libgcc_s.so*" -o -name "libstdc++.so*" -o -name "libxcb.so*" \) -print -delete' 
alias rmbadsteamlibslocal='find ~/.local/share/Steam/ \( -name "libgcc_s.so*" -o -name "libstdc++.so*" -o -name "libxcb.so*" \) -print -delete' 
alias vimrc="vim ~/.vimrc" 
alias cp="rsync -ah --progress" 
alias dd="dcfldd" 
#how is this great program called? dtrx! 
#check if there's no init script 
if ! zgen saved; 
  then echo "Creating a zgen save" 

  zgen oh-my-zsh 

  #plugins 
  zgen oh-my-zsh plugins/git 
  zgen oh-my-zsh plugins/pass 
  zgen oh-my-zsh plugins/autopep8
  zgen oh-my-zsh plugins/common-aliases
  zgen oh-my-zsh plugins/gpg-agent 
  zgen oh-my-zsh plugins/python 
  zgen oh-my-zsh plugins/rand-quote 
  zgen oh-my-zsh plugins/systemd 
  zgen oh-my-zsh plugins/vi-mode 
  zgen oh-my-zsh plugins/taskwarrior 
  zgen oh-my-zsh plugins/history-substring-search 

  #completions 
  zgen load zsh-users/zsh-completions src 
  
  #theme 
  #zgen oh-my-zsh themes/flazz 
  #zgen oh-my-zsh themes/lambda 
  #zgen oh-my-zsh themes/minimal 
  zgen oh-my-zsh themes/afowler 
  #save all to init script 
  zgen save 
fi 

#moar colors 
zgen load zsh-users/zsh-syntax-highlighting 
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' 

#purly iTerm2 thing 
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh" 

fortune

 

Okej, więc od początku. Część spraw jest oczywista, dlatego je pominę:

#autocompletion refresh on installation of a new stuff
zstyle ':completion:*' rehash true

ta linijka odpowiada za odświeżenie naszego PATH po instalacji nowego programu. Dzięki temu od razu po instalacji możemy korzystać z podpowiedzi pod Tabem. Poniżej kilka moich ułatwień i przyzwyczajeń, właściwa część zaczyna się tutaj.

if ! zgen saved; 
  then echo "Creating a zgen save" 

  zgen oh-my-zsh 

  #plugins
  zgen oh-my-zsh plugins/git

Poniżej #plugins musimy wypisać te wtyczki, które chcemy mieć zainstalowane. Lista dostępnych w frameworku Oh-My-Zsh tutaj. Warto co jakiś czas spojrzeć na listę, bo projekt jest w stanie nieustannego rozwoju, dlatego zawsze może pojawić się coś nowego w sam raz dla nas.

Poniżej #theme wpisujemy natomiast pożądany motyw naszego wiersza poleceń. Ponownie korzystam z oh-my-zsh – lista dostępna tutaj.

zgen load zsh-users/zsh-syntax-highlighting
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red'

Druga linijka to osobliwy przypadek, moja czcionka nie obsługiwała zbyt dobrze pogrubienia, dlatego musiałem zmienić nieco ustawienia wtyczki.

fortune

To konkurs dla was czytelnicy. Do czego służy ostatnia linijka? Jak wspominałem, jest to mały programik umilający życie w konsoli. 🙂

To całość poradnika dotyczącego usprawniania naszej powłoki. Mam nadzieję, że zawarte w nim informacje przydadzą się wam w waszym obcowaniu z Linuksem. Jeżeli macie jakieś pytania, komentarze – śmiało, pod postem jest małe okienko i zawsze chętnie podyskutuję.

Advertisements

4 thoughts on “nudno@tutaj: dodajemy koloru twojej powłoce!

  1. > Jeżeli z jakiegoś powodu musisz pozostać przy bashu (na przykład od lat w tym środowisku skryptujesz swojego Linuxa), to niestety ten poradnik nie będzie ci zbytnio odpowiadał. Ale możesz poszukać podobnych narzędzi dla swojej powłoki i osiągnąć podobne cele.

    myślę, że skrypty z shebangiem (#!/bin/bash) wciąż będą działać w zsh.

    poza tym: dobry wpis, subłem 🙂

    Like

    1. Chodzi mi bardziej o krótkie formułki ułatwiające życie, na przykład pętle dla plików w folderze. Odpalenie ich bezpośrednio z wiersza poleceń może się skończyć fiaskiem że względu na te różnice. Ale tak, skrypty z shebangiem będą działać. 🙂

      Bardzo mi miło, że ci się spodobało! 🙂

      Like

    1. Bardzo dobry pomysł. Czasami brakuje na Archu tych różnych śmiesznych programików domyślnie dostępnych na innych distro (myślę akurat o Ubuntu, gdzie cowsay widziałem po raz pierwszy). Fakt, są do pobrania z repo ale nie zawsze ma się o tym pojęcie… 🙂

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s