Lots of zsh changes

master
Jonathan Hodgson 5 years ago
parent d6599e53fa
commit 715b2b7d3e
  1. 2
      shells/zsh/STOW/.zprofile
  2. 175
      shells/zsh/STOW/.zshrc
  3. 131
      shells/zsh/STOW/.zshrc.old
  4. 1
      shells/zsh/includes/aliases.zsh
  5. 6
      shells/zsh/includes/auto-notify.zsh
  6. 2
      shells/zsh/includes/autoSuggest.zsh
  7. 373
      shells/zsh/includes/colors.zsh
  8. 18
      shells/zsh/includes/completion.zsh
  9. 22
      shells/zsh/includes/focus.zsh
  10. 9
      shells/zsh/includes/fzf.zsh
  11. 1
      shells/zsh/includes/globals.zsh
  12. 59
      shells/zsh/includes/keybindings.zsh
  13. 174
      shells/zsh/includes/promptconfig.zsh
  14. 0
      shells/zsh/includes/rangercd.zsh.tmp
  15. 0
      shells/zsh/includes/shortcuts.zsh.tmp

@ -1,2 +1,2 @@
source ~/.dotfiles/shells/shared/profile
source ~/.dotfiles/shells/shared/environmentVariables

@ -1,97 +1,52 @@
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation.
export ZSH=$HOME/.dotfiles/shells/zsh/oh-my-zsh-core
# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-zsh is loaded.
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="powerlevel9k/powerlevel9k"
# 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"
# 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="dd.mm.yyyy"
# Would you like to use another custom folder than $ZSH/custom?
ZSH_CUSTOM=$HOME/.dotfiles/shells/zsh/oh-my-zsh-custom
# 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 zsh-better-npm-completion zsh-autosuggestions)
source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
# Make colours work
#
autoload -U colors && colors
# Make sure we are using vi mode
bindkey -v
# History in cache directory:
setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits.
setopt SHARE_HISTORY # Share history between all sessions.
setopt HIST_IGNORE_SPACE
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.cache/zsh/history
export KEYTIMEOUT=25
# Change cursor shape for different vi modes. (thanks Luke Smith: https://github.com/LukeSmithxyz/voidrice/)
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
#
zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne '\e[5 q'
}
zle -N zle-line-init
# ssh
# export SSH_KEY_PATH="~/.ssh/rsa_id"
# Use beam shape cursor on startup.
echo -ne '\e[5 q'
# Use beam shape cursor for each new prompt.
preexec() { echo -ne '\e[5 q' ;}
# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
bindkey -v '^?' backward-delete-char
source ~/.dotfiles/shells/zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
if [ ! -n "$SSH_CLIENT" ] && [ ! -n "$SSH_TTY" ]; then
if [ -L $HOME/.dotfiles/shells/zsh/current-color-scheme ]; then
source $HOME/.dotfiles/shells/zsh/current-color-scheme
if [ -L $DOTFILES/shells/zsh/current-color-scheme ]; then
source $DOTFILES/shells/zsh/current-color-scheme
fi
fi
@ -99,24 +54,30 @@ TRAPWINCH(){
zle && {zle reset-prompt; zle -R}
}
#if [ -f ~/.current-folder ] && [ ! $TMUX ]; then
# \cd "$(cat ~/.current-folder)"
#fi
#[ -z "$TMUX" ] && { exec tmux new-session && exit;}
#if [[ ! $TERM =~ screen ]]; then
# exec tmux
#fi
#
local current="$(project current --path)"
if [ -n "$current" ]; then
local script="/usr/bin/script"
if [[ ! "$(ps -ocommand -p $PPID | grep -v 'COMMAND' | cut -d' ' -f1 )" == "$script" ]]; then
mkdir "$current/shell-logs"
/usr/bin/script -f "$current/shell-logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log"
setopt autocd
# I use initial command in my folder-shell script
# This is normally empty, but might be lf or ranger if I want to open it
# THis is almost always a curses app so I don't want to try and record the terminal
if [ -n "$initialCommand" ]; then
echo "Running $initialCommand"
$initialCommand && exit
else
local current="$(project current --path)"
if [ -n "$current" ]; then
local script="/usr/bin/script"
if [[ ! "$(ps -ocommand -p $PPID | grep -v 'COMMAND' | cut -d' ' -f1 )" == "$script" ]]; then
mkdir "$current/shell-logs" 2> /dev/null
/usr/bin/script -f "$current/shell-logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log"
fi
fi
fi
#clear
#tldr --linux -r
export ZSH_FOLDER="$DOTFILES/shells/zsh/"
# Include my config files
for file in "$ZSH_FOLDER/includes/"*".zsh"; do
source "$file"
done
# Load zsh-syntax-highlighting; should be last.
source $HOME/.dotfiles/shells/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2> /dev/null

