diff options
author | Tharre <tharre3@gmail.com> | 2018-08-12 00:05:51 +0200 |
---|---|---|
committer | Tharre <tharre3@gmail.com> | 2018-08-12 01:17:13 +0200 |
commit | 8fc802bb7843ce0e32661cfa23f8947dc3ddea68 (patch) | |
tree | 10ef02a948bb83b4ddc6e497fc7bd38d92c1314e | |
parent | be230463de9cbb87115589192a3da3223f172a20 (diff) | |
download | dotfiles-8fc802bb7843ce0e32661cfa23f8947dc3ddea68.tar.gz dotfiles-8fc802bb7843ce0e32661cfa23f8947dc3ddea68.tar.xz dotfiles-8fc802bb7843ce0e32661cfa23f8947dc3ddea68.zip |
zsh: replace oh-my-zsh with vanilla zsh configs
oh-my-zsh introduces *a lot* of bloat, but I've barely been using any of
it these past years. Just picking the options I use makes zsh easier to
work with and debug (and hopefully faster).
-rw-r--r-- | .gitmodules | 6 | ||||
m--------- | .oh-my-zsh | 0 | ||||
-rw-r--r-- | .zsh/prompt_custom_setup | 30 | ||||
m--------- | .zsh/zsh-completions | 0 | ||||
-rw-r--r-- | .zshenv | 7 | ||||
-rw-r--r-- | .zshrc | 238 | ||||
-rw-r--r-- | zsh-custom/themes/custom.zsh-theme | 24 |
7 files changed, 155 insertions, 150 deletions
diff --git a/.gitmodules b/.gitmodules index aa0021f..d7f8e68 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "oh-my-zsh"] - path = .oh-my-zsh - url = https://github.com/robbyrussell/oh-my-zsh.git [submodule "vim-pathogen"] path = .vim/bundle/vim-pathogen url = https://github.com/tpope/vim-pathogen.git @@ -74,3 +71,6 @@ [submodule ".vim/bundle/vim-fugitive"] path = .vim/bundle/vim-fugitive url = https://github.com/tpope/vim-fugitive.git +[submodule ".zsh/zsh-completions"] + path = .zsh/zsh-completions + url = https://github.com/zsh-users/zsh-completions.git diff --git a/.oh-my-zsh b/.oh-my-zsh deleted file mode 160000 -Subproject d848c94804918138375041a9f800f401bec1206 diff --git a/.zsh/prompt_custom_setup b/.zsh/prompt_custom_setup new file mode 100644 index 0000000..1fd02c4 --- /dev/null +++ b/.zsh/prompt_custom_setup @@ -0,0 +1,30 @@ +# my custom zsh theme +# requires `setopt PROMPT_SUBST` + + +# prefix hostname if ssh session was detected +function prompt_print_hostname() { + if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_CONNECTION" ] || [ -n "$SSH_TTY" ]; then + printf "%s" "%F{red}[%m]%f " + fi +} + +function git_prompt_parse_dirty() { + local FLAGS=("--porcelain" "--ignore-submodules=dirty") + local STATUS=$(command git status $FLAGS | tail -n1) + if [[ -n $STATUS ]]; then + printf "%s" "%F{214}*%f" + fi +} + +function git_prompt_info() { + local ref + ref=$(command git symbolic-ref HEAD 2> /dev/null) || \ + ref=$(command git rev-parse --short HEAD 2> /dev/null) || return 0 + + printf "%s" "%F{075} (${ref#refs/heads/}$(git_prompt_parse_dirty)%F{075})%f" +} + +PS1='$(prompt_print_hostname)%F{032}%(8~"[..]/")%7~$(git_prompt_info) %F{105}%1(j.[%j] .)%(!.#.$)%f ' +PS2='%F{red}\ %f' +RPS1="%(?..%F{red}:%?%f)" diff --git a/.zsh/zsh-completions b/.zsh/zsh-completions new file mode 160000 +Subproject df7e44c685c9a60d83a3760aa373d3864779aee @@ -0,0 +1,7 @@ +# set LS_COLORS +eval "$(dircolors)" + +typeset -U path +path=("$HOME/bin" $path[@]) +export EDITOR=vim +export LESS='-R' @@ -1,130 +1,132 @@ -# Path to your oh-my-zsh installation. -export ZSH=$HOME/.oh-my-zsh - -# Set name of the theme to load. -# Look in ~/.oh-my-zsh/themes/ -# Optionally, if you set this to "random", it'll load a random theme each -# time that oh-my-zsh is loaded. -ZSH_THEME="custom" - -# Uncomment the following line to use case-sensitive completion. -# CASE_SENSITIVE="true" - -# Uncomment the following line to use hyphen-insensitive completion. Case -# sensitive completion must be off. _ and - will be interchangeable. -# HYPHEN_INSENSITIVE="true" - -# Uncomment the following line to disable bi-weekly auto-update checks. -DISABLE_AUTO_UPDATE="true" - -# Uncomment the following line to change how often to auto-update (in days). -# export UPDATE_ZSH_DAYS=13 - -# Uncomment the following line to disable colors in ls. -# DISABLE_LS_COLORS="true" - -# Uncomment the following line to disable auto-setting terminal title. -# DISABLE_AUTO_TITLE="true" - -# Uncomment the following line to enable command auto-correction. -# ENABLE_CORRECTION="true" - -# Uncomment the following line to display red dots whilst waiting for completion. -COMPLETION_WAITING_DOTS="true" - -# Uncomment the following line if you want to disable marking untracked files -# under VCS as dirty. This makes repository status check for large repositories -# much, much faster. -# DISABLE_UNTRACKED_FILES_DIRTY="true" +ZSH_HOME="${ZDOTDIR:-$HOME}" +fpath=( "$ZSH_HOME/.zsh" "$ZSH_HOME/.zsh/zsh-completions/src" $fpath ) + +autoload -U compaudit compinit +compinit -d "${XDG_CONFIG_HOME:-$HOME/.config}/zcompdump" + +## aliases +autoload -Uz run-help +unalias run-help +alias help=run-help +alias ls='ls --color=auto' +alias lsa='ls -lah' +alias history='fc -l 1' +alias xclip="xclip -selection c" +alias open="xdg-open" +alias wee='WEECHAT_PASSPHRASE="$(pass personal/weechat)" weechat' +alias which-command='whence' -# Uncomment the following line if you want to change the command execution time -# stamp shown in the history command output. -# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" -# HIST_STAMPS="mm/dd/yyyy" +## zsh options +setopt extended_glob +setopt long_list_jobs # TODO:? +setopt interactivecomments +bindkey -e +bindkey '^r' history-incremental-search-backward +bindkey ' ' magic-space # expand !! and alike + +# this still doesn't catch some attacks, see: +# https://thejh.net/misc/website-terminal-copy-paste +autoload -Uz bracketed-paste-magic +zle -N bracketed-paste bracketed-paste-magic + +## history +HISTFILE="$ZSH_HOME/.zsh_history" +HISTSIZE=100000000 +SAVEHIST=$HISTSIZE +setopt extended_history +setopt hist_ignore_dups +setopt inc_append_history +setopt share_history +setopt hist_expire_dups_first + +## completion +zmodload zsh/complist +bindkey -M menuselect '^o' accept-and-infer-next-history # TODO: +zstyle ':completion:*' menu select +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*' +zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01' +zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm -w -w" +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" +zstyle ':completion::complete:*' use-cache 1 +zstyle ':completion::complete:*' cache-path "${XDG_CONFIG_HOME:-$HOME/.config}/zsh" +setopt complete_aliases +unsetopt menu_complete + +zmodload zsh/terminfo +# Make sure that the terminal is in application mode when zle is active, since +# only then values from $terminfo are valid +if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then + function zle-line-init() { + echoti smkx + } + function zle-line-finish() { + echoti rmkx + } + zle -N zle-line-init + zle -N zle-line-finish +fi -# Would you like to use another custom folder than $ZSH/custom? -ZSH_CUSTOM=~/dotfiles/zsh-custom +autoload -U up-line-or-beginning-search +zle -N up-line-or-beginning-search +bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search +autoload -U down-line-or-beginning-search +zle -N down-line-or-beginning-search +bindkey "${terminfo[kcud1]}" down-line-or-beginning-search -# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*) -# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ -# Example format: plugins=(rails git textmate ruby lighthouse) -# Add wisely, as too many plugins slow down shell startup. -plugins=(git) +setopt PROMPT_SUBST +autoload -Uz promptinit +promptinit +prompt 'custom' -source $ZSH/oh-my-zsh.sh +unset ZSH_HOME ## functions -function noproxy { - unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ftp_proxy FTP_PROXY no_proxy - - # change dconf - dconf reset -f /system/proxy/ - - proxy_update -} - - function setproxy { - base_proxy="proxy.domain.com" - base_proxy_port=8080 - - dconf_proxy="'$base_proxy'" - env_proxy="http://$base_proxy:$base_proxy_port" - - http_proxy=$env_proxy - HTTP_PROXY=$env_proxy - https_proxy=$env_proxy - HTTPS_PROXY=$env_proxy - ftp_proxy=$env_proxy - FTP_PROXY=$env_proxy - no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com" - export http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ftp_proxy FTP_PROXY no_proxy - - # change dconf - dconf write /system/proxy/mode "'manual'" - dconf write /system/proxy/ignore-hosts "['localhost', '127.0.0.0/8', '10.0.0.0/8', '192.168.0.0/16', '172.16.0.0/12']" - dconf write /system/proxy/http/enabled true - dconf write /system/proxy/http/host "$dconf_proxy" - dconf write /system/proxy/http/port "$base_proxy_port" - dconf write /system/proxy/https/host "$dconf_proxy" - dconf write /system/proxy/https/port "$base_proxy_port" - dconf write /system/proxy/ftp/host "$dconf_proxy" - dconf write /system/proxy/ftp/port "$base_proxy_port" - - proxy_update +function 256color_test { + ( x=`tput op` y=`printf %$((${COLUMNS}-6))s`; + for i in {0..256}; + do + o=00$i; + echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x; + done ) } -# restart/reload applications for proxy settings to take effect -function proxy_update { - killall -q dropbox - dropbox-cli start +function title { + case "$TERM" in + cygwin|xterm*|putty*|rxvt*|ansi) + print -Pn "\e]1;$1:q\a" + ;; + screen*) + print -Pn "\ek$1:q\e\\" + ;; + *) + if [[ -n "$terminfo[fsl]" ]] && [[ -n "$terminfo[tsl]" ]]; then + echoti tsl + print -Pn "$1" + echoti fsl + fi + ;; + esac } -function 256color_test { - ( x=`tput op` y=`printf %$((${COLUMNS}-6))s`; - for i in {0..256}; - do - o=00$i; - echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x; - done ) +function set_title_precmd { + title "%15<..<%~%<<" $ZSH_THEME_TERM_TITLE_IDLE } -## PATH -export PATH="$HOME/bin:$PATH" +function set_tilte_preexec { + setopt extended_glob -## alias + # cmd name only, or if this is sudo or ssh, the next cmd + local CMD=${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%} + local LINE="${2:gs/%/%%}" -alias xclip="xclip -selection c" -alias open="xdg-open" -alias wee='WEECHAT_PASSPHRASE="$(pass personal/weechat)" weechat' + title '$CMD' '%100>...>$LINE%<<' +} -## env -export EDITOR=vim +precmd_functions+=(set_title_precmd) +preexec_functions+=(set_tilte_preexec) -## gpg-agent -export GPG_TTY=$(tty) - -# Refresh gpg-agent tty in case user switches into an X session -gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1 +# zshenv may not be attached to a tty, so we set this here instead +export GPG_TTY="$(tty)" # if $SSH_AUTH_SOCK is not set or not pointing to a socket, use gpg-agent if [ ! -S "$SSH_AUTH_SOCK" ] && type "gpgconf" > /dev/null; then @@ -134,18 +136,8 @@ if [ ! -S "$SSH_AUTH_SOCK" ] && type "gpgconf" > /dev/null; then fi fi -## zsh options - -bindkey -M viins ' ' magic-space -setopt EXTENDED_GLOB -export HISTSIZE=100000000 -export SAVEHIST=$HISTSIZE +# Refresh gpg-agent tty in case user switches into an X session +gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1 ## startup update_dotfiles - -if type "archey3" > /dev/null; then - archey3 # nice system information and arch logo -fi - -[ -e ~/TODO ] && cat ~/TODO diff --git a/zsh-custom/themes/custom.zsh-theme b/zsh-custom/themes/custom.zsh-theme deleted file mode 100644 index a485b44..0000000 --- a/zsh-custom/themes/custom.zsh-theme +++ /dev/null @@ -1,24 +0,0 @@ -# custom.zsh-theme -# based on the af-magic theme - -local return_code="%(?..%{$fg[red]%}:%?%{$reset_color%})" - -# prefix hostname if ssh session was detected -if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_CONNECTION" ] || [ -n "$SSH_TTY" ]; then - local hostname="%{$fg[red]%}[%m]%{$reset_color%} " -fi - -# primary prompt -PROMPT='$hostname\ -$FG[032]%(8~"[..]/")%7~\ -$(git_prompt_info) \ -$FG[105]%1(j.[%j] .)%(!.#.$)%{$reset_color%} ' -PROMPT2='%{$fg[red]%}\ %{$reset_color%}' -RPS1='${return_code}' - -# git settings -ZSH_THEME_GIT_PROMPT_PREFIX="$FG[075] (" -ZSH_THEME_GIT_PROMPT_CLEAN="" -ZSH_THEME_GIT_PROMPT_DIRTY="$FG[214]*%{$reset_color%}" -ZSH_THEME_GIT_PROMPT_SUFFIX="$FG[075])%{$reset_color%}" - |