diff options
| author | Syndamia <kamen@syndamia.com> | 2024-03-01 06:09:12 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2024-03-01 06:09:12 +0200 |
| commit | a94453cde8c57625f3878f7da069cd35c40844c3 (patch) | |
| tree | 4a84a5284d50ece77bbf060c20991d2b0f34a88e /.zsh | |
| parent | 699037c2cc90e0fb4abe570442fb489f808b6434 (diff) | |
| download | dotfiles-a94453cde8c57625f3878f7da069cd35c40844c3.tar dotfiles-a94453cde8c57625f3878f7da069cd35c40844c3.tar.gz dotfiles-a94453cde8c57625f3878f7da069cd35c40844c3.zip | |
[.zshrc] Reworked structure
Diffstat (limited to '.zsh')
| -rw-r--r-- | .zsh/.zshrc | 616 |
1 files changed, 294 insertions, 322 deletions
diff --git a/.zsh/.zshrc b/.zsh/.zshrc index ea9821b..0292ea1 100644 --- a/.zsh/.zshrc +++ b/.zsh/.zshrc @@ -1,338 +1,310 @@ device='desktop' # can be either "desktop" (default when empty), "server" or "android" -# General {{{ - # Exports {{{ - export PATH=$HOME/bin:/usr/local/bin:$PATH # Adds ~/bin and /usr/local/bin paths to PATH - export PATH="$PATH:$HOME/.npm-global/bin" # Adds ~/.npm-global/bin path to PATH - export PATH="$PATH:$HOME/go/bin" # Adds ~/go/bin to PATH - export PATH="$PATH:/sbin" - export FPATH="$FPATH:$HOME/.zsh/completion" - - # export LANG=en_US.UTF-8 # You may need to manually set your language environment - - if [[ -n $SSH_CONNECTION ]]; then # Preferred editor for local - export EDITOR='vim' - else # and remote - export EDITOR='vim' - fi - # }}} - - # Theme {{{ - ZSH_THEME="gruvbox" - SOLARIZED_THEME="dark" - # }}} - - # Completion {{{ - # CASE_SENSITIVE="true" # case-sensitive completion - # HYPHEN_INSENSITIVE="true" # hyphen-insensitive completion (case_sensitive must be false) - # }}} - - # Updates {{{ - # DISABLE_AUTO_UPDATE="true" # disable bi-weekly auto-update checks - # DISABLE_UPDATE_PROMPT="true" # update without prompting - # export UPDATE_ZSH_DAYS=13 # how often to auto-update (in days) - # DISABLE_MAGIC_FUNCTIONS="true" # uncomment if pasting URLs and other text is messed up - # ENABLE_CORRECTION="true" # command auto-correction - # COMPLETION_WAITING_DOTS="true" # display red dots while waiting for completion - # DISABLE_UNTRACKED_FILES_DIRTY="true" # disable marking untracked files under VCS as dirty; improves status check for large repos - # }}} - - # setopt and autoload {{{ - stty -F/dev/tty -ixon -ixoff # Disables Software Flow Control - setopt long_list_jobs - - # Changing/making/removing directory - setopt auto_pushd - setopt pushd_ignore_dups - setopt pushdminus - - # recognize comments - setopt interactivecomments - - # don't backward-kill-word on forward slash - autoload -U select-word-style - select-word-style bash - - # autoloads completion files - # Note: remove all ~/.zcompdump files in case something doesn't autoload - autoload -U compinit - compinit - # }}} -# }}} - -# Plugins {{{ - # omz plugins {{{ - source ~/.zsh/omz/history.zsh - source ~/.zsh/omz/termsupport.zsh - source ~/.zsh/omz/key-bindings.zsh - source ~/.zsh/omz/compfix.zsh - # }}} - - # zsh-syntax-highlighting {{{ - source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh - # }}} - - # Homelander {{{ - source ~/.zsh/homelander/homelander.zsh - source ~/.zsh/homelander/homelander-sections.zsh - - if [ "$USER" = 'kamen' ]; then - export PROMPT='$(hl_exitpwd)$(hl_cecho_caps $(hl_user) ) $(hl_cecho $(hl_precursor)) ' - HL_USER_T='%D{%H:%M}' - else - export PROMPT='$(hl_exitpwd)$(hl_cecho_caps $(hl_user) ) $(hl_cecho $(hl_time)) $(hl_cecho $(hl_precursor)) ' - fi - export RPROMPT='$(hl_duration)' - - hl_hooks() { - hl_time_async - hl_precursor_async - } - - # Custom section - hl_exitpwd() { - local __bg=$([ -n "$SSH_TTY" ] && echo $HL_USER_SSH || echo $HL_USER_BG) - - line=(' |' ' ' ']\n' '\n' '\b' '\b' 0) - [ "$_exit_code" -ne 0 ] && line+=(o $HL_EXIT_FG ' %? ') - [ "$_print_directory" -ne 0 ] && line+=(o $__bg ' %d ') - - [ ${#line} -gt 7 ] && hl_concatsec $line - } - hl_duration() { - local __dur=($(hl_exec_duration)) - - [ "${#__dur}" -gt 0 ] && hl_cecho_caps o 140 " ${__dur[*]:2} " \ - || true - } - # }}} -# }}} - -# Functions {{{ - # Funtoo updates {{{ - pre-sync() { - echo '(.zshrc) Running pre-sync function...' - - # Since in post-sync I change the EAPI of a lot of the ebuilds, - # the overlay can't be synced properly - _pwd=$(pwd) - cd /var/db/repos/gentoo - sudo git reset --hard - cd $_pwd - - echo '(.zshrc) pre-sync finished! :}' - } - - post-sync() { - echo '(.zshrc) Running post-sync function...' - - # Fixes the elusive - # "!!! Repository name or alias 'gentoo', defined for repository 'core-kit', overrides existing alias or repository." - # error when enabling gentoo overlay - sudo sed -i 's/aliases = gentoo/#aliases = gentoo/g' /var/git/meta-repo/kits/core-kit/metadata/layout.conf - - # In the gentoo overlay, most packages don't actually use EAPI 8 specific features, so - # they can safely be rolled back to EAPI 7 (funtoo's portage doesn't support EAPI 8 yet). - # However, there are still some that do need EAPI 8, so they should be left alone. - # Since I'm incredibly lazy, for now, this is how I'm gonna do it. - find '/var/db/repos/gentoo' -type f -name "*.ebuild" ! -path "*dev-qt*" ! -path "*kde-frameworks*" ! -path "*kde-plasma*" \ - | xargs sudo sed -i 's/EAPI=8/EAPI=7/g' - - echo '(.zshrc) post-sync finished! :]' - } - - alias sen="pre-sync && sudo ego sync && post-sync && sudo emerge --quiet-build -vuDN @world" - # }}} - - # cdrepo {{{ - cdrepo () { - [ -n "$2" ] && cd "$HOME/Programming/$1/$2" \ - || cd "$HOME/Programming/$1" - } - - alias cdg="cdrepo GitHub-repos" - alias cdl="cdrepo GitLab-repos" - alias cds="cdrepo source" - # }}} - - # plumb.sh {{{ - - plumb-store-cwd () { - pwd > /tmp/plumb-cwd +# +# Environment variables +# + +export PATH=$HOME/bin:/usr/local/bin:$PATH # Adds ~/bin and /usr/local/bin paths to PATH +export PATH="$PATH:$HOME/.npm-global/bin" # Adds ~/.npm-global/bin path to PATH +export PATH="$PATH:$HOME/go/bin" # Adds ~/go/bin to PATH +export PATH="$PATH:/sbin" +export FPATH="$FPATH:$HOME/.zsh/completion" + +export EDITOR='vim' + +# +# Options +# + +stty -F/dev/tty -ixon -ixoff # Disables Software Flow Control +setopt long_list_jobs + +# Changing/making/removing directory +setopt auto_pushd +setopt pushd_ignore_dups +setopt pushdminus + +# recognize comments +setopt interactivecomments + +# don't backward-kill-word on forward slash +autoload -U select-word-style +select-word-style bash + +# enable (new?) zsh completion system +# Thanks https://github.com/reo101/dotfiles/blob/master/home/private_dot_config/private_zsh/private_dot_zshrc +zdumppath="$HOME/.zsh/zcompdump" +autoload -U compinit +# Cache completion if nothing changed - faster startup time +typeset -i updated_at=$(date +'%j' -r "$zdumppath" 2>/dev/null || stat -f '%Sm' -t '%j' "$zdumppath" 2>/dev/null) +if [ $(date +'%j') != ${updated_at} ]; then + compinit -d "$zdumppath" -i +else + compinit -d "$zdumppath" -C -i +fi + +# +# Binds +# + +bindkey '^H' backward-kill-word + +# +# Theme +# + +ZSH_THEME="gruvbox" +SOLARIZED_THEME="dark" + +source ~/.zsh/homelander/homelander.zsh +source ~/.zsh/homelander/homelander-sections.zsh + +if [ "$USER" = 'kamen' ]; then + export PROMPT='$(hl_exitpwd)$(hl_cecho_caps $(hl_user) ) $(hl_cecho $(hl_precursor)) ' + HL_USER_T='%D{%H:%M}' +else + export PROMPT='$(hl_exitpwd)$(hl_cecho_caps $(hl_user) ) $(hl_cecho $(hl_time)) $(hl_cecho $(hl_precursor)) ' +fi +export RPROMPT='$(hl_duration)' +[ "$NIX_SHELL" = 'y' ] && HL_USER_BG=202 + +hl_hooks() { + hl_time_async + hl_precursor_async +} + +# Custom section +hl_exitpwd() { + __bg=$([ -n "$SSH_TTY" ] && echo $HL_USER_SSH || echo $HL_USER_BG) + + line=(' |' ' ' ']\n' '\n' '\b' '\b' 0) + [ "$_exit_code" -ne 0 ] && line+=(o $HL_EXIT_FG ' %? ') + [ "$_print_directory" -ne 0 ] && line+=(o $__bg ' %d ') + + [ ${#line} -gt 7 ] && hl_concatsec $line +} +hl_duration() { + local __dur=($(hl_exec_duration)) + + [ "${#__dur}" -gt 0 ] && hl_cecho_caps o 140 " ${__dur[*]:2} " \ + || true +} + +# +# Plugins +# + +source ~/.zsh/omz/history.zsh +source ~/.zsh/omz/termsupport.zsh +source ~/.zsh/omz/key-bindings.zsh +source ~/.zsh/omz/compfix.zsh + +source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + +# +# Custom functions +# + +if [ -n "$ZSHRC_FUNTOO" ] +then + pre-sync() { + echo '(.zshrc) Running pre-sync function...' + + # Since in post-sync I change the EAPI of a lot of the ebuilds, + # the overlay can't be synced properly + _pwd=$(pwd) + cd /var/db/repos/gentoo + sudo git reset --hard + cd $_pwd + + echo '(.zshrc) pre-sync finished! :}' } - zle -N plumb-store-cwd - bindkey "^[[5;7~" plumb-store-cwd - # }}} + post-sync() { + echo '(.zshrc) Running post-sync function...' - # Run in the background - bgr () { - nohup sh -c "$@" 2>&1 & - disown - } - - # Kill process and run in the background - res () { - pkill $@ - bgr $@ + # Fixes the elusive + # "!!! Repository name or alias 'gentoo', defined for repository 'core-kit', overrides existing alias or repository." + # error when enabling gentoo overlay + sudo sed -i 's/aliases = gentoo/#aliases = gentoo/g' /var/git/meta-repo/kits/core-kit/metadata/layout.conf + + # In the gentoo overlay, most packages don't actually use EAPI 8 specific features, so + # they can safely be rolled back to EAPI 7 (funtoo's portage doesn't support EAPI 8 yet). + # However, there are still some that do need EAPI 8, so they should be left alone. + # Since I'm incredibly lazy, for now, this is how I'm gonna do it. + find '/var/db/repos/gentoo' -type f -name "*.ebuild" ! -path "*dev-qt*" ! -path "*kde-frameworks*" ! -path "*kde-plasma*" \ + | xargs sudo sed -i 's/EAPI=8/EAPI=7/g' + + echo '(.zshrc) post-sync finished! :]' } - - if [[ $device == "desktop" ]]; then - - if [[ -x "$(command -v vim)" ]]; then - # Open vim with .vim-session file, if it exists and the vim command doesn't have any parameters - v () { - if [ -f ".vim-session" ] && [ -z "$1" ]; then - vim -S .vim-session - else - vim $@ - fi - } - fi - - if [[ -x "$(command -v grit)" ]]; then - # Add to grit parent, where first value is parent number and everything else is node value - grap () { - parent="$1" - shift - grit add -p $parent -- $@ - } - fi - - if [[ -x "$(command -v nemo)" ]]; then - onemo() { - bgr "nemo ./" - } - fi - - # Launch .desktop application (either full path or just name) - dela () { - name=$1 - if [[ ${name:0:1} != "/" ]]; then - name="/usr/share/applications/${name}" - fi - if [[ ! $name =~ .desktop$ ]]; then - name+=".desktop" - fi - comm=($(awk -F= '$1=="Exec"{$1=""; print}' "$name")) - bgr "$comm" - } - - metas() { - for file in *; do - [ "$file" != 'cover.jpeg' ] && \ - kid3-cli -c "set title \"$(echo "$file" | sed -e "s/\.[^.]*$//")\"" \ - -c "set artist \"$1\"" -c "set album \"$2\"" -c "set date \"$3\"" \ - -c 'set picture:"./cover.jpeg" ""' "$file" \ - || : - done - } - fi -# }}} - -# Aliases {{{ - # portage {{{ - if [[ -x "$(command -v emerge)" ]]; then - alias seq="sudo emerge --quiet-build -v" - alias sep="sudo emerge -pv" - alias ses="sudo emerge -s" - alias seS="sudo emerge -S" - alias senc="sudo emaint sync -A" - alias sen="sudo emaint sync -A && sudo emerge --quiet-build -vuDN @world" - alias senp="sudo emaint sync -A && sudo emerge --quiet-build -pvuDN @world" - alias seN="sudo emerge --quiet-build -vuDN @world" - alias seNp="sudo emerge --quiet-build -pvuDN @world" - sedi() { - sudo emerge --deselect "$1" && sudo emerge --depclean "$1" - } - - alias use="sudo vim /etc/portage/package.use" - alias unmask="sudo vim /etc/portage/package.unmask" - alias mask="sudo vim /etc/portage/package.mask" - fi - # }}} - - # dnf {{{ - if [[ -x "$(command -v dnf)" ]]; then - alias sdi="sudo dnf install -y" - alias sdr="sudo dnf remove -y" - alias sda="sudo dnf autoremove -y" - # If you're using dotnet from the "packages-microsoft-com-prod" repo, make sure to - # add "exclude=dotnet* aspnetcore* netstandard*" inside the /etc/yum.repos.d/fedora.repo, /etc/yum.repos.d/fedora-updates.repo and potentially /etc/yum.repos.d/fedora33.repo - alias sdu="sudo dnf upgrade -y && sudo dnf autoremove -y && sudo youtube-dl --update && wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash && needs-restarting -r" - - alias ds="dnf search" - alias dcs="dnf copr search" - alias dp="dnf provides" - alias di="dnf info" - - alias sdce="sudo dnf copr enable -y" - alias sdcei='f() { sudo dnf copr enable -y $1 && sudo dnf install -y $2; unset -f f }; f' - fi - # }}} - - # apt {{{ - if [[ -x "$(command -v apt-get)" ]]; then - alias sasy="sudo apt install -y" - alias sary="sudo apt remove -y" - alias saty="sudo apt autoremove -y" - alias sagt="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo youtube-dl --update && wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash" - fi - # }}} - - # General commands {{{ - - alias q="exit" - alias x="exit" - - if [[ -x "$(command -v exa)" ]]; then - alias ll="exa --icons --group-directories-first --git --time-style long-iso -a -labh" - alias lk="exa --icons --group-directories-first --git --time-style long-iso -labhTL" - alias l.="exa --icons --group-directories-first --git --time-style long-iso -labhTL 2" - alias l="exa --icons --group-directories-first --time-style long-iso -abh" + alias sen="pre-sync && sudo ego sync && post-sync && sudo emerge --quiet-build -vuDN @world" +fi + +# plumb.sh +plumb-store-cwd () { + pwd > /tmp/plumb-cwd +} +zle -N plumb-store-cwd +bindkey "^[[5;7~" plumb-store-cwd + +# Run in the background +bgr() { + nohup sh -c "$@" 2>&1 & + disown +} + +# Kill process and run in the background +res() { + pkill $@ + bgr $@ +} + +# Open vim with .vim-session file, if it exists and the vim command doesn't have any parameters +v() { + if [ -f ".vim-session" ] && [ -z "$1" ]; then + vim -S .vim-session else - alias ll="la -alF" - alias la="ls -A" - alias l="ls -CF" + vim $@ fi - - if [[ $device != "server" ]]; then - else - alias wudo="sudo -u www-data" - +} + +# Add to grit parent, where first value is parent number and everything else is node value +grap() { + parent="$1" + shift + grit add -p $parent -- $@ +} + +onemo() { + bgr "nemo ./" +} + +# Launch .desktop application (either full path or just name) +dela() { + name=$1 + if [[ ${name:0:1} != "/" ]]; then + name="/usr/share/applications/${name}" fi - # }}} - - # Application specific {{{ - if [[ $device != "server" ]]; then - - alias combinepdf="gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=temp.pdf" - - alias lg="lazygit" - - alias ydl="youtube-dl -o '%(title)s.%(ext)s'" - alias ydlba="youtube-dl -o '%(title)s.%(ext)s' --audio-format best -x" - - alias gr="grit" - alias gra="grit add --" - alias grc="grit check" - alias grls="grit tree" - - alias sdudiscord="wget -O discord.tar.gz \"https://discord.com/api/download?platform=linux&format=tar.gz\" && tar -xzf discord.tar.gz && sudo rm -rf /opt/Discord && sudo mv Discord /opt" - + if [[ ! $name =~ .desktop$ ]]; then + name+=".desktop" fi - # }}} -# }}} - -# Binds {{{ - bindkey '^H' backward-kill-word -# }}} - -# Execute on startup {{{ -#}}} + comm=($(awk -F= '$1=="Exec"{$1=""; print}' "$name")) + bgr "$comm" +} + +metas() { + for file in *; do + [ "$file" != 'cover.jpeg' ] && \ + kid3-cli -c "set title \"$(echo "$file" | sed -e "s/\.[^.]*$//")\"" \ + -c "set artist \"$1\"" -c "set album \"$2\"" -c "set date \"$3\"" \ + -c 'set picture:"./cover.jpeg" ""' "$file" \ + || : + done +} + +# +# Aliases +# + +if [ -x "$(command -v emerge)" ] +then + alias seq="sudo emerge --quiet-build -v" + alias sep="sudo emerge -pv" + alias ses="sudo emerge -s" + alias seS="sudo emerge -S" + alias senc="sudo emaint sync -A" + alias sen="sudo emaint sync -A && sudo emerge --quiet-build -vuDN @world" + alias senp="sudo emaint sync -A && sudo emerge --quiet-build -pvuDN @world" + alias seN="sudo emerge --quiet-build -vuDN @world" + alias seNp="sudo emerge --quiet-build -pvuDN @world" + sedi() { + sudo emerge --deselect "$1" && sudo emerge --depclean "$1" + } + alias use="sudo vim /etc/portage/package.use" + alias unmask="sudo vim /etc/portage/package.unmask" + alias mask="sudo vim /etc/portage/package.mask" +fi + +if [ -x "$(command -v dnf)" ] +then + alias sdi="sudo dnf install -y" + alias sdr="sudo dnf remove -y" + alias sda="sudo dnf autoremove -y" + # If you're using dotnet from the "packages-microsoft-com-prod" repo, make sure to + # add "exclude=dotnet* aspnetcore* netstandard*" inside the /etc/yum.repos.d/fedora.repo, /etc/yum.repos.d/fedora-updates.repo and potentially /etc/yum.repos.d/fedora33.repo + alias sdu="sudo dnf upgrade -y && sudo dnf autoremove -y && sudo youtube-dl --update && wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash && needs-restarting -r" + alias sdudiscord="wget -O discord.tar.gz \"https://discord.com/api/download?platform=linux&format=tar.gz\" && tar -xzf discord.tar.gz && sudo rm -rf /opt/Discord && sudo mv Discord /opt" + + alias ds="dnf search" + alias dcs="dnf copr search" + alias dp="dnf provides" + alias di="dnf info" + + alias sdce="sudo dnf copr enable -y" + alias sdcei='f() { sudo dnf copr enable -y $1 && sudo dnf install -y $2; unset -f f }; f' +fi + +if [ -x "$(command -v apt-get)" ]; then + alias sasy="sudo apt install -y" + alias sary="sudo apt remove -y" + alias saty="sudo apt autoremove -y" + alias sagt="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo youtube-dl --update && wget -O - https://raw.githubusercontent.com/laurent22/joplin/master/Joplin_install_and_update.sh | bash" +fi + +if [ -x "$(command -v exa)" ] +then + alias ll="exa --icons --group-directories-first --git --time-style long-iso -a -labh" + alias lk="exa --icons --group-directories-first --git --time-style long-iso -labhTL" + alias l.="exa --icons --group-directories-first --git --time-style long-iso -labhTL 2" + alias l="exa --icons --group-directories-first --time-style long-iso -abh" +else + alias ll="la -alF" + alias la="ls -A" + alias l="ls -CF" +fi + +if [ -x "$(command -v grit)" ] +then + alias gr="grit" + alias gra="grit add --" + alias grc="grit check" + alias grls="grit tree" +fi + +if [ -x "$(command -v youtube-dl)" ] +then + alias ydl="youtube-dl -o '%(title)s.%(ext)s'" + alias ydlba="youtube-dl -o '%(title)s.%(ext)s' --audio-format best -x" +fi + +if [ -x "$(command -v combinepdf)" ] +then + alias lg="lazygit" +fi + +if [ -x "$(command -v gs)" ] +then + alias combinepdf="gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=temp.pdf" +fi + +cdrepo () { + [ -n "$2" ] && cd "$HOME/Programming/$1/$2" \ + || cd "$HOME/Programming/$1" +} +alias cdg="cdrepo GitHub-repos" +alias cdl="cdrepo GitLab-repos" +alias cds="cdrepo source" + +alias wudo="sudo -u www-data" + +alias q="exit" +alias x="exit" + +# # Added by scripts: +# export PATH="/home/kamen/bin/Sencha/Cmd:$PATH" |