@ -0,0 +1,131 @@
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation.
#export ZSH=$HOME/.dotfiles/shells/zsh/oh-my-zsh-core
# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-zsh is loaded.
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
#ZSH_THEME="powerlevel9k/powerlevel9k"
# 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"
# 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="dd.mm.yyyy"
# Would you like to use another custom folder than $ZSH/custom?
#ZSH_CUSTOM=$HOME/.dotfiles/shells/zsh/oh-my-zsh-custom
# 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 zsh-better-npm-completion zsh-autosuggestions)
source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
# ssh
# export SSH_KEY_PATH="~/.ssh/rsa_id"
# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
source ~/.dotfiles/shells/zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
if [ ! -n "$SSH_CLIENT" ] && [ ! -n "$SSH_TTY" ]; then
if [ -L $HOME/.dotfiles/shells/zsh/current-color-scheme ]; then
source $HOME/.dotfiles/shells/zsh/current-color-scheme
fi
fi
TRAPWINCH(){
zle && {zle reset-prompt; zle -R}
}
#if [ -f ~/.current-folder ] && [ ! $TMUX ]; then
# \cd "$(cat ~/.current-folder)"
#fi
#[ -z "$TMUX" ] && { exec tmux new-session && exit;}
#if [[ ! $TERM =~ screen ]]; then
# exec tmux
#fi
#
# I use initial command in my folder-shell script
# This is normally empty, but might be lf or ranger if I want to open it
# THis is almost always a curses app so I don't want to try and record the terminal
if [ -n "$initialCommand" ]; then
echo "Running $initialCommand"
$initialCommand && exit
else
local current="$(project current --path)"
if [ -n "$current" ]; then
local script="/usr/bin/script"
if [[ ! "$(ps -ocommand -p $PPID | grep -v 'COMMAND' | cut -d' ' -f1 )" == "$script" ]]; then
mkdir "$current/shell-logs"
/usr/bin/script -f "$current/shell-logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log"
fi
fi
fi
#clear
#tldr --linux -r

@ -21,4 +21,3 @@ alias -s gitignore=$EDITOR
alias -s json=$EDITOR
#unalias gf

@ -0,0 +1,6 @@
source "$ZSH_FOLDER/plugins/zsh-auto-notify/auto-notify.plugin.zsh"
export AUTO_NOTIFY_THRESHOLD=5
export AUTO_NOTIFY_TITLE="Hey! %command has just finished"
export AUTO_NOTIFY_BODY="It completed in %elapsed seconds with exit code %exit_code"
AUTO_NOTIFY_IGNORE+=("bat" "zathura" "libreoffice" "lf")
disable_auto_notify

@ -0,0 +1,2 @@
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
source "$ZSH_FOLDER/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"

@ -0,0 +1,373 @@
# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
################################################################
# Color functions
# This file holds some color-functions for
# the powerlevel9k-ZSH-theme
# https://github.com/bhilburn/powerlevel9k
# Modified my jh
################################################################
typeset -gAh __JH_COLORS
# https://jonasjacek.github.io/colors/
# use color names by default to allow dark/light themes to adjust colors based on names
__JH_COLORS=(
black 000
red 001
green 002
yellow 003
blue 004
magenta 005
cyan 006
white 007
grey 008
maroon 009
lime 010
olive 011
navy 012
fuchsia 013
purple 013
aqua 014
teal 014
silver 015
grey0 016
navyblue 017
darkblue 018
blue3 019
blue3 020
blue1 021
darkgreen 022
deepskyblue4 023
deepskyblue4 024
deepskyblue4 025
dodgerblue3 026
dodgerblue2 027
green4 028
springgreen4 029
turquoise4 030
deepskyblue3 031
deepskyblue3 032
dodgerblue1 033
green3 034
springgreen3 035
darkcyan 036
lightseagreen 037
deepskyblue2 038
deepskyblue1 039
green3 040
springgreen3 041
springgreen2 042
cyan3 043
darkturquoise 044
turquoise2 045
green1 046
springgreen2 047
springgreen1 048
mediumspringgreen 049
cyan2 050
cyan1 051
darkred 052
deeppink4 053
purple4 054
purple4 055
purple3 056
blueviolet 057
orange4 058
grey37 059
mediumpurple4 060
slateblue3 061
slateblue3 062
royalblue1 063
chartreuse4 064
darkseagreen4 065
paleturquoise4 066
steelblue 067
steelblue3 068
cornflowerblue 069
chartreuse3 070
darkseagreen4 071
cadetblue 072
cadetblue 073
skyblue3 074
steelblue1 075
chartreuse3 076
palegreen3 077
seagreen3 078
aquamarine3 079
mediumturquoise 080
steelblue1 081
chartreuse2 082
seagreen2 083
seagreen1 084
seagreen1 085
aquamarine1 086
darkslategray2 087
darkred 088
deeppink4 089
darkmagenta 090
darkmagenta 091
darkviolet 092
purple 093
orange4 094
lightpink4 095
plum4 096
mediumpurple3 097
mediumpurple3 098
slateblue1 099
yellow4 100
wheat4 101
grey53 102
lightslategrey 103
mediumpurple 104
lightslateblue 105
yellow4 106
darkolivegreen3 107
darkseagreen 108
lightskyblue3 109
lightskyblue3 110
skyblue2 111
chartreuse2 112
darkolivegreen3 113
palegreen3 114
darkseagreen3 115
darkslategray3 116
skyblue1 117
chartreuse1 118
lightgreen 119
lightgreen 120
palegreen1 121
aquamarine1 122
darkslategray1 123
red3 124
deeppink4 125
mediumvioletred 126
magenta3 127
darkviolet 128
purple 129
darkorange3 130
indianred 131
hotpink3 132
mediumorchid3 133
mediumorchid 134
mediumpurple2 135
darkgoldenrod 136
lightsalmon3 137
rosybrown 138
grey63 139
mediumpurple2 140
mediumpurple1 141
gold3 142
darkkhaki 143
navajowhite3 144
grey69 145
lightsteelblue3 146
lightsteelblue 147
yellow3 148
darkolivegreen3 149
darkseagreen3 150
darkseagreen2 151
lightcyan3 152
lightskyblue1 153
greenyellow 154
darkolivegreen2 155
palegreen1 156
darkseagreen2 157
darkseagreen1 158
paleturquoise1 159
red3 160
deeppink3 161
deeppink3 162
magenta3 163
magenta3 164
magenta2 165
darkorange3 166
indianred 167
hotpink3 168
hotpink2 169
orchid 170
mediumorchid1 171
orange3 172
lightsalmon3 173
lightpink3 174
pink3 175
plum3 176
violet 177
gold3 178
lightgoldenrod3 179
tan 180
mistyrose3 181
thistle3 182
plum2 183
yellow3 184
khaki3 185
lightgoldenrod2 186
lightyellow3 187
grey84 188
lightsteelblue1 189
yellow2 190
darkolivegreen1 191
darkolivegreen1 192
darkseagreen1 193
honeydew2 194
lightcyan1 195
red1 196
deeppink2 197
deeppink1 198
deeppink1 199
magenta2 200
magenta1 201
orangered1 202
indianred1 203
indianred1 204
hotpink 205
hotpink 206
mediumorchid1 207
darkorange 208
salmon1 209
lightcoral 210
palevioletred1 211
orchid2 212
orchid1 213
orange1 214
sandybrown 215
lightsalmon1 216
lightpink1 217
pink1 218
plum1 219
gold1 220
lightgoldenrod2 221
lightgoldenrod2 222
navajowhite1 223
mistyrose1 224
thistle1 225
yellow1 226
lightgoldenrod1 227
khaki1 228
wheat1 229
cornsilk1 230
grey100 231
grey3 232
grey7 233
grey11 234
grey15 235
grey19 236
grey23 237
grey27 238
grey30 239
grey35 240
grey39 241
grey42 242
grey46 243
grey50 244
grey54 245
grey58 246
grey62 247
grey66 248
grey70 249
grey74 250
grey78 251
grey82 252
grey85 253
grey89 254
grey93 255
)
function termColors() {
local term_colors
if which tput &>/dev/null; then
term_colors=$(tput colors)
else
term_colors=$(echotc Co)
fi
if (( ! $? && ${term_colors:-0} < 256 )); then
print -P "%F{red}WARNING!%f Your terminal appears to support fewer than 256 colors!"
print -P "If your terminal supports 256 colors, please export the appropriate environment variable"
print -P "_before_ loading this theme in your \~\/.zshrc. In most terminal emulators, putting"
print -P "%F{blue}export TERM=\"xterm-256color\"%f at the top of your \~\/.zshrc is sufficient."
fi
}
# get the proper color code if it does not exist as a name.
function getColor() {
# If Color is not numerical, try to get the color code.
if [[ "$1" != <-> ]]; then
1=$(getColorCode $1)
fi
echo -n "$1"
}
# empty paramenter resets (stops) background color
function backgroundColor() {
echo -n "%K{$(getColor $1)}"
}
# empty paramenter resets (stops) foreground color
function foregroundColor() {
echo -n "%F{$(getColor $1)}"
}
function focusBackgroundColor() {
if [ "$HASFOCUS" = "true" ]; then
backgroundColor "$@"
fi
}
function focusForegroundColor() {
if [ "$HASFOCUS" = "true" ]; then
foregroundColor "$@"
fi
}
# Get numerical color codes. That way we translate ANSI codes
# into ZSH-Style color codes.
function getColorCode() {
# Early exit: Check if given value is already numerical
if [[ "$1" == <-> ]]; then
# Pad color with zeroes
echo -n "${(l:3::0:)1}"
return
fi
local colorName="${1}"
# Check if value is none with any case.
if [[ "${(L)colorName}" == "none" ]]; then
echo -n 'none'
elif [[ "${colorName}" == "foreground" ]]; then
# for testing purposes in terminal
# call via `getColorCode foreground`
for i in "${(k@)__JH_COLORS}"; do
print -P "$(foregroundColor $i)$(getColor $i) - $i%f"
done
elif [[ "${colorName}" == "background" ]]; then
# call via `getColorCode background`
for i in "${(k@)__JH_COLORS}"; do
print -P "$(backgroundColor $i)$(getColor $i) - $i%k"
done
else
# Strip eventual "bg-" prefixes
colorName=${colorName#bg-}
# Strip eventual "fg-" prefixes
colorName=${colorName#fg-}
# Strip eventual "br" prefixes ("bright" colors)
colorName=${colorName#br}
echo -n $__JH_COLORS[$colorName]
fi
}
# Check if two colors are equal, even if one is specified as ANSI code.
function isSameColor() {
if [[ "$1" == "NONE" || "$2" == "NONE" ]]; then
return 1
fi
local color1=$(getColorCode "$1")
local color2=$(getColorCode "$2")
return $(( color1 != color2 ))
}
function resetColor(){
backgroundColor none
foregroundColor white
echo -n "%{$reset_color%}"
}

@ -1,3 +1,18 @@
# Make completion work
autoload -U compinit
zstyle ':completion:*' menu select
# Auto complete with case insenstivity
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
zmodload zsh/complist
compinit
#
# Use vim keys in tab complete menu: (thanks Luke Smith: https://github.com/LukeSmithxyz/voidrice/)
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -v '^?' backward-delete-char
compdef sshrc=ssh
autoload bashcompinit
@ -21,6 +36,7 @@ _wp_complete() {
}
complete -o nospace -F _wp_complete wp
# Include hidden files in autocomplete:
_comp_options+=(globdots)
fpath+="$(dirname $0)/completion"
#source "$ZSH_FOLDER/plugins/fzf-tab/fzf-tab.zsh"

@ -0,0 +1,22 @@
#Gain focus
gain_focus(){
export HASFOCUS="true"
set_prompts
zle reset-prompt
}
zle -N gain_focus
loose_focus(){
export HASFOCUS="false"
set_prompts
zle reset-prompt
}
zle -N loose_focus
# This makes sc (and maybe other terminals?) send escape codes to the shell when focus is gained / lost
printf '\033[?1004h'
bindkey '\033[I' gain_focus # Gain Focus
bindkey '\033[O' loose_focus # Loose Focus
HASFOCUS="true"

@ -1,9 +1,10 @@
# this rg command will get a list of files that are not in gitignore or similar
export FZF_DEFAULT_COMMAND="fd --type f --hidden --follow --exclude .git --exclude .PlayOnLinux --exclude \"PlayOnLinux\'s virtual drives\""
export FZF_DEFAULT_OPTS="--preview '[[ \$(file -L --mime {}) =~ binary ]] && echo {} is a binary file || ( bat --style=numbers --color=always {} || cat {}) 2> /dev/null | head -500'"
export FZF_CTRL_R_OPTS="--no-preview"
export FZF_DEFAULT_OPTS="--reverse --height 40%"
export FZF_CTRL_R_OPTS=""
# this is the argument completeion optionm, use the same command
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_CTRL_T_OPTS="$FZF_DEFAULT_OPTS --preview \"bat --style=numbers --color=always {}\""
if [ -e /usr/share/fzf/key-bindings.zsh ]; then
source /usr/share/fzf/key-bindings.zsh
source /usr/share/fzf/completion.zsh
@ -127,7 +128,7 @@ jhswap(){
# I want my tab complete to be based on "current" word I am typing sometimes, before the command
custom_tabcomplete(){
local tokens cmd prefix trigger tail fzf matches lbuf d_cmds
export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --reverse --height 40%"
FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --reverse --height 40%"
setopt localoptions noshwordsplit noksh_arrays noposixbuiltins
if [ -n "$RBUFFER" ]; then
@ -188,6 +189,4 @@ jhswap(){
zle -N custom_tabcomplete
bindkey '^I' custom_tabcomplete
fi

@ -1 +0,0 @@
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'

@ -0,0 +1,59 @@
# create a zkbd compatible hash;
# to add other keys to this hash, see: man 5 terminfo
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
key[Insert]="${terminfo[kich1]}"
key[Backspace]="${terminfo[kbs]}"
key[Delete]="${terminfo[kdch1]}"
key[Up]="${terminfo[kcuu1]}"
key[Down]="${terminfo[kcud1]}"
key[Left]="${terminfo[kcub1]}"
key[Right]="${terminfo[kcuf1]}"
key[PageUp]="${terminfo[kpp]}"
key[PageDown]="${terminfo[knp]}"
key[ShiftTab]="${terminfo[kcbt]}"
# setup key accordingly
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history
[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char
[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history
[[ -n "${key[ShiftTab]}" ]] && bindkey -- "${key[ShiftTab]}" reverse-menu-complete
# Finally, make sure the terminal is in application mode, when zle is
# active. Only then are the values from $terminfo valid.
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
autoload -Uz add-zle-hook-widget
function zle_application_mode_start { echoti smkx }
function zle_application_mode_stop { echoti rmkx }
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
fi
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search
# By default, Ctrl+d will not close your shell if the command line is filled, this fixes it:
exit_zsh() { exit }
zle -N exit_zsh
bindkey '^D' exit_zsh
autoload -U edit-command-line
zle -N edit-command-line
bindkey '\C-x\C-e' edit-command-line
bindkey -M viins jj vi-cmd-mode

@ -1,7 +1,11 @@
# This is the config I use for Powerlevel9k
#source "$HOME/.dotfiles/shells/zsh/plugins/powerlevel9k/powerlevel9k.zsh-theme"
# Custom dir command
function my_dir(){
prompt_dir(){
homeIcon=""
wpPluginsIcon=".p."
wpThemesIcon=".t."
@ -72,38 +76,21 @@ function my_dir(){
current_path=$(echo $current_path | sed -r -e "s/$seperator\$//g")
echo $current_path
}
POWERLEVEL9K_CUSTOM_DIR="my_dir"
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
POWERLEVEL9K_CUSTOM_DIR_BACKGROUND="green"
POWERLEVEL9K_CUSTOM_DIR_FOREGROUND="black"
else
POWERLEVEL9K_CUSTOM_DIR_BACKGROUND="blue"
POWERLEVEL9K_CUSTOM_DIR_FOREGROUND="black"
fi
# POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR="\ue0c0"
# POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR="\ue0c2"
function Capslock(){
x=$(xset -q | grep Caps) 2> /dev/null || exit 0
x=${x:22:1}
if [[ $x == "n" ]]; then
echo ""
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
echo "green"
else
echo "blue"
fi
}
POWERLEVEL9K_CUSTOM_CAPS="Capslock"
POWERLEVEL9K_CUSTOM_CAPS_BACKGROUND="red"
POWERLEVEL9K_CUSTOM_CAPS_FOREGROUND="white"
echo "black"
}
function prompt_project() {
local segment_content state icon
# Prints the current project and a recording symbol if appropriate
local parent_process="$(ps -ocommand -p $PPID | grep -v 'COMMAND' | cut -d' ' -f1)"
local current_project_full="$(project current --path)"
local current_project_name="$(project current)"
local background=""
if [[ "$parent_process" == "/usr/bin/script" ]]; then
segment_content="辶"
fi
@ -112,29 +99,134 @@ function prompt_project() {
segment_content="${segment_content}$current_project_name"
# If in the current project
if echo "$PWD" | grep -q "$current_project_full"; then
state="INSIDE"
background="green"
elif echo "$PWD" | grep -q "$HOME/Projects/"; then
state="WRONG"
background="red"
else
state="OUTSIDE"
background="yellow"
fi
fi
if [ -n "$segment_content" ]; then
"$1_prompt_segment" "${0}_${state}" "$2" $DEFAULT_COLOR_INVERTED $DEFAULT_COLOR "$segment_content" "$icon"
echo "$state$segment_content"
echo "$background"
echo "black"
}
prompt_git(){
local branch="$(git branch --show-current 2> /dev/null)"
local color="green"
local ret=""
if [ -n "branch" ]; then
ret="$branch"
local repoTopLevel="$(command git rev-parse --show-toplevel 2> /dev/null)"
local untrackedFiles=$(command git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)
local staged=$(command git diff --staged --name-only 2> /dev/null)
if [ -n "$untrackedFiles" ]; then
ret="$ret "
color="orange1"
fi
if [ -n "$staged" ]; then
ret="$ret "
color="orange1"
fi
fi
echo "$ret"
echo "$color"
}
prompt_last_exit_code() {
local LAST_EXIT_CODE="$1"
if [[ $LAST_EXIT_CODE -ne 0 ]]; then
local EXIT_CODE_PROMPT=' '
EXIT_CODE_PROMPT+="%{$fg[red]%}-%{$reset_color%}"
EXIT_CODE_PROMPT+="%{$fg_bold[red]%}$LAST_EXIT_CODE%{$reset_color%}"
EXIT_CODE_PROMPT+="%{$fg[red]%}-%{$reset_color%}"
echo "$EXIT_CODE_PROMPT"
fi
}
POWERLEVEL9K_PROJECT_DEFAULT_FOREGROUND="black"
POWERLEVEL9K_PROJECT_WRONG_BACKGROUND="red"
POWERLEVEL9K_PROJECT_OUTSIDE_BACKGROUND="yellow"
POWERLEVEL9K_PROJECT_INSIDE_BACKGROUND="green"
# Draws a seperator
# Takes 2 arguments, from color then to color
# If only 1 given, assumes it is the last
seperator(){
local from="$1"
local to="$2"
local sep=""
if [ -z "$to" ]; then
resetColor
else
focusBackgroundColor "$to"
fi
focusForegroundColor "$from"
echo -n "$sep"
resetColor
}
# Left Prompt
if [[ "$(basename "/"$(ps -f -p $(cat /proc/$(echo $$)/stat | cut -d \ -f 4) | tail -1 | sed 's/^.* //'))" != "$(echo $USER)" ]]; then
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(project custom_dir vcs custom_caps)
fi
draw_segment(){
# Echoes a segment
# $1 is the command to be run to print the segment
# $2 is the color of the last segment (if empty, no seperator is added)
# Returns segment on line 1
# returns background color on line 2
local output="$($1)"
local contents="$(echo "$output" | sed -n '1p')"
local previousBackground="$2"
local background=""
local foreground=""
local ret=""
if [ -n "$contents" ]; then
background="$(echo "$output" | sed -n '2p')"
foreground="$(echo "$output" | sed -n '3p')"
if [ -n "$previousBackground" ]; then
ret=" $(seperator $previousBackground $background)"
fi
ret="$ret$(focusBackgroundColor $background) $(focusForegroundColor $foreground)$contents"
echo "$ret"
echo "$background"
fi
}
set_prompts(){
# Get the return status of the previous command
local RETVAL=$?
#Set background to nothing at the start of the prompt
local background=""
local foreground=""
#Set the prompt to an empty string
PROMPT=""
###### Each segment printed here
# Project
segment="$(draw_segment "prompt_project" "$background")"
if [ -n "$(echo "$segment" | sed -n '1p')" ];then
PROMPT="$PROMPT$(echo "$segment" | sed -n '1p')"
background="$(echo "$segment" | sed -n '2p')"
fi
# Directory
segment="$(draw_segment "prompt_dir" "$background")"
if [ -n "$(echo "$segment" | sed -n '1p')" ];then
PROMPT="$PROMPT$(echo "$segment" | sed -n '1p')"
background="$(echo "$segment" | sed -n '2p')"
fi
# Git
segment="$(draw_segment "prompt_git" "$background")"
if [ -n "$(echo "$segment" | sed -n '1p')" ];then
PROMPT="$PROMPT$(echo "$segment" | sed -n '1p')"
background="$(echo "$segment" | sed -n '2p')"
fi
PROMPT="$PROMPT $(seperator "$background")$(resetColor)"
#$(resetColor)
RPROMPT="$(resetColor)$(prompt_last_exit_code "$RETVAL")$(resetColor)"
}
zle -N set_prompts
autoload -U add-zsh-hook
add-zsh-hook precmd set_prompts
# Right Prompt
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator)

Loading…
Cancel
Save