From 6380affb6f8084f49ff2029d875c6e668701870e Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sun, 2 Feb 2020 15:08:40 +0000 Subject: [PATCH] Add basic XDG compliant sh architecture The only file left in $HOME is .zshenv, which sets up zsh to source everything from XDG_CONFIG_HOME/zsh. Shell files are split into sh and zsh directories, for global assignments (which should be posix compliant, work on any posix shell) like environemnt variables, xdg vars, and global aliases. zsh contains zsh specific customization (prompt customization, plugin loading, zsh completions). Zsh initialization will pull from sh directory first, loading the respective mirror to its startup file (`.zprofile` loads `sh/profile` and `profile.d/*`, `.zshenv` loads `sh/env` and `sh/env.d/*` and `zsh/env.d/*`, `.zshrc` loads `sh/alias`, `sh/alias.d/*` and `zsh/alias.d/*`) Once all is done, it will have loaded both global variables, aliases and settings, and zsh-only specifications. Other stow modules, if they want to add shell functionality, can include their aliases and functions in one of the above directories to automatically be picked up by zsh. --- .gitignore | 50 +- git/.config/git/config | 3 + home/.zprofile | 12 - home/.zshenv | 6 + home/.zshrc | 19 - sh/.config/sh/alias | 112 ++ .../.config/sh/alias.d}/enable-fasd-hook.sh | 0 .../alias.d}/ssh-agent-autoconfiguration.sh | 0 sh/.config/sh/env | 44 + sh/.config/sh/profile | 18 + .../.config/sh/profile.d}/autostartx.sh | 2 +- sh/.config/sh/xdg | 33 + shell/.config/shell/login.d/env-vars.sh | 16 - shell/.config/shell/login.d/env-xdg.sh | 8 - shell/.config/shell/login.d/go-path.sh | 4 - shell/.config/shell/login.d/local-bin-path.sh | 5 - .../shell/login.d/test/env-wiki-root.bats | 65 - shell/.config/shell/rc.d/alias-base.sh | 37 - .../.config/shell/rc.d/alias-fuzzy-finding.sh | 83 -- shell/.config/shell/rc.d/alias-nvim-to-vim.sh | 4 - shell/.config/shell/rc.d/alias-pywal.sh | 8 - shell/.config/shell/rc.d/alias-vifm-to-vm.sh | 10 - shell/.config/shell/rc.d/enable-pywal.sh | 6 - shell/.config/shell/rc.d/locale-utf-8.sh | 4 - .../.config/shell/rc.d/test/locale-utf-8.bats | 15 - shell/.config/shell/zshrc.d/0-history.zsh | 28 - .../shell/zshrc.d/0-inline-glob-expansion.zsh | 16 - shell/.config/shell/zshrc.d/0-plugins.zsh | 123 -- .../zshrc.d/0-screen-information-dialog.zsh | 12 - .../1-enable-command-spelling-correction.zsh | 12 - ...report-time-for-long-running-processes.zsh | 5 - .../zshrc.d/1-set-up-powerlevel9k-theming.zsh | 42 - .../zshrc.d/5-install-tmux-plugin-manager.zsh | 20 - shell/.config/shell/zshrc.d/6-alias-exa.zsh | 8 - shell/.config/shell/zshrc.d/6-mkcd.zsh | 5 - .../.config/shell/zshrc.d/6-newest-files.zsh | 10 - .../shell/zshrc.d/6-ssht-tmux-attaching.zsh | 6 - .../zshrc.d/9-configure-autocompletion.zsh | 16 - .../zshrc.d/9-deduplicate-path-variable.zsh | 22 - .../9-disable-enhancd-dot-dot-behavior.zsh | 5 - xdg-user-dirs/.config/user-dirs.dirs | 7 +- zsh/.config/zsh/.p10k._zsh | 1199 +++++++++++++++++ zsh/.config/zsh/.zprofile | 19 + zsh/.config/zsh/.zshenv | 20 + zsh/.config/zsh/.zshrc | 125 ++ zsh/.config/zsh/plugins.zsh | 70 + 46 files changed, 1657 insertions(+), 677 deletions(-) delete mode 100644 home/.zprofile create mode 100644 home/.zshenv delete mode 100644 home/.zshrc create mode 100644 sh/.config/sh/alias rename {shell/.config/shell/rc.d => sh/.config/sh/alias.d}/enable-fasd-hook.sh (100%) rename {shell/.config/shell/rc.d => sh/.config/sh/alias.d}/ssh-agent-autoconfiguration.sh (100%) create mode 100644 sh/.config/sh/env create mode 100644 sh/.config/sh/profile rename {shell/.config/shell/rc.d => sh/.config/sh/profile.d}/autostartx.sh (85%) create mode 100644 sh/.config/sh/xdg delete mode 100644 shell/.config/shell/login.d/env-vars.sh delete mode 100644 shell/.config/shell/login.d/env-xdg.sh delete mode 100644 shell/.config/shell/login.d/go-path.sh delete mode 100644 shell/.config/shell/login.d/local-bin-path.sh delete mode 100644 shell/.config/shell/login.d/test/env-wiki-root.bats delete mode 100644 shell/.config/shell/rc.d/alias-base.sh delete mode 100644 shell/.config/shell/rc.d/alias-fuzzy-finding.sh delete mode 100644 shell/.config/shell/rc.d/alias-nvim-to-vim.sh delete mode 100644 shell/.config/shell/rc.d/alias-pywal.sh delete mode 100644 shell/.config/shell/rc.d/alias-vifm-to-vm.sh delete mode 100644 shell/.config/shell/rc.d/enable-pywal.sh delete mode 100644 shell/.config/shell/rc.d/locale-utf-8.sh delete mode 100644 shell/.config/shell/rc.d/test/locale-utf-8.bats delete mode 100644 shell/.config/shell/zshrc.d/0-history.zsh delete mode 100644 shell/.config/shell/zshrc.d/0-inline-glob-expansion.zsh delete mode 100644 shell/.config/shell/zshrc.d/0-plugins.zsh delete mode 100644 shell/.config/shell/zshrc.d/0-screen-information-dialog.zsh delete mode 100644 shell/.config/shell/zshrc.d/1-enable-command-spelling-correction.zsh delete mode 100644 shell/.config/shell/zshrc.d/1-report-time-for-long-running-processes.zsh delete mode 100644 shell/.config/shell/zshrc.d/1-set-up-powerlevel9k-theming.zsh delete mode 100644 shell/.config/shell/zshrc.d/5-install-tmux-plugin-manager.zsh delete mode 100644 shell/.config/shell/zshrc.d/6-alias-exa.zsh delete mode 100644 shell/.config/shell/zshrc.d/6-mkcd.zsh delete mode 100644 shell/.config/shell/zshrc.d/6-newest-files.zsh delete mode 100644 shell/.config/shell/zshrc.d/6-ssht-tmux-attaching.zsh delete mode 100644 shell/.config/shell/zshrc.d/9-configure-autocompletion.zsh delete mode 100644 shell/.config/shell/zshrc.d/9-deduplicate-path-variable.zsh delete mode 100644 shell/.config/shell/zshrc.d/9-disable-enhancd-dot-dot-behavior.zsh create mode 100644 zsh/.config/zsh/.p10k._zsh create mode 100644 zsh/.config/zsh/.zprofile create mode 100644 zsh/.config/zsh/.zshenv create mode 100644 zsh/.config/zsh/.zshrc create mode 100644 zsh/.config/zsh/plugins.zsh diff --git a/.gitignore b/.gitignore index b507a78..c790943 100644 --- a/.gitignore +++ b/.gitignore @@ -1,50 +1,6 @@ -*/.netrwhist -**/gopass-logo-small.png - -# Created by https://www.gitignore.io/api/vim,linux -# Edit at https://www.gitignore.io/?templates=vim,linux - -### Linux ### -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -### Vim ### -# Swap -[._]*.s[a-v][a-z] -[._]*.sw[a-p] -[._]s[a-rt-v][a-z] -[._]ss[a-gi-z] -[._]sw[a-p] - -# Session -Session.vim -Sessionx.vim - -# Temporary -.netrwhist - -# Auto-generated tag files -tags - -# Persistent undo -[._]*.un~ - -# Coc configuration directory -.vim - -# End of https://www.gitignore.io/api/vim,linux - +# no idea why gopass adds this image to config path +gopass-logo-small.png +# # Ignore dynamic colorschemes set by styler colorscheme.vim colorscheme diff --git a/git/.config/git/config b/git/.config/git/config index e3d97b9..8aa6895 100644 --- a/git/.config/git/config +++ b/git/.config/git/config @@ -6,3 +6,6 @@ smudge = git-lfs smudge -- %f process = git-lfs filter-process required = true +[alias] + ignore = "!gitignore -f" + ign = "ignore" diff --git a/home/.zprofile b/home/.zprofile deleted file mode 100644 index 87518db..0000000 --- a/home/.zprofile +++ /dev/null @@ -1,12 +0,0 @@ -export XDG_CONFIG_HOME="$HOME/.config" - -# .zlogin -# -# load all files from .config/shell/login.d -if [ -d $XDG_CONFIG_HOME/shell/login.d ]; then - for file in $XDG_CONFIG_HOME/shell/login.d/*.sh; do - source $file - done -fi - -export PATH="$HOME/.cargo/bin:$PATH" diff --git a/home/.zshenv b/home/.zshenv new file mode 100644 index 0000000..0f2caf2 --- /dev/null +++ b/home/.zshenv @@ -0,0 +1,6 @@ +#!/usr/bin/env zsh +# + +# make zsh source the correct directory +export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-"$HOME/.config"} +ZDOTDIR="$XDG_CONFIG_HOME/zsh" diff --git a/home/.zshrc b/home/.zshrc deleted file mode 100644 index 98cadd8..0000000 --- a/home/.zshrc +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/zsh - -autoload zmv - -if [ -d $XDG_CONFIG_HOME/shell/rc.d ]; then - for file in $XDG_CONFIG_HOME/shell/rc.d/*.sh; do - source $file - done -fi - -if [ -d $XDG_CONFIG_HOME/shell/zshrc.d ]; then - for file in $XDG_CONFIG_HOME/shell/zshrc.d/*.zsh; do - source $file - done -fi - - - - diff --git a/sh/.config/sh/alias b/sh/.config/sh/alias new file mode 100644 index 0000000..daf913f --- /dev/null +++ b/sh/.config/sh/alias @@ -0,0 +1,112 @@ +#!/usr/bin/env sh +# +# Global aliases for any shell + +exist() { type "$1" >/dev/null 2>&1; } + +# Avoid aliases which I did not create -- unalias EVERYTHING +unalias -a + +# v shorthand for neovim +alias v="nvim" + +# exit shell mimicks vim +alias :q="exit" + +# ls defaults +if exist exa; then + alias l="exa -l --git --git-ignore" + alias L="exa -hal --grid --git" + # a recursive tree + # - usually want to change levels recursed with -L2 -L3 or similar + alias ll="exa --tree -L2" + alias LL="exa -a --tree -L2" +else + alias l="ls -lhF" + alias L="ls -lAhF" +fi + +# cd defaults +alias ..="cd .." +alias ...="cd ../.." +alias ~="cd ~" + +# git alias +if exist git; then + alias g='git' + + alias ga='git add' + alias gaa='git add --all' + alias gb='git branch' + alias gbd='git branch -d' + + alias gc='git commit -v' + alias gc!='git commit -v --amend' + alias gcn!='git commit -v --no-edit --amend' + + alias gcm='git checkout master' + alias gcd='git checkout develop' + alias gcb='git checkout -b' + alias gco='git checkout' + + alias gd='git diff' + alias gds='git diff --staged' + + alias gi='git ignore' + + alias glog='git log --stat' + alias glg='git log --oneline --decorate --graph' + alias glga='git log --oneline --decorate --graph --remotes --all' + alias glgp='git log --stat -p' + + alias gf='git fetch' + alias gl='git pull' + alias gpn='git push --dry-run' + alias gp='git push' + alias gpf!='git push --force' + + alias grv='git remote -v' + + alias grs='git restore --staged' + alias grs!='git restore' + + alias grbi='git rebase -i' + alias grbc='git rebase --continue' + + alias gst='git status' + + autoload -Uz is-at-least + if is-at-least 2.13 "$(git --version 2>/dev/null | awk '{print $3}')"; then + alias gsta='git stash push' + else + alias gsta='git stash save' + fi + alias gstp='git stash pop' + alias gstl='git stash list' +fi + +# clear my screen +alias cl="clear" + +# Display current external ip address +alias myip="curl -s icanhazip.com" + +# fzf +if exist fzf; then + # Display fuzzy-searchable history + alias fzf_history="history | fzf --tac --height 20" + # Fuzzy search packages to install + if exist yay; then + alias fzf_yay="yay -Slq | fzf -m --preview 'yay -Si {1}' | xargs -ro yay -S" + # Fuzzy uninstall packages + alias fzf_yayrns="yay -Qeq | fzf -m --preview 'yay -Qi {1}' | xargs -ro yay -Rns" + fi +fi + +# vifm +if exist vifm; then + alias vm=vifm + alias vmm='vifm ${PWD}' + # enable picture preview script + exist vifmrun && alias vifm=vifmrun +fi diff --git a/shell/.config/shell/rc.d/enable-fasd-hook.sh b/sh/.config/sh/alias.d/enable-fasd-hook.sh similarity index 100% rename from shell/.config/shell/rc.d/enable-fasd-hook.sh rename to sh/.config/sh/alias.d/enable-fasd-hook.sh diff --git a/shell/.config/shell/rc.d/ssh-agent-autoconfiguration.sh b/sh/.config/sh/alias.d/ssh-agent-autoconfiguration.sh similarity index 100% rename from shell/.config/shell/rc.d/ssh-agent-autoconfiguration.sh rename to sh/.config/sh/alias.d/ssh-agent-autoconfiguration.sh diff --git a/sh/.config/sh/env b/sh/.config/sh/env new file mode 100644 index 0000000..af817db --- /dev/null +++ b/sh/.config/sh/env @@ -0,0 +1,44 @@ +#!/usr/bin/env sh +# +# Set global environment variables + +# Load XDG specifications +# shellcheck source=xdg +[ -f ~/.config/sh/xdg ] && . ~/.config/sh/xdg + +# anything on BIN_HOME should be executable form anywhere +export PATH="$PATH:$XDG_BIN_HOME" + +############################### +## BEGIN GLOBAL ENV VARS ## +############################### + +# if we forgot to set it treat bash as default +export SHELL=${SHELL:-/bin/bash} + +# will be picked up by many programs as notes directory +export WIKIROOT="${WIKIROOT:-$HOME/documents/notes}" +# will be picked up by many programs as library root directory +export LIBRARYROOT="${LIBRARYROOT:-$HOME/documents/library}" +# the default bibtex file to work on +# will change over time as primary projects change +# basically functions as 'default library' variable +export BIBFILE="${BIBFILE:-$LIBRARYROOT/academia/academia.bib}" + +# these are my personal 'important' application settings +export EDITOR=nvim +export BROWSER=qutebrowser + +export TERMINAL="alacritty" +export PAGER="less" + +export FILEREADER="zathura" +export FILEMANAGER="vifm" + +## gopath +export GOPATH="$HOME/projects/gopath/" +export PATH="$PATH:$GOPATH/bin" + +## LANG LOCALE UTF-8 +export LC_ALL="en_US.UTF-8" +export LANG="en_US.UTF-8" diff --git a/sh/.config/sh/profile b/sh/.config/sh/profile new file mode 100644 index 0000000..afb471a --- /dev/null +++ b/sh/.config/sh/profile @@ -0,0 +1,18 @@ +#!/usr/bin/env sh +# +# Is executed for any base sh login-shell +# Bash only executes when neither bash-profile nor bashrc exist +# (will only load the first one it finds) +# +# see https://github.com/rbenv/rbenv/wiki/unix-shell-initialization + +## Load all global environmment variables +# shellcheck source=env +[ -f ~/.config/sh/env ] && . ~/.config/sh/env +# load additional packages +if [ -d "$XDG_CONFIG_HOME/sh/env.d" ]; then + for _env in "$XDG_CONFIG_HOME/sh/env.d"/*.sh; do + . "$_env" + done + unset _env +fi diff --git a/shell/.config/shell/rc.d/autostartx.sh b/sh/.config/sh/profile.d/autostartx.sh similarity index 85% rename from shell/.config/shell/rc.d/autostartx.sh rename to sh/.config/sh/profile.d/autostartx.sh index 6a50795..5da5059 100644 --- a/shell/.config/shell/rc.d/autostartx.sh +++ b/sh/.config/sh/profile.d/autostartx.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env sh if [ ! "$DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then exec startx "$XDG_CONFIG_HOME"/xresources/xinitrc diff --git a/sh/.config/sh/xdg b/sh/.config/sh/xdg new file mode 100644 index 0000000..90701cb --- /dev/null +++ b/sh/.config/sh/xdg @@ -0,0 +1,33 @@ +#!/usr/bin/env sh +# XDG Base Directory Specification +# +# Sets up necessary environment variables for XDG convention, +# and those that applications obey for their environments. +# +# Thank you remeberYou for the idea +# see: https://github.com/rememberYou/dotfiles/blob/master/sh/.config/sh/xdg +# +# Additionally, home directories are set using the XDG specification, +# if the xdg-user-dirs module is enabled. +# +# Shellcheck will complain about setting permissions for the directories +# unless it is ignored https://github.com/koalaman/shellcheck/wiki/SC2174 +# shellcheck disable=SC2174 + +# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html +test "$XDG_CACHE_HOME" || export XDG_CACHE_HOME="$HOME/.cache" +test "$XDG_CONFIG_HOME" || export XDG_CONFIG_HOME="$HOME/.config" +test "$XDG_DATA_HOME" || export XDG_DATA_HOME="$HOME/.local/share" + +## Non-Standard additions +# non-standard, is added to path to enable execution of any files herein +test "$XDG_BIN_HOME" || export XDG_BIN_HOME="$HOME/.local/bin" + +## ensure directories exist +test -d "$XDG_BIN_HOME" || mkdir -p -m 0700 "$XDG_BIN_HOME" +test -d "$XDG_CACHE_HOME" || mkdir -p -m 0700 "$XDG_CACHE_HOME" +test -d "$XDG_CONFIG_HOME" || mkdir -p -m 0700 "$XDG_CONFIG_HOME" +test -d "$XDG_DATA_HOME" || mkdir -p -m 0700 "$XDG_DATA_HOME" + +## Applications that can be set through environment variables +export ZDOTDIR="$XDG_CONFIG_HOME/zsh" diff --git a/shell/.config/shell/login.d/env-vars.sh b/shell/.config/shell/login.d/env-vars.sh deleted file mode 100644 index a92fe1b..0000000 --- a/shell/.config/shell/login.d/env-vars.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env sh - -# important directories - -# will be picked up by vim wiki plugin as root directory -export WIKIROOT="${WIKIROOT:-$HOME/documents/notes}" -export LIBRARYROOT="${LIBRARYROOT:-$HOME/documents/library}" -export BIBFILE="${BIBFILE:-$LIBRARYROOT/academia/academia.bib}" - -# these are my personal 'important' environment settings -export EDITOR=nvim -export BROWSER=qutebrowser - -export TERMINAL="alacritty" -export FILEREADER="zathura" -export FILEMANAGER="vifm" diff --git a/shell/.config/shell/login.d/env-xdg.sh b/shell/.config/shell/login.d/env-xdg.sh deleted file mode 100644 index 4c9692c..0000000 --- a/shell/.config/shell/login.d/env-xdg.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -# these are mandatory for the shell to work -export XDG_CONFIG_HOME="$HOME/.config" -export XDG_CACHE_HOME="$HOME/.cache" - -# these are my personal 'important' directories -export XDG_PROJECTS_DIR="$HOME/projects" diff --git a/shell/.config/shell/login.d/go-path.sh b/shell/.config/shell/login.d/go-path.sh deleted file mode 100644 index ccd4d33..0000000 --- a/shell/.config/shell/login.d/go-path.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -export GOPATH="$HOME/projects/gopath/" -export PATH="$PATH:$GOPATH/bin" diff --git a/shell/.config/shell/login.d/local-bin-path.sh b/shell/.config/shell/login.d/local-bin-path.sh deleted file mode 100644 index b4f165c..0000000 --- a/shell/.config/shell/login.d/local-bin-path.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -# put personal scripts on the PATH to be callable -PATH=$(du "$HOME"/.local/bin | cut -f2 | tr '\n' ':')$PATH -export PATH diff --git a/shell/.config/shell/login.d/test/env-wiki-root.bats b/shell/.config/shell/login.d/test/env-wiki-root.bats deleted file mode 100644 index e6df11b..0000000 --- a/shell/.config/shell/login.d/test/env-wiki-root.bats +++ /dev/null @@ -1,65 +0,0 @@ -# FIXME why is one saved with trailing "/" , the other not? -DEFAULT_NOTES="$HOME/documents/notes" -DEFAULT_LIB="$HOME/documents/library" -DEFAULT_BIB="$DEFAULT_LIB/academia/academia.bib" - -setup() { - testfile="$BATS_TEST_DIRNAME/../env-vars.sh" -} - -teardown() { - unset WIKIROOT - unset LIBRARYROOT - unset BIBFILE -} - -@test "Populates WIKIROOT environment variable" { - source $testfile - [ -n "$WIKIROOT" ] -} - -@test "Sets WIKIROOT to correct default path" { - source $testfile - echo $WIKIROOT - [ "$WIKIROOT" = "$DEFAULT_NOTES" ] -} - -@test "Leaves WIKIROOT as is if it is already set" { - export WIKIROOT="MY/CUSTOM/DIR" - source $testfile - [ "$WIKIROOT" = "MY/CUSTOM/DIR" ] -} - -@test "Populates LIBRARYROOT environment variable" { - source $testfile - [ -n "$LIBRARYROOT" ] -} - -@test "Sets LIBRARYROOT to correct default path" { - source $testfile - echo $LIBRARYROOT - [ "$LIBRARYROOT" = "$DEFAULT_LIB" ] -} - -@test "Leaves LIBRARYROOT as is if it is already set" { - export LIBRARYROOT="MY/CUSTOM/DIR" - source $testfile - [ "$LIBRARYROOT" = "MY/CUSTOM/DIR" ] -} - -@test "Populates BIBFILE environment variable" { - source $testfile - [ -n "$BIBFILE" ] -} - -@test "Sets BIBFILE to correct default path" { - source $testfile - echo $BIBFILE - [ "$BIBFILE" = "$DEFAULT_BIB" ] -} - -@test "Leaves BIBFILE as is if it is already set" { - export BIBFILE="MY/CUSTOM/DIR" - source $testfile - [ "$BIBFILE" = "MY/CUSTOM/DIR" ] -} diff --git a/shell/.config/shell/rc.d/alias-base.sh b/shell/.config/shell/rc.d/alias-base.sh deleted file mode 100644 index 8f427ae..0000000 --- a/shell/.config/shell/rc.d/alias-base.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh - -# Prettify ls commands -if [ "$(uname -s)" = "Linux" ]; then - # we're on linux - alias l-d="ls -lFad" - alias l="ls -lAhF" # Overwritten for k in -aliasing-k - alias ll="ls -lFa | TERM=vt100 less" - alias ls='ls --color=auto' -fi - -# Show the top 5 commands used in recent history -_zhtop() { - history | awk "{a[\$2]++} END{for(i in a){printf \"%5d\t%s\n\",a[i],i}}" | sort -rn | head -} -alias zhtop=_zhtop -# Display timestamped recent command history -alias zh="fc -l -d -D" - -# Display your current ip address -alias myip="curl -s icanhazip.com" - -# move around faster for often used cd commands -alias ..="cd .." # overwritten by enhancd config in .zshrc.d/ -alias ...="cd ../.." -alias ~="cd ~" - -# make v call vim -alias v="vim" - -# short, consise, clear my screen -alias cl="clear" - -# let me exit out of the shell same way as vim -# TODO integrate session management with w? -alias :q="exit" -alias :wq="exit" diff --git a/shell/.config/shell/rc.d/alias-fuzzy-finding.sh b/shell/.config/shell/rc.d/alias-fuzzy-finding.sh deleted file mode 100644 index 2a8a761..0000000 --- a/shell/.config/shell/rc.d/alias-fuzzy-finding.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh - -# check for existence of fuzzy finders. If found, substitute fzf with it. -# order is skim > fzy > fzf > nothing -if type sk >/dev/null 2>&1; then - alias fzf=sk -elif type fzy >/dev/null 2>&1; then - alias fzf=fzy -elif type fzf >/dev/null 2>&1; then - alias fzf=fzf -else - echo "[WARNING]: No fuzzy finder found - install skim/fzf/fzy to enable functionality" -fi - -# check for existence of greplikes. If found, substitute fzf with it. -# order is skim > fzy > fzf > nothing -if type rg >/dev/null 2>&1; then - alias rg=rg -elif type ag >/dev/null 2>&1; then - alias rg=ag -elif type ack >/dev/null 2>&1; then - alias rg=ack -else - echo "[WARNING]: No grep-like found - install ripgrep/the silver surfer (ag)/ack to enable functionality" -fi - -# TODO Allow yanking of urls, c-e to open in editor, preview window with a-p and more -# FZF FILES AND FOLDERS -fzf_cd_weighted() { - cd "$(fasd -d | sk --nth=1 --with-nth=2 --tac | cut -d' ' -f2- | sed 's/^[ \t]*//;s/[\t]*$//')" || echo "cd not successful" -} - -fzf_cd_all() { - cd "$(sk --cmd 'find / -type d -not \( -path /proc -prune \)')" || echo "cd not successful" -} - -fzf_files_weighted() { - xdg-open "$(fasd -f | sk --nth=1 --with-nth=2 --tac | cut -d' ' -f2- | sed 's/^[ \t]*//;s/[\t]*$//')" || echo "xdg-open not successful" -} - -fzf_files_all() { - xdg-open "$(sk --cmd 'find / -type d -not \( -path /proc -prune \)')" || echo "xdg-open not successful" -} - -fzf_mru_weighted() { - target="$(fasd -t | sk --nth=1 --with-nth=2 --tac | cut -d' ' -f2- | sed 's/^[ \t]*//;s/[\t]*$//')" - if [ -f "$target" ]; then - xdg-open "$target" || echo "xdg-open not successful" - elif [ -d "$target" ]; then - cd "$target" || echo "cd not successful" - fi -} - -# FZF NOTES -fzf_notes() { - sk --cmd "command rg --follow --ignore-case --line-number --color never --no-messages --no-heading --with-filename '' /home/marty/Nextcloud/Notes" --ansi --multi --tiebreak='length,begin' --delimiter=':' --with-nth=3.. --preview='cat {1}' --preview-window=:wrap -} - -# FZF BIBTEX REFERENCES -fzf_bibtex() { - target=$(sk --cmd "bibtex-ls -cache $XDG_CACHE_HOME ~/Nextcloud/Library/academia/academia.bib" --ansi --with-nth=.. --preview-window=:wrap --prompt "Citation> " --preview="papis edit -e cat ref=$(echo {} | bibtex-cite | sed 's/^@//')") - papis edit ref="$(echo "$target" | bibtex-cite | sed 's/^@//')" -} - -# set up fuzzy file and directory search -alias f=fzf_files_weighted -alias F=fzf_files_all - -alias d=fzf_cd_weighted -alias D=fzf_cd_all - -alias ru=fzf_mru_weighted - -# set up fuzzy bibtex reference search -alias ref=fzf_bibtex - -# Display fuzzy-searchable history -alias zhfind="history | fzf --tac --height 20" - -# Fuzzy search packages to install -alias fzay="yay -Slq | fzf -m --preview 'yay -Si {1}' | xargs -ro yay -S" -# Fuzzy uninstall packages -alias uzay="yay -Qeq | fzf -m --preview 'yay -Qi {1}' | xargs -ro yay -Rs" diff --git a/shell/.config/shell/rc.d/alias-nvim-to-vim.sh b/shell/.config/shell/rc.d/alias-nvim-to-vim.sh deleted file mode 100644 index 1956d14..0000000 --- a/shell/.config/shell/rc.d/alias-nvim-to-vim.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# Check for existence of nvim command. If found, substitute vim with it. -type nvim >/dev/null 2>&1 && alias vim=nvim diff --git a/shell/.config/shell/rc.d/alias-pywal.sh b/shell/.config/shell/rc.d/alias-pywal.sh deleted file mode 100644 index 53e5566..0000000 --- a/shell/.config/shell/rc.d/alias-pywal.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -if type wal >/dev/null 2>&1; then - alias sd="wal --theme gruvbox" # grubbox dark - alias sD="wal --theme vscode" # pencil-like dark theme - alias sl="wal --theme base16-gruvbox-medium -l" # pencil-like light theme - alias sL="wal --theme 3024 -l" # pencil-like light theme -fi diff --git a/shell/.config/shell/rc.d/alias-vifm-to-vm.sh b/shell/.config/shell/rc.d/alias-vifm-to-vm.sh deleted file mode 100644 index 5fd5f0d..0000000 --- a/shell/.config/shell/rc.d/alias-vifm-to-vm.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# Check for existence of vifm command. If found, substitute vifm with it. -type vifm >/dev/null 2>&1 && alias vm=vifm - -# if vifm exists, also let me open current dir in vifm with vmm -type vifm >/dev/null 2>&1 && alias vmm='vifm ${PWD}' - -# Check for existence of vifmrun command. If found, substitute vifm with it. -type vifmrun >/dev/null 2>&1 && alias vifm=vifmrun diff --git a/shell/.config/shell/rc.d/enable-pywal.sh b/shell/.config/shell/rc.d/enable-pywal.sh deleted file mode 100644 index 0f5dbaa..0000000 --- a/shell/.config/shell/rc.d/enable-pywal.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# if wal exists -# Import colorscheme from 'wal' asynchronously -# & # Run the process in the background. -# ( ) # Hide shell job control messages. -type wal >/dev/null 2>&1 && (cat ~/.cache/wal/sequences &) diff --git a/shell/.config/shell/rc.d/locale-utf-8.sh b/shell/.config/shell/rc.d/locale-utf-8.sh deleted file mode 100644 index 68c9d97..0000000 --- a/shell/.config/shell/rc.d/locale-utf-8.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -export LC_ALL="en_US.utf-8" -export LANG="en_US.utf-8" diff --git a/shell/.config/shell/rc.d/test/locale-utf-8.bats b/shell/.config/shell/rc.d/test/locale-utf-8.bats deleted file mode 100644 index 2188a00..0000000 --- a/shell/.config/shell/rc.d/test/locale-utf-8.bats +++ /dev/null @@ -1,15 +0,0 @@ -setup() { - testfile="$BATS_TEST_DIRNAME/../locale-utf-8.sh" -} - -teardown() { - export LC_ALL="" - export LANG="" -} - -@test "Sets LC_ALL and LANG to en_US.utf-8" { - source $testfile - expected="en_US.utf-8" - [ "$LC_ALL" = "en_US.utf-8" ] - [ "$LANG" = "en_US.utf-8" ] -} diff --git a/shell/.config/shell/zshrc.d/0-history.zsh b/shell/.config/shell/zshrc.d/0-history.zsh deleted file mode 100644 index 00f3154..0000000 --- a/shell/.config/shell/zshrc.d/0-history.zsh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/zsh - -### Set ZSH History defaults - -# set some history options -setopt append_history -setopt extended_history -setopt hist_expire_dups_first -setopt hist_ignore_all_dups -setopt hist_ignore_dups -setopt hist_ignore_space -setopt hist_reduce_blanks -setopt hist_save_no_dups -setopt hist_verify - -# Share your history across all your terminal windows -setopt share_history -#setopt noclobber - -# set some more options -setopt pushd_ignore_dups -#setopt pushd_silent - -# Keep a ton of history. -export HISTSIZE=100000 -export SAVEHIST=100000 -HISTFILE=~/.zsh_history -export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help" diff --git a/shell/.config/shell/zshrc.d/0-inline-glob-expansion.zsh b/shell/.config/shell/zshrc.d/0-inline-glob-expansion.zsh deleted file mode 100644 index c18d7db..0000000 --- a/shell/.config/shell/zshrc.d/0-inline-glob-expansion.zsh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/zsh -# -# Expand aliases inline - see http://blog.patshead.com/2012/11/automatically-expaning-zsh-global-aliases---simplified.html -globalias() { - if [[ $LBUFFER =~ [A-Z0-9]+$ ]]; then - zle _expand_alias - zle expand-word - fi - zle self-insert -} - -zle -N globalias - -bindkey " " globalias -bindkey "^ " magic-space # control-space to bypass completion -bindkey -M isearch " " magic-space # normal space during searches diff --git a/shell/.config/shell/zshrc.d/0-plugins.zsh b/shell/.config/shell/zshrc.d/0-plugins.zsh deleted file mode 100644 index fd90007..0000000 --- a/shell/.config/shell/zshrc.d/0-plugins.zsh +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/zsh -# Clone zgen if you haven't already -check_zgen_installation() { - if [[ -z "$ZGEN_PARENT_DIR" ]]; then - ZGEN_PARENT_DIR=${XDG_CONFIG_HOME:="$HOME/.config/"} - ZGEN_DIR="$ZGEN_PARENT_DIR/zgen" - fi - if [[ ! -f $ZGEN_DIR/zgen.zsh ]]; then - if [[ ! -d "$ZGEN_PARENT_DIR" ]]; then - mkdir -p "$ZGEN_PARENT_DIR" - fi - cd "$ZGEN_PARENT_DIR" || return - git clone https://github.com/tarjoilija/zgen.git "$ZGEN_DIR" - fi - # shellcheck source=/home/marty/.config/zgen/zgen.zsh - # shellcheck disable=SC1091 - source "$ZGEN_DIR"/zgen.zsh - unset ZGEN_PARENT_DIR -} - -load_plugins() { - ZGEN_LOADED=() - ZGEN_COMPLETIONS=() - - zgen oh-my-zsh - - # If you want to customize your plugin list, create a file named - # .zgen-local-plugins in your home directory. That file will be sourced - # during startup *instead* of running this load-starter-plugin-list function, - # so make sure to include everything from this function that you want to keep. - - # If zsh-syntax-highlighting is bundled after zsh-history-substring-search, - # they break, so get the order right. - zgen load zdharma/fast-syntax-highlighting - zgen load zsh-users/zsh-history-substring-search - - # Set keystrokes for substring searching - zmodload zsh/terminfo - bindkey "${terminfo[kcuu1]:?}" history-substring-search-up - bindkey "${terminfo[kcud1]:?}" history-substring-search-down - - # Automatically run zgen update and zgen selfupdate every 7 days. - zgen load unixorn/autoupdate-zgen - - # Warn you when you run a command that you've set an alias for without - # using the alias. - zgen load djui/alias-tips - - # Colorize the things if you have grc installed. Well, some of the - # things, anyway. - zgen load unixorn/warhol.plugin.zsh - - zgen load chrissicool/zsh-256color - - # Add Fish-like autosuggestions to your ZSH. - zgen load zsh-users/zsh-autosuggestions - - # Bullet train prompt setup. - zgen load bhilburn/powerlevel9k powerlevel9k - - # automatically sources (known/whitelisted) .autoenv.zsh files - # as long as you're in the folder (and can optionally 'unsource' on leaving) - zgen load Tarrasch/zsh-autoenv - - # radically enhanced cd command, all sorts of options - zgen load b4b4r07/enhancd - - # set up nvm, the npm version manager - zgen load lukechilds/zsh-nvm - - # Add git helper scripts. - zgen load unixorn/git-extra-commands - - # Tom Limoncelli's tooling for storing private information (keys, etc) - # in a repository securely by encrypting them with gnupg. - zgen load StackExchange/blackbox - - # Load some oh-my-zsh plugins - zgen oh-my-zsh plugins/pip - zgen oh-my-zsh plugins/sudo - zgen oh-my-zsh plugins/aws - zgen oh-my-zsh plugins/chruby - zgen oh-my-zsh plugins/colored-man-pages - zgen oh-my-zsh plugins/git - zgen oh-my-zsh plugins/github - zgen oh-my-zsh plugins/python - zgen oh-my-zsh plugins/rsync - zgen oh-my-zsh plugins/screen - zgen oh-my-zsh plugins/vagrant - # check for autojump install before applying plugin - if type autojump >/dev/null 2>&1; then - zgen oh-my-zsh plugins/autojump - fi - zgen oh-my-zsh plugins/tmux - zgen oh-my-zsh plugins/tmuxinator - - # when in a directory with vagrant/docker files can use start, stop, up, down - zgen load Cloudstek/zsh-plugin-appup - - # Load more completion files for zsh from the zsh-lovers github repo. - zgen load zsh-users/zsh-completions src - - # Docker completion - zgen load srijanshetty/docker-zsh - - # Very cool plugin that generates zsh completion functions for commands - # if they have getopt-style help text. It doesn't generate them on the fly, - # you'll have to explicitly generate a completion, but it's still quite cool. - zgen load RobSis/zsh-completion-generator - - # Tab complete rakefile targets. - zgen load unixorn/rake-completion.zshplugin - - # Load me last - GENCOMPL_FPATH=$HOME/.zsh/complete - - zgen save -} - -check_zgen_installation -if ! zgen saved; then - load_plugins -fi diff --git a/shell/.config/shell/zshrc.d/0-screen-information-dialog.zsh b/shell/.config/shell/zshrc.d/0-screen-information-dialog.zsh deleted file mode 100644 index a51b071..0000000 --- a/shell/.config/shell/zshrc.d/0-screen-information-dialog.zsh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/zsh -# deal with screen, if we're using it - courtesy MacOSXHints.com -# Login greeting ------------------ -if [ "$TERM" = "screen" ] && [ ! "$SHOWED_SCREEN_MESSAGE" = "true" ]; then - detached_screens=$(screen -list | grep Detached) - if [ -n "$detached_screens" ]; then - echo "+---------------------------------------+" - echo "| Detached screens are available: |" - echo "$detached_screens" - echo "+---------------------------------------+" - fi -fi diff --git a/shell/.config/shell/zshrc.d/1-enable-command-spelling-correction.zsh b/shell/.config/shell/zshrc.d/1-enable-command-spelling-correction.zsh deleted file mode 100644 index ad02c1b..0000000 --- a/shell/.config/shell/zshrc.d/1-enable-command-spelling-correction.zsh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/zsh -# Correct spelling for commands -setopt correct - -# turn off the infernal correctall for filenames -unsetopt correctall - -# Enable command auto-correction. -ENABLE_CORRECTION="true" - -# Display red dots whilst waiting for completion. -COMPLETION_WAITING_DOTS="true" diff --git a/shell/.config/shell/zshrc.d/1-report-time-for-long-running-processes.zsh b/shell/.config/shell/zshrc.d/1-report-time-for-long-running-processes.zsh deleted file mode 100644 index bf16597..0000000 --- a/shell/.config/shell/zshrc.d/1-report-time-for-long-running-processes.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/zsh -# Long running processes should return time after they complete. Specified -# in seconds. -export REPORTTIME=2 -export TIMEFMT="%U user %S system %P cpu %*Es total" diff --git a/shell/.config/shell/zshrc.d/1-set-up-powerlevel9k-theming.zsh b/shell/.config/shell/zshrc.d/1-set-up-powerlevel9k-theming.zsh deleted file mode 100644 index 5e2384f..0000000 --- a/shell/.config/shell/zshrc.d/1-set-up-powerlevel9k-theming.zsh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/zsh - -POWERLEVEL9K_MODE='nerdfont-complete' -#POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 -#POWERLEVEL9K_SHORTEN_DELIMITER="" -#POWERLEVEL9K_SHORTEN_STRATEGY="truncate_from_right" -POWERLEVEL9K_PROMPT_ON_NEWLINE=true -POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='' -POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='' -POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='' -POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='' -POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="%F{blue}\u256D\u2500%F{white}" -POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%F{blue}\u2570\uf460%F{white} " -POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(root_indicator dir dir_writable_joined) -POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(command_execution_time - vcs background_jobs_joined time_joined) -POWERLEVEL9K_VCS_MODIFIED_BACKGROUND="clear" -POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND="clear" -POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="yellow" -POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="yellow" -POWERLEVEL9K_DIR_HOME_BACKGROUND="clear" -POWERLEVEL9K_DIR_HOME_FOREGROUND="blue" -POWERLEVEL9K_DIR_HOME_SUBFOLDER_BACKGROUND="clear" -POWERLEVEL9K_DIR_HOME_SUBFOLDER_FOREGROUND="blue" -POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_BACKGROUND="clear" -POWERLEVEL9K_DIR_WRITABLE_FORBIDDEN_FOREGROUND="red" -POWERLEVEL9K_DIR_DEFAULT_BACKGROUND="clear" -POWERLEVEL9K_DIR_DEFAULT_FOREGROUND="white" -POWERLEVEL9K_ROOT_INDICATOR_BACKGROUND="red" -POWERLEVEL9K_ROOT_INDICATOR_FOREGROUND="white" -POWERLEVEL9K_STATUS_OK_BACKGROUND="clear" -POWERLEVEL9K_STATUS_OK_FOREGROUND="green" -POWERLEVEL9K_STATUS_ERROR_BACKGROUND="clear" -POWERLEVEL9K_STATUS_ERROR_FOREGROUND="red" -POWERLEVEL9K_TIME_BACKGROUND="clear" -POWERLEVEL9K_TIME_FOREGROUND="cyan" -POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND='clear' -POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND='magenta' -POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND='clear' -POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND='green' - -ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=250" diff --git a/shell/.config/shell/zshrc.d/5-install-tmux-plugin-manager.zsh b/shell/.config/shell/zshrc.d/5-install-tmux-plugin-manager.zsh deleted file mode 100644 index 31d67d0..0000000 --- a/shell/.config/shell/zshrc.d/5-install-tmux-plugin-manager.zsh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/zsh -# -# Clone tmux plugin manager if not existing -if [[ -z "$TPM_PARENT_DIR" ]]; then - TPM_PARENT_DIR=${XDG_CONFIG_HOME:-$HOME/.config}/tmux -fi - -if [[ ! -f $TPM_PARENT_DIR/plugins/tpm/tpm ]]; then - if [[ ! -d "$TPM_PARENT_DIR" ]]; then - mkdir -p "$TPM_PARENT_DIR" - fi - cd "$TPM_PARENT_DIR" || exit - git clone https://github.com/tmux-plugins/tpm plugins/tpm -fi - -export TMUX_PLUGIN_MANAGER_PATH=$TPM_PARENT_DIR/plugins -alias tmux="tmux -f "'"${TPM_PARENT_DIR}"'"/tmux.conf" - -unset TPM_PARENT_DIR -unset TPM_SUB_DIR diff --git a/shell/.config/shell/zshrc.d/6-alias-exa.zsh b/shell/.config/shell/zshrc.d/6-alias-exa.zsh deleted file mode 100644 index 26ea25a..0000000 --- a/shell/.config/shell/zshrc.d/6-alias-exa.zsh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/zsh -# uses exa in detail mode -alias l="exa -l --git --git-ignore" -# shows hidden files -alias L="exa -hal --grid --git" -# a recursive tree - usually want to change levels recused with -L2 -L3 or similar -alias ll="exa --tree -L2" -alias LL="exa -a --tree -L2" diff --git a/shell/.config/shell/zshrc.d/6-mkcd.zsh b/shell/.config/shell/zshrc.d/6-mkcd.zsh deleted file mode 100644 index ff2c3a6..0000000 --- a/shell/.config/shell/zshrc.d/6-mkcd.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/zsh -# mkdir & cd -function mkcd() { - mkdir -p "$@" && cd "$_" || return -} diff --git a/shell/.config/shell/zshrc.d/6-newest-files.zsh b/shell/.config/shell/zshrc.d/6-newest-files.zsh deleted file mode 100644 index fc726a4..0000000 --- a/shell/.config/shell/zshrc.d/6-newest-files.zsh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/zsh -# show newest files -# http://www.commandlinefu.com/commands/view/9015/find-the-most-recently-changed-files-recursively -newest() { - find . -type f -printf '%TY-%Tm-%Td %TT %p\n' | - grep -v cache | - grep -v '.hg' | grep -v '.git' | - sort -r | - less -} diff --git a/shell/.config/shell/zshrc.d/6-ssht-tmux-attaching.zsh b/shell/.config/shell/zshrc.d/6-ssht-tmux-attaching.zsh deleted file mode 100644 index 31668fe..0000000 --- a/shell/.config/shell/zshrc.d/6-ssht-tmux-attaching.zsh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/zsh -# automatically use tmux whenever we ssh to a server - -function ssht() { - ssh "$@" -t 'tmux a || tmux || /bin/bash' -} diff --git a/shell/.config/shell/zshrc.d/9-configure-autocompletion.zsh b/shell/.config/shell/zshrc.d/9-configure-autocompletion.zsh deleted file mode 100644 index b19402e..0000000 --- a/shell/.config/shell/zshrc.d/9-configure-autocompletion.zsh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/zsh -# -# Speed up autocomplete, force prefix mapping -zstyle ':completion:*' accept-exact '*(N)' -zstyle ':completion:*' use-cache on -zstyle ':completion:*' cache-path ~/.zsh/cache -# shellcheck disable=SC2016 -zstyle -e ':completion:*:default' list-colors 'reply=("${PREFIX:+=(#bi)($PREFIX:t)*==34=34}:${(s.:.)LS_COLORS}")' - -# Load any custom zsh completions we've installed -if [ -d ~/.zsh-completions ]; then - for completion in ~/.zsh-completions/*; do - # shellcheck source=/dev/null - source "$completion" - done -fi diff --git a/shell/.config/shell/zshrc.d/9-deduplicate-path-variable.zsh b/shell/.config/shell/zshrc.d/9-deduplicate-path-variable.zsh deleted file mode 100644 index 3f8aada..0000000 --- a/shell/.config/shell/zshrc.d/9-deduplicate-path-variable.zsh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/zsh -# shellcheck disable=SC2206 -# shellcheck disable=SC2179 -# shellcheck disable=SC2154 - -# In case a plugin adds a redundant path entry, remove duplicate entries -# from PATH -# from: https://unix.stackexchange.com/questions/40749/remove-duplicate-path-entries-with-awk-command -get_var() { - eval 'printf "%s\n" "${'"$1"'}"' -} -set_var() { - eval "$1=\"\$2\"" -} -dedup_pathvar() { - pathvar_name="$1" - pathvar_value="$(get_var "$pathvar_name")" - deduped_path="$(perl -e 'print join(":",grep { not $seen{$_}++ } split(/:/, $ARGV[0]))' "$pathvar_value")" - set_var "$pathvar_name" "$deduped_path" -} -dedup_pathvar PATH -dedup_pathvar MANPATH diff --git a/shell/.config/shell/zshrc.d/9-disable-enhancd-dot-dot-behavior.zsh b/shell/.config/shell/zshrc.d/9-disable-enhancd-dot-dot-behavior.zsh deleted file mode 100644 index 87fcf5c..0000000 --- a/shell/.config/shell/zshrc.d/9-disable-enhancd-dot-dot-behavior.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/zsh -# Assumes enhancd is installed (via plugin) -# Let's you go back a directory with .. (usual cd .. behavior) -# Let's the enhancd backtrack menu appear with cd .. (usual enhancd behavior) -alias ..="ENHANCD_DISABLE_DOT=1 && cd .. && ENHANCD_DISABLE_DOT=0" diff --git a/xdg-user-dirs/.config/user-dirs.dirs b/xdg-user-dirs/.config/user-dirs.dirs index 0384e6d..e258435 100644 --- a/xdg-user-dirs/.config/user-dirs.dirs +++ b/xdg-user-dirs/.config/user-dirs.dirs @@ -6,10 +6,11 @@ # absolute path. No other format is supported. # XDG_DESKTOP_DIR="$HOME/desktop" -XDG_DOWNLOAD_DIR="$HOME/downloads" -XDG_TEMPLATES_DIR="$HOME/templates" -XDG_PUBLICSHARE_DIR="$HOME/public" XDG_DOCUMENTS_DIR="$HOME/documents" +XDG_DOWNLOAD_DIR="$HOME/downloads" XDG_MUSIC_DIR="$HOME/music" XDG_PICTURES_DIR="$HOME/pictures" +XDG_PROJECTS_DIR="$HOME/projects" +XDG_PUBLICSHARE_DIR="$HOME/public" +XDG_TEMPLATES_DIR="$HOME/templates" XDG_VIDEOS_DIR="$HOME/videos" diff --git a/zsh/.config/zsh/.p10k._zsh b/zsh/.config/zsh/.p10k._zsh new file mode 100644 index 0000000..a1422a8 --- /dev/null +++ b/zsh/.config/zsh/.p10k._zsh @@ -0,0 +1,1199 @@ +#!/usr/bin/env zsh +# Generated by Powerlevel10k configuration wizard on 2020-02-01 at 19:03 CET. +# Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 15097. +# Wizard options: nerdfont-complete + powerline, small icons, classic, dark, time, +# slanted separators, slanted heads, sharp tails, 2 lines, solid, left frame, sparse, +# few icons, concise, transient_prompt, instant_prompt=verbose. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%8)):#7}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh + setopt no_unset extended_glob + + # Unset all configuration options. This allows you to apply configiguration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m 'POWERLEVEL9K_*' + + autoload -Uz is-at-least && is-at-least 5.1 || return + + zmodload zsh/langinfo + if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then + local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} + fi + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + # =========================[ Line #2 ]========================= + newline + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + vcs # git status + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + go_version # go version (https://golang.org) + rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + time # current time + # =========================[ Line #2 ]========================= + newline + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # example # example user-defined segment (see prompt_example function below) + ) + + # To enable default icons for all segments, don't define POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION + # or set it to '${P9K_VISUAL_IDENTIFIER}'. + # + # To remove trailing space from all default icons, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION + # to '${P9K_VISUAL_IDENTIFIER% }'. + # + # To enable default icons for one segment (e.g., dir), set + # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'. + # + # To assign a specific icon to one segment (e.g., dir), set + # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='⭐'. + # + # To assign a specific icon to a segment in a given state (e.g., dir in state NOT_WRITABLE), + # set POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'. + # + # Note: You can use $'\u2B50' instead of '⭐'. It's especially convenient when specifying + # icons that your text editor cannot render. Don't forget to put $ and use single quotes when + # defining icons via Unicode codepoints. + # + # Note: Many default icons cannot be displayed with system fonts. You'll need to install a + # capable font to use them. See POWERLEVEL9K_MODE below. + typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER// }' + + # This option makes a difference only when default icons are enabled for all or some prompt + # segments (see POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION above). LOCK_ICON can be printed as + # $'\uE0A2', $'\uE138' or $'\uF023' depending on POWERLEVEL9K_MODE. The correct value of this + # parameter depends on the provider of the font your terminal is using. + # + # Font Provider | POWERLEVEL9K_MODE + # ---------------------------------+------------------- + # Powerline | powerline + # Font Awesome | awesome-fontconfig + # Adobe Source Code Pro | awesome-fontconfig + # Source Code Pro | awesome-fontconfig + # Awesome-Terminal Fonts (regular) | awesome-fontconfig + # Awesome-Terminal Fonts (patched) | awesome-patched + # Nerd Fonts | nerdfont-complete + # Other | compatible + # + # If this looks overwhelming, either stick with a preinstalled system font and set + # POWERLEVEL9K_MODE=compatible, or install the recommended Powerlevel10k font from + # https://github.com/romkatv/powerlevel10k/#recommended-meslo-nerd-font-patched-for-powerlevel10k + # and set POWERLEVEL9K_MODE=nerdfont-complete. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%240F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%240F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%240F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='─' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Default background color. + typeset -g POWERLEVEL9K_BACKGROUND=236 + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%244F\uE0BD' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%244F\uE0BD' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0BC' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0BA' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0BC' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0BA' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 + # Make the icon bold. + typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='%B${P9K_CONTENT// }' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='Ⅴ' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .ruby-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable directories. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=true + # Show this icon when the current directory is not writable. POWERLEVEL9K_DIR_SHOW_WRITABLE + # above must be set to true for this parameter to have effect. + # typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%246Fin ' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons for different directories. + # It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. Icon. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there + # are no matches, the directory will have no icon. + # + # Example: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '(╯°□°)╯︵ ┻━┻' + # '~(|/*)' HOME '⌂' + # '*' DEFAULT '') + # + # With these settings, the current directory in the prompt may look like this: + # + # (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent + # + # Or like this: + # + # ⌂ ~/best/powerlevel10k + # + # You can also set different colors for directories of different classes. Remember to override + # FOREGROUND, SHORTENED_FOREGROUND and ANCHOR_FOREGROUND for every directory class that you wish + # to have its own color. + # + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + typeset -g POWERLEVEL9K_DIR_CLASSES=() + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + POWERLEVEL9K_VCS_BRANCH_ICON=${(g::)POWERLEVEL9K_VCS_BRANCH_ICON} + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='…' + POWERLEVEL9K_VCS_UNTRACKED_ICON=${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON} + + # Formatter for Git status. + # + # Example output: master ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%246F' # grey foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + local where # branch or tag + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + res+="${clean}${POWERLEVEL9K_VCS_BRANCH_ICON}" + where=${(V)VCS_STATUS_LOCAL_BRANCH} + elif [[ -n $VCS_STATUS_TAG ]]; then + res+="${meta}#" + where=${(V)VCS_STATUS_TAG} + fi + + # If local branch name or tag is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + (( $#where > 32 )) && where[13,-13]="…" + res+="${clean}${where//\%/%%}" # escape % + + # Display the current Git commit if there is no branch or tag. + # Tip: To always display the current Git commit, remove `[[ -z $where ]] &&` from the next line. + [[ -z $where ]] && res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" # escape % + fi + + # ⇣42 if behind the remote. customized to ↓ + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}↓${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. ch to ↑ + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}↑${VCS_STATUS_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}⚑${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}✖${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}●${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%246Fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for respositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes longer than this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%246Ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usgae: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 + + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%246Fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + # Don't show Python version next to the anaconda environment name. + typeset -g POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_ANACONDA_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Don't show node version if it's the same as global: $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_TERRAFORM_DEFAULT_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%246Fat ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_CONTENT_EXPANSION if the default + # is too verbose or not informative enough. + # + # P9K_GCLOUD_ACCOUNT: the output of `gcloud config get-value account` + # P9K_GCLOUD_PROJECT: the output of `gcloud config get-value project` + # ${VARIABLE//\%/%%}: ${VARIABLE} with all occurences of '%' replaced with '%%'. + # + typeset -g POWERLEVEL9K_GCLOUD_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT//\%/%%}' + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run ifconfig while on VPN to see the + # name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(wg|(.*tun))[0-9]*' + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=$'\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION= + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%246Fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/zsh/.config/zsh/.zprofile b/zsh/.config/zsh/.zprofile new file mode 100644 index 0000000..a6c3cb5 --- /dev/null +++ b/zsh/.config/zsh/.zprofile @@ -0,0 +1,19 @@ +#!/usr/bin/env zsh + +[ -f "$XDG_CONFIG_HOME/sh/profile" ] && . "$XDG_CONFIG_HOME/sh/profile" +# .zlogin +# +if [ -d "$XDG_CONFIG_HOME/sh/profile.d" ]; then + for file in "$XDG_CONFIG_HOME/sh/profile.d"/*.sh; do + # shellcheck disable=1090 + source "$file" + done + unset file +fi +if [ -d "$XDG_CONFIG_HOME/zsh/profile.d" ]; then + for file in "$XDG_CONFIG_HOME/zsh/profile.d"/*.sh; do + # shellcheck disable=1090 + source "$file" + done + unset file +fi diff --git a/zsh/.config/zsh/.zshenv b/zsh/.config/zsh/.zshenv new file mode 100644 index 0000000..3b40006 --- /dev/null +++ b/zsh/.config/zsh/.zshenv @@ -0,0 +1,20 @@ +#!/usr/bin/env zsh +# +# + +# load global sh env vars +[ -f "$XDG_CONFIG_HOME/sh/env" ] && source "$XDG_CONFIG_HOME/sh/env" +if [ -d "$XDG_CONFIG_HOME/sh/env.d" ]; then + for _env in "$XDG_CONFIG_HOME/sh/env.d"/*.sh; do + . "$_env" + done + unset _env +fi + +# load zsh specific env vars +if [ -d "$XDG_CONFIG_HOME/zsh/env.d" ]; then + for _env in "$XDG_CONFIG_HOME/zsh/env.d"/*.zsh; do + . "$_env" + done + unset _env +fi diff --git a/zsh/.config/zsh/.zshrc b/zsh/.config/zsh/.zshrc new file mode 100644 index 0000000..4c78b84 --- /dev/null +++ b/zsh/.config/zsh/.zshrc @@ -0,0 +1,125 @@ +#!/usr/bin/env zsh +# + +CONFDIR="${XDG_CONFIG_HOME:-$HOME/.config}" +ZSHCONFDIR="$CONFDIR/zsh" + +# Set completion style +# The following lines were added by compinstall +zstyle ':completion:*' completer _complete _ignored _approximate +zstyle ':completion:*' list-colors '' +zstyle ':completion:*' matcher-list '' '+m:{[:lower:]}={[:upper:]} r:|[._-]=** r:|=**' +zstyle ':completion:*' menu select=1 +zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s +zstyle :compinstall filename "$ZSHCONFDIR/.zshrc" +# End of lines added by compinstall +autoload -Uz compinit zmv +compinit + +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.config/zsh/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block, everything else may go below. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + + +# load all plugins +[ -f "$ZSHCONFDIR/plugins.zsh" ] && source "$ZSHCONFDIR/plugins.zsh" + +# shellcheck source=alias +[ -f "$CONFDIR/sh/alias" ] && source "$CONFDIR/sh/alias" +# load additional aliases +if [ -d "$CONFDIR/sh/alias.d" ]; then + for _alias in "$CONFDIR/sh/alias.d"/*.sh; do + . "$_alias" + done + unset _alias +fi +if [ -d "$ZSHCONFDIR/alias.d" ]; then + for _alias in "$ZSHCONFDIR/alias.d"/*.sh; do + . "$_alias" + done + unset _alias +fi + +# Correct spelling for commands +setopt correct +# turn off the infernal correctall for filenames +unsetopt correctall +# Enable command auto-correction. +ENABLE_CORRECTION="true" + +# Speed up autocomplete, force prefix mapping +zstyle ':completion:*' accept-exact '*(N)' +zstyle ':completion:*' use-cache on +zstyle ':completion:*' cache-path "${XDG_CACHE_HOME:-$HOME/.cache}/zshcompcache" +# shellcheck disable=SC2016 +zstyle -e ':completion:*:default' list-colors 'reply=("${PREFIX:+=(#bi)($PREFIX:t)*==34=34}:${(s.:.)LS_COLORS}")' + +### history +## Set ZSH History defaults +setopt append_history +setopt extended_history +setopt hist_expire_dups_first +setopt hist_ignore_all_dups +setopt hist_ignore_dups +setopt hist_ignore_space +setopt hist_reduce_blanks +setopt hist_save_no_dups +setopt hist_verify +# Share your history across all your terminal windows +setopt share_history +setopt pushd_ignore_dups +#setopt pushd_silent +export HISTSIZE=100000 +export SAVEHIST=100000 +export HISTFILE="$XDG_DATA_HOME/zsh_history" +export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help" + +## Set ZSH History aliases +# Show the top 5 commands used in recent history +history_top() { + history | awk "{a[\$2]++} END{for(i in a){printf \"%5d\t%s\n\",a[i],i}}" | sort -rn | head +} +# Display timestamped recent command history +alias history="fc -l -d -D" + +### Glob Alias expansion +# Expand aliases inline - see http://blog.patshead.com/2012/11/automatically-expaning-zsh-global-aliases---simplified.html +globalias() { + if [[ $LBUFFER =~ [A-Z0-9]+$ ]]; then + zle _expand_alias + zle expand-word + fi + zle self-insert +} +zle -N globalias +bindkey " " globalias +bindkey "^ " magic-space # control-space to bypass completion +bindkey -M isearch " " magic-space # normal space during searches + +# Deduplicate PATH - remove any duplicate entries from PATH +# from: https://unix.stackexchange.com/questions/40749/remove-duplicate-path-entries-with-awk-command +get_var() { + eval 'printf "%s\n" "${'"$1"'}"' +} +set_var() { + eval "$1=\"\$2\"" +} +dedup_pathvar() { + pathvar_name="$1" + pathvar_value="$(get_var "$pathvar_name")" + deduped_path="$(perl -e 'print join(":",grep { not $seen{$_}++ } split(/:/, $ARGV[0]))' "$pathvar_value")" + set_var "$pathvar_name" "$deduped_path" +} +dedup_pathvar PATH +dedup_pathvar MANPATH + +# shellcheck is not built for zsh specific uses like p10k does +# so we remove it from being analyzed and linted in shellcheck by adding underscore +# To customize prompt, run `p10k configure` or edit ~/.config/zsh/.p10k.zsh. +[[ ! -f "$ZSHCONFDIR/.p10k._zsh" ]] || source "$ZSHCONFDIR/.p10k._zsh" + +unset CONFDIR +unset ZSHCONFDIR diff --git a/zsh/.config/zsh/plugins.zsh b/zsh/.config/zsh/plugins.zsh new file mode 100644 index 0000000..6be2450 --- /dev/null +++ b/zsh/.config/zsh/plugins.zsh @@ -0,0 +1,70 @@ +#!/bin/zsh +# Clone zgen if you haven't already +check_zgen_installation() { + if [[ -z "$ZGEN_PARENT_DIR" ]]; then + ZGEN_PARENT_DIR=${XDG_DATA_HOME:="$HOME/.local/share"} + ZGEN_DIR="$ZGEN_PARENT_DIR/zgen" + fi + if [[ ! -f $ZGEN_DIR/zgen.zsh ]]; then + if [[ ! -d "$ZGEN_PARENT_DIR" ]]; then + mkdir -p "$ZGEN_PARENT_DIR" + fi + cd "$ZGEN_PARENT_DIR" || return + git clone https://github.com/tarjoilija/zgen.git "$ZGEN_DIR" + fi + # shellcheck source=/home/marty/.config/zgen/zgen.zsh + # shellcheck disable=SC1091 + source "$ZGEN_DIR"/zgen.zsh + unset ZGEN_PARENT_DIR +} + +load_plugins() { + ZGEN_LOADED=() + ZGEN_COMPLETIONS=() + + zgen oh-my-zsh + + # If you want to customize your plugin list, create a file named + # .zgen-local-plugins in your home directory. That file will be sourced + # during startup *instead* of running this load-starter-plugin-list function, + # so make sure to include everything from this function that you want to keep. + + # If zsh-syntax-highlighting is bundled after zsh-history-substring-search, + # they break, so get the order right. + zgen load zdharma/fast-syntax-highlighting + # zgen load zsh-users/zsh-history-substring-search + + # # Set keystrokes for substring searching + # zmodload zsh/terminfo + # bindkey "${terminfo[kcuu1]:?}" history-substring-search-up + # bindkey "${terminfo[kcud1]:?}" history-substring-search-down + + # Automatically run zgen update and zgen selfupdate every 7 days. + zgen load unixorn/autoupdate-zgen + + # Warn you when you run a command that you've set an alias for without + # using the alias. + zgen load djui/alias-tips + + # Add Fish-like autosuggestions to your ZSH. + zgen load zsh-users/zsh-autosuggestions + + zgen load romkatv/powerlevel10k powerlevel10k + # radically enhanced cd command, all sorts of options + # zgen load b4b4r07/enhancd + + # set up nvm, the npm version manager + zgen load lukechilds/zsh-nvm + + zgen oh-my-zsh plugins/colored-man-pages + + # Load me last + GENCOMPL_FPATH=${XDG_CONFIG_HOME:-"$HOME/.config/zsh"}/complete + + zgen save +} + +check_zgen_installation +if ! zgen saved; then + load_plugins +fi