summaryrefslogtreecommitdiff
path: root/.config/shell/.zshrc
blob: a5fd916b0faf3123d049a46ee11aac2bb54a1a7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# personal QOL functions
source_if_exists() {
    [ -f "$1" ] && source "$1"
}

ensure_directory_and_file() {
    [ ! -d "$1" ] && mkdir -p "$1"
    [ ! -f "$2" ] && touch "$2"
}

setopt prompt_subst
source_if_exists ~/.config/shell/git-prompt.zsh
source_if_exists ~/.config/shell/git-prompts/kj_sh604.zsh
source_if_exists ~/.config/shell/zsh-autosuggestions/zsh-autosuggestions.zsh
source_if_exists ~/.config/shell/zsh-fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh
source_if_exists ~/.config/shell/zsh-history-substring-search/zsh-history-substring-search.zsh
source_if_exists ~/.config/shell/zsh-abbr/zsh-job-queue/zsh-job-queue.zsh
source_if_exists ~/.config/shell/zsh-abbr/zsh-abbr.zsh

# source personal posix functions
source_if_exists ~/.config/shell/posix-functions/create_POSIX_dotenv.sh
source_if_exists ~/.config/shell/posix-functions/POSIX_open.sh

ensure_directory_and_file ~/.local/state/shell ~/.local/state/shell/zsh_history

# configure history settings
HISTFILE=~/.local/state/shell/zsh_history
HISTSIZE=9999999
SAVEHIST=9999999

# aliases
    # conditionally alias alternative applications/flags if available
    command which eza >/dev/null 2>&1 && alias ls="eza"
    command which alsi >/dev/null 2>&1 && alias neofetch="alsi"
    command grep --color=auto --version >/dev/null 2>&1 && alias grep='grep --color=auto'

    # personal abbreviations
        abbr -S --quiet S="cd ~/.local/bin && ls"
        abbr -S --quiet d="disown"
        abbr -S --quiet dots="cd ~/.local/share/.dotfiles/"
        abbr -S --quiet ks="killall screen"
        abbr -S --quiet la='ls -lah'
        abbr -S --quiet lgit="lazygit"
        abbr -S --quiet p="paru"
        abbr -S --quiet pu="paru -Syu --noconfirm"
        abbr -S --quiet s="screen"
        abbr -S --quiet sls="screen -ls"
        abbr -S --quiet sr="screen -r"
        abbr -S --quiet t="timedatectl"
        abbr -S --quiet uncommit="git reset --soft HEAD^"
        abbr -S --quiet x="startx"
        abbr -S --quiet yt-best="youtube-dl -cif 'bestvideo+bestaudio/best'"
        abbr -S --quiet yt-m4a="youtube-dl -cif 'bestaudio[ext=m4a]'"
        abbr -S --quiet yt-mp4="youtube-dl -cif 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'"
        abbr -S --quiet yt-mpv="mpv --ytdl-format= '' & disown"
        abbr -S --quiet yt-webm="youtube-dl -cif 'bestvideo[ext=webm]+bestaudio[ext=webm]/best[ext=webm]/best'"

# pfetch stuff 
export PF_INFO="ascii title os kernel uptime pkgs memory"

# initiate the prompt configuration with color support
autoload -Uz colors && colors

# load auto/tab completion and include hidden files
autoload -Uz compinit
zstyle ':completion:*' menu select
zmodload zsh/complist
compinit
_comp_options+=(globdots)

# opt-in for automatic directory navigation and disallow terminal freeze via ctrl-s 
setopt AUTO_CD NO_FLOW_CONTROL
setopt INTERACTIVE_COMMENTS

# enable vi mode and setup keys for tab completion
bindkey -v
export KEYTIMEOUT=1
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

# edit line in vim with ctrl-x ctrl-e or ctrl-x e
autoload edit-command-line; zle -N edit-command-line
bindkey '^x^e' edit-command-line
bindkey '^xe' edit-command-line
bindkey -M vicmd '^[[P' vi-delete-char
bindkey -M vicmd '^x^e' edit-command-line
bindkey -M vicmd '^xe' edit-command-line
bindkey -M visual '^[[P' vi-delete

# cursor shape settings for vi modes
function zle-keymap-select() {
    case $KEYMAP in
        vicmd)
            print -n '\e[2 q'
            ;;
        viins|main)
            print -n '\e[6 q'
            ;;
    esac
}
zle -N zle-keymap-select

zle-line-init() {
    zle -K viins
    print -n "\e[6 q"
}
zle -N zle-line-init
print -n '\e[6 q'

# disable blinking cursor after each command execution
function disable_blinking_cursor() {
    print -n '\e[0 q'
}
precmd_functions+=(disable_blinking_cursor)
disable_blinking_cursor

# less termcap variables (for colored man pages)
export LESS_TERMCAP_mb=$'\e[1;32m'
export LESS_TERMCAP_md=$'\e[1;32m'
export LESS_TERMCAP_me=$'\e[0m'
export LESS_TERMCAP_se=$'\e[0m'
export LESS_TERMCAP_so=$'\e[01;31m'
export LESS_TERMCAP_ue=$'\e[0m'
export LESS_TERMCAP_us=$'\e[1;4;33m'

bindkey "^f" forward-word
bindkey "^b" backward-word
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
bindkey -M vicmd "k" history-substring-search-up
bindkey -M vicmd "j" history-substring-search-down