summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTharre <tharre3@gmail.com>2018-08-12 00:05:51 +0200
committerTharre <tharre3@gmail.com>2018-08-12 01:17:13 +0200
commit8fc802bb7843ce0e32661cfa23f8947dc3ddea68 (patch)
tree10ef02a948bb83b4ddc6e497fc7bd38d92c1314e
parentbe230463de9cbb87115589192a3da3223f172a20 (diff)
downloaddotfiles-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--.gitmodules6
m---------.oh-my-zsh0
-rw-r--r--.zsh/prompt_custom_setup30
m---------.zsh/zsh-completions0
-rw-r--r--.zshenv7
-rw-r--r--.zshrc238
-rw-r--r--zsh-custom/themes/custom.zsh-theme24
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
diff --git a/.zshenv b/.zshenv
new file mode 100644
index 0000000..e9cb012
--- /dev/null
+++ b/.zshenv
@@ -0,0 +1,7 @@
+# set LS_COLORS
+eval "$(dircolors)"
+
+typeset -U path
+path=("$HOME/bin" $path[@])
+export EDITOR=vim
+export LESS='-R'
diff --git a/.zshrc b/.zshrc
index 7fcae09..964c288 100644
--- a/.zshrc
+++ b/.zshrc
@@ -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%}"
-