diff --git a/_config.yml b/_config.yml index bf92aef..dbf2b41 100644 --- a/_config.yml +++ b/_config.yml @@ -1,6 +1,6 @@ exclude: ['.gitignore','Gemfile','Gemfile.lock','README.md','TODO'] permalink: pretty -paginate: 1 +paginate: 10 paginate_path: 'blog/:num' markdown: rdiscount baseurl: / diff --git a/_posts/2014-01-14-about-zshrc1.html b/_posts/2014-01-14-about-zshrc1.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc1.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc10.html b/_posts/2014-01-14-about-zshrc10.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc10.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc11.html b/_posts/2014-01-14-about-zshrc11.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc11.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc12.html b/_posts/2014-01-14-about-zshrc12.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc12.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc13.html b/_posts/2014-01-14-about-zshrc13.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc13.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc14.html b/_posts/2014-01-14-about-zshrc14.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc14.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc15.html b/_posts/2014-01-14-about-zshrc15.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc15.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc16.html b/_posts/2014-01-14-about-zshrc16.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc16.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc17.html b/_posts/2014-01-14-about-zshrc17.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc17.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc18.html b/_posts/2014-01-14-about-zshrc18.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc18.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc19.html b/_posts/2014-01-14-about-zshrc19.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc19.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc2.html b/_posts/2014-01-14-about-zshrc2.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc2.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc20.html b/_posts/2014-01-14-about-zshrc20.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc20.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc21.html b/_posts/2014-01-14-about-zshrc21.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc21.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc3.html b/_posts/2014-01-14-about-zshrc3.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc3.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc4.html b/_posts/2014-01-14-about-zshrc4.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc4.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc5.html b/_posts/2014-01-14-about-zshrc5.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc5.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc6.html b/_posts/2014-01-14-about-zshrc6.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc6.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc7.html b/_posts/2014-01-14-about-zshrc7.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc7.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc8.html b/_posts/2014-01-14-about-zshrc8.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc8.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.

diff --git a/_posts/2014-01-14-about-zshrc9.html b/_posts/2014-01-14-about-zshrc9.html deleted file mode 100644 index 0a70270..0000000 --- a/_posts/2014-01-14-about-zshrc9.html +++ /dev/null @@ -1,405 +0,0 @@ ---- -layout: paper -date: 14 January 2014 -last: 14 January 2014 -tags: zshrc, configuration, linux -title: About zshrc -description: It is first paper in my blog (I think I need something here for tests =)). There are many similar articles, and I'll not be an exception. I just want to show my .zshrc and explain what it does and why it is needed. Also any comments or additions are welcome. It is a translated paper from Russian (original). -commentIssueId: 5 ---- -

Prepare

-

First install recommended minima:

-
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
-

pkgfile is a very useful utility. Alo this command will install shell, additional completion and syntax highlighting.

- -

Shell configuration

-

All options are avaible here.

- -

Set history file and number of commands in cache of the current session and in the history file:

-
# history
-HISTFILE=~/.zsh_history
-HISTSIZE=500000
-SAVEHIST=500000
- -

I can not remember all Ctrl+ combinations so I bind keys to its default usages:

-
# bindkeys
-bindkey '^[[A'  up-line-or-search        # up arrow for back-history-search
-bindkey '^[[B'  down-line-or-search      # down arrow for fwd-history-search
-bindkey '\e[1~' beginning-of-line        # home
-bindkey '\e[2~' overwrite-mode           # insert
-bindkey '\e[3~' delete-char              # del
-bindkey '\e[4~' end-of-line              # end
-bindkey '\e[5~' up-line-or-history       # page-up
-bindkey '\e[6~' down-line-or-history     # page-down
-

But in this case Up/Down arrows are used to navigate through the history based on already entered part of a command. And PgUp/PgDown will ignore already entered part of a command.

- -

Command autocomplete:

-
# autocomplete
-autoload -U compinit
-compinit
-zstyle ':completion:*' insert-tab false
-zstyle ':completion:*' max-errors 2
-

Full command autocomplete will be enabled. insert-tab false will enable autocomplete for non-entered commands. max-errors sets maximum number of errors that could be corrected.

- -

Prompt:

-
# promptinit
-autoload -U promptinit
-promptinit
- -

Enable colors:

-
# colors
-autoload -U colors
-colors
- -

Here are some other options.

-

Change directory without cd:

-
# autocd
-setopt autocd
-

Correcting of typos (and question template):

-
# correct
-setopt CORRECT_ALL
-SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
-

Disable f#$%ing beep:

-
# disable beeps
-unsetopt beep
-

Enable calculator:

-
# calc
-autoload zcalc
-

Append history (do not recreate the history file):

-
# append history
-setopt APPEND_HISTORY
-

Do not save dups to history file:

-
# ignore dups in history
-setopt HIST_IGNORE_ALL_DUPS
-

...and additional spaces:

-
# ignore dups in history
-setopt HIST_IGNORE_SPACE
-

...and blank lines too:

-
# reduce blanks in history
-setopt HIST_REDUCE_BLANKS
-

Enable pkgfile:

-
# pkgfile
-source /usr/share/doc/pkgfile/command-not-found.zsh
- -

Syntax highlighting

-
# highlighting -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) -# brackets -ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold' -# cursor -#ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue' -# main -# default -ZSH_HIGHLIGHT_STYLES[default]='none' -# unknown -ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' -# command -ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=magenta,bold' -ZSH_HIGHLIGHT_STYLES[alias]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[function]='fg=green,bold' -ZSH_HIGHLIGHT_STYLES[command]='fg=green' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue,bold' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue,bold' -# path -ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,bold' -ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=cyan' -# shell -ZSH_HIGHLIGHT_STYLES[globbing]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[assign]='fg=magenta' -ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=blue' -# quotes -ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow,underline' -ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' -# pattern example -#ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -# root example -#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
-

In first line highlighting is turned on. Next main, brackets and pattern highlighting are turned on. Patterns are set below (rm -rf * in the example). Also root and cursor highlighting may be turned on. Colors syntax is understandable, fg is font color, bg is background color.

- -

$PROMPT and $RPROMPT

-

The general idea is the use single .zshrc for root and normal user:

-
# PROMPT && RPROMPT -if [[ $EUID == 0 ]]; then -# [root@host dir]# - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[red]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[red]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]# %{$reset_color%}" -else -# [user@host dir]$ - PROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[green]%}%n%{$reset_color%}\ -%{$fg_bold[white]%}@%{$reset_color%}\ -%{$fg_no_bold[green]%}%m %{$reset_color%}\ -%{$fg_bold[yellow]%}%1/%{$reset_color%}\ -%{$fg_bold[white]%}]$ %{$reset_color%}" -fi
- -

fg is font color, bg is background color. \_bold and \_no_bold regulate the tint. Commands should be in %{ ... %} so they do not appear. Avaible colors are:

-
black
-red
-green
-yellow
-blue
-magenta
-cyan
-white
- -

Avaible variables are:

-
%n - the username -%m - the computer's hostname (truncated to the first period) -%M - the computer's hostname -%l - the current tty -%? - the return code of the last-run application. -%# - the prompt based on user privileges (# for root and % for the rest) -%T - system time(HH:MM) -%* - system time(HH:MM:SS) -%D - system date(YY-MM-DD) -%d - the current working directory -%~ - the same as %d but if in $HOME, this will be replaced by ~ -%1/ - the same as %d but only last directory
- -

RPROMPT (acpi package is necessary):

-
precmd () { - # battery charge - function batcharge { - bat_perc=`acpi | awk {'print $4;'} | sed -e "s/\s//" -e "s/%.*//"` - if [[ $bat_perc < 15 ]]; then - col="%{$fg_bold[red]%}" - elif [[ $bat_perc < 50 ]]; then - col="%{$fg_bold[yellow]%}" - else - col="%{$fg_bold[green]%}" - fi - echo "%{$fg_bold[white]%}["$col$bat_perc"%{$fg_bold[white]%}%%]%{$reset_color%}" - } - # last command - returncode="%(?.%{$fg[green]%}.%{$fg[red]%})%?%{$resetcolor%}" - RPROMPT="%{$fg_bold[white]%}[%{$reset_color%}\ -%{$fg_bold[cyan]%}%T%{$reset_color%}\ -%{$fg_bold[white]%}] %{$reset_color%}"\ -$(batcharge)\ -"%{$fg_bold[white]%}[%{$reset_color%}"\ -$returncode\ -"%{$fg_bold[white]%}]%{$reset_color%}"
-

My RPROMPT shows current time, battery change and last returned code. precmd() is necessary for automatic updating. The construct $(if.true.false) is conditional statement in zsh.

- -

Aliases

-

Copy only those aliases that you need. If any alias uses application that is not installed it will leads to fail of loading of configuration file.

- -

Small useful (or maybe not) function:

-
show_which() {
-  OUTPUT=$(which $1 | cut -d " " -f7-)
-  echo "Running '$OUTPUT'" 1>&2
-}
- -

Here is the first group of aliases:

-
## alias -# colored grep -alias grep='grep --colour=auto' -# change top to htop -alias top='show_which top && htop' -# chromium with different proxy servers (i2p and tor included) -alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' -alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' -alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' -# human-readable df and du -alias df='show_which df && df -k --print-type --human-readable' -alias du='show_which du && du -k --total --human-readable' -# change less and zless to vimpager -alias less='vimpager' -alias zless='vimpager' -# more interactive rm -alias rm='show_which rm && rm -I'
- -

Here are ls aliases (see man ls):

-
alias ls='show_which ls && ls --color=auto'
-alias ll='show_which ll && ls --group-directories-first -l --human-readable'
-alias lr='show_which lr && ls --recursive'
-alias la='show_which la && ll --almost-all'
-alias lx='show_which lx && ll -X --ignore-backups'
-alias lz='show_which lz && ll -S --reverse'
-alias lt='show_which lt && ll -t --reverse'
-alias lm='show_which lm && la | more'
- -

Here are aliases to quick file view from console (just type a file name!):

-
# alias -s
-alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
-alias -s {mp3,flac}=qmmp
-alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice
-alias -s {pdf}=okular
-autoload -U pick-web-browser
-alias -s {html,htm}=opera
- -

Here are "sudo" aliases:

-
# sudo alias -if [[ $EUID == 0 ]]; then - alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' -else - alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' - alias umount='show_which umount && sudo umount' - alias mount='show_which mount && sudo mount' - alias netctl='show_which netctl && sudo netctl' - alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' - alias wifi-menu='show_which wifi-menu && sudo wifi-menu' - alias dhcpcd='show_which dhcpcd && sudo dhcpcd' - alias journalctl='show_which journalctl && sudo journalctl' - alias systemctl='show_which systemctl && sudo systemctl' - alias modprobe='show_which modprobe && sudo modprobe' - alias rmmod='show_which rmmod && sudo rmmod' - alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' - alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' -fi
- -

Here are global aliases. If they are enable the command cat foo g bar will be equivalent the command cat foo | grep bar:

-
# global alias
-alias -g g="| grep"
-alias -g l="| less"
-alias -g t="| tail"
-alias -g h="| head"
-alias -g dn="&> /dev/null &"
- -

Functions

-

Here is a special function for xrandr:

- -
# function to contorl xrandr -# EXAMPLE: projctl 1024x768 -projctl () { - if [ $1 ] ; then - if [ $1 = "-h" ]; then - echo "Usage: projctl [ off/resolution ]" - return - fi - if [ $1 = "off" ]; then - echo "Disable VGA1" - xrandr --output VGA1 --off --output LVDS1 --mode 1366x768 - else - echo "Using resolution: $1" - xrandr --output VGA1 --mode $1 --output LVDS1 --mode $1 - fi - else - echo "Using default resolution" - xrandr --output VGA1 --mode 1366x768 --output LVDS1 --mode 1366x768 - fi -}
- -

Unfortunately I can not remember tar flags thus I use special functions:

-
# function to extract archives -# EXAMPLE: unpack file -unpack () { - if [[ -f $1 ]]; then - case $1 in - *.tar.bz2) tar xjfv $1 ;; - *.tar.gz) tar xzfv $1 ;; - *.tar.xz) tar xvJf $1 ;; - *.bz2) bunzip2 $1 ;; - *.gz) gunzip $1 ;; - *.rar) unrar x $1 ;; - *.tar) tar xf $1 ;; - *.tbz) tar xjvf $1 ;; - *.tbz2) tar xjf $1 ;; - *.tgz) tar xzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo "I don't know how to extract '$1'" ;; - esac - else - case $1 in - *help) echo "Usage: unpack ARCHIVE_NAME" ;; - *) echo "'$1' is not a valid file" ;; - esac - fi -} -# function to create archives -# EXAMPLE: pack tar file -pack () { - if [ $1 ]; then - case $1 in - tar.bz2) tar -cjvf $2.tar.bz2 $2 ;; - tar.gz) tar -czvf $2.tar.bz2 $2 ;; - tar.xz) tar -cf - $2 | xz -9 -c - > $2.tar.xz ;; - bz2) bzip $2 ;; - gz) gzip -c -9 -n $2 > $2.gz ;; - tar) tar cpvf $2.tar $2 ;; - tbz) tar cjvf $2.tar.bz2 $2 ;; - tgz) tar czvf $2.tar.gz $2 ;; - zip) zip -r $2.zip $2 ;; - 7z) 7z a $2.7z $2 ;; - *help) echo "Usage: pack TYPE FILES" ;; - *) echo "'$1' cannot be packed via pack()" ;; - esac - else - echo "'$1' is not a valid file" - fi -}
- -

Here is a special function for su:

-
su () { - checksu=0 - for flags in $*; do - if [[ $flags == "-" ]]; then - checksu=1 - fi - done - if [[ $checksu == 0 ]]; then - echo "Use 'su -', Luke" - /usr/bin/su - $* - else - /usr/bin/su $* - fi -}
- -

Functions with automatic rehash after installing/removing packages are:

-
pacman () { - /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -yaourt () { - /usr/bin/yaourt $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -} -# for testing repo -yatest () { - /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\\|R\\|U" && rehash -}
-

But autocomplete for yaourt -Ss will require root privileges.

- -

Variables

-

It is recommended to set own variables in ~/.zshenv. But I have everything stored in the single file.

- -

Here are path, mask of new files, editor and pager:

-
# path
-export PATH="$PATH:$HOME/.local/bin"
-# umask
-umask 022
-# editor
-export EDITOR="vim"
-export PAGER="vimpager"
- -

Here is hashes. If they are enable the command ~global will be equivalent the command /mnt/global:

-
# hash
-hash -d global=/mnt/global
-hash -d windows=/mnt/windows
-hash -d iso=/mnt/iso
-hash -d u1=/mnt/usbdev1
-hash -d u2=/mnt/usbdev2
- -

Screenshot

-

- -

File

-

Here is my .zshrc.