diff --git a/.config/nvim b/.config/nvim index 422a7e3..b6c6f50 160000 --- a/.config/nvim +++ b/.config/nvim @@ -1 +1 @@ -Subproject commit 422a7e329be391a1a420617143a80a77570797ee +Subproject commit b6c6f5008ab50edbc2d41dbb1169732e690587ac diff --git a/.zprofile b/.zprofile index 58036e9..ed49570 100644 --- a/.zprofile +++ b/.zprofile @@ -1,14 +1,12 @@ -export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$USER.sock -function ssh-agent-start () -{ - # if that socket does not exist, start the ssh-agent on it - if [[ -z $SSH_AGENT_PID ]] - then - rm $SSH_AUTH_SOCK - eval $(ssh-agent -a "$SSH_AUTH_SOCK") > /dev/null - # using ssh-add might ask for a password, we don't want that here. - # If only using ssh keys without passphrases, you can do this here - # ssh-add - fi -} -ssh-agent-start +export GEM_HOME="$HOME/.local/share/gems" +export PATH="/usr/bin:/usr/sbin:$HOME/.local/bin:$HOME/.cargo/bin:/usr/local/bin:$HOME/.deno/bin:/usr/games/:$GEM_HOME/bin" +export EDITOR=nvim +export editor=nvim +export XDG_CONFIG_HOME=~/.config + +export GTK_IM_MODULE=ibus +export QT_IM_MODULE=ibus +export SDL_IM_MODULE=ibus +export GLFW_IM_MODULE=ibus +export XMODIFIERS=@im=ibus + diff --git a/.zshrc b/.zshrc index 5e02772..5d96c1d 100644 --- a/.zshrc +++ b/.zshrc @@ -1,115 +1,35 @@ -### ENVVARS -PATH="/usr/bin:/usr/sbin:$HOME/.local/bin:$HOME/.cargo/bin:/usr/local/bin:$HOME/.deno/bin:/usr/games/" -export PATH -export EDITOR=nvim -export editor=nvim -export XDG_CONFIG_HOME=~/.config -export TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S\ncpu\t%P' -export ZSH=$HOME/.zsh -export DATEFMT='+%a %Y-%m-%d %X' +source ~/.zshrc.custom +# ~/.zshrc file for zsh interactive shells. +# see /usr/share/doc/zsh/examples/zshrc for examples - -### Aliases -alias l="lsd -lah --date \"$DATEFMT\"" -alias ll="lsd -lh --date \"$DATEFMT\"" -alias la="lsd -a --date \"$DATEFMT\"" -alias ls="lsd --date \"$DATEFMT\"" -alias grep="grep --color" -alias egrep="grep -E" -alias lgrep="find | grep" -alias psgrep="ps axu | grep" -alias plasmarestart="killall plasmashell; kstart5 plasmashell" -alias isotime='date +"%Y-%m-%dT%H:%M:%S%z"' -alias isodate='date +%Y-%m-%dT%H:%M:%S%z' -alias datefmt='date $DATEFMT' -alias gg=lazygit -alias reload="source ~/.zshrc" -alias gls=/bin/ls -alias neorg='nvim -c "Neorg workspace $1"' -alias bat=batcat -alias accon="HOST=$(hostname) conda activate" -alias gotemp="cd $(mktemp -d)" -alias open=xdg-open - -### Functions -function largefiles () { exec 2>/dev/null; du -ah "$@" | grep -P "^\d+(G|T|P|E)\s" } -function midfiles () { exec 2>/dev/null; du -ah "$@" | grep -P "^\d+(M|G|T|P|E)\s" } -function smallfiles () { exec 2>/dev/null; du -ah "$@" | grep -P "^\d+(B|K)\s" } -function cachekeys () { exec 2>/dev/null; - ssh-agent-start # see ~/.zprofile - ssh-add -} -function newpass() { - LC_ALL=C tr -dc '[:alnum:]' < /dev/urandom | head -c${1:-40} -} -function condac() { - conda activate $@ - export HOST=$(hostname) -} -# TODO: make neorg a function, take a workspace as arg - -### ---- zsh options ------------------------------------- -setopt autocd -setopt HIST_FIND_NO_DUPS -setopt HIST_IGNORE_SPACE -setopt HIST_IGNORE_ALL_DUPS -setopt appendhistory -setopt INC_APPEND_HISTORY -setopt SHARE_HISTORY +setopt autocd # change directory just by typing its name +#setopt correct # auto correct mistakes setopt interactivecomments # allow comments in interactive mode setopt magicequalsubst # enable filename expansion for arguments of the form ‘anything=expression’ setopt nonomatch # hide error message if there is no match for the pattern setopt notify # report the status of background jobs immediately setopt numericglobsort # sort filenames numerically when it makes sense setopt promptsubst # enable command substitution in prompt + WORDCHARS=${WORDCHARS//\/} # Don't consider certain characters part of the word + +# hide EOL sign ('%') PROMPT_EOL_MARK="" -# History configurations -HISTFILE=~/.zsh_history -HISTSIZE=10000 -SAVEHIST=200000 -setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTSIZE -setopt hist_ignore_dups # ignore duplicated commands history list -setopt hist_ignore_space # ignore commands that start with space -setopt hist_verify # show command with history expansion to user before running it +# configure key keybindings +bindkey -e # emacs key bindings +bindkey ' ' magic-space # do history expansion on space +bindkey '^U' backward-kill-line # ctrl + U +bindkey '^[[3;5~' kill-word # ctrl + Supr +bindkey '^[[3~' delete-char # delete +bindkey '^[[1;5C' forward-word # ctrl + -> +bindkey '^[[1;5D' backward-word # ctrl + <- +bindkey '^[[5~' beginning-of-buffer-or-history # page up +bindkey '^[[6~' end-of-buffer-or-history # page down +bindkey '^[[H' beginning-of-line # home +bindkey '^[[F' end-of-line # end +bindkey '^[[Z' undo # shift + tab undo last action -### --- Inputs Config ------------------------------------ -# vim keys, then override stuff. -bindkey -v -bindkey "^[[1;5C" forward-word -bindkey "^[[1;5D" backward-word -bindkey -s "^X" 'n^M' - -### ---- EXPAND DOTS ------------------------------------- -function expand-dots() { - local MATCH - if [[ $LBUFFER =~ '(^| )\.\.\.+' ]]; then - LBUFFER=$LBUFFER:fs%\.\.\.%../..% - fi -} - -function expand-dots-then-expand-or-complete() { - zle expand-dots - zle expand-or-complete -} - -function expand-dots-then-accept-line() { - zle expand-dots - zle accept-line -} - -zle -N expand-dots -zle -N expand-dots-then-expand-or-complete -zle -N expand-dots-then-accept-line -bindkey '^I' expand-dots-then-expand-or-complete -bindkey '^M' expand-dots-then-accept-line - -### ---- THEMES ----------------------------------- -PS1='%B%F{red}%n@%m%k %B%F{cyan}%(4~|...|)%3~%F{white} %# %b%f%k' - -### ---- ZSH MODULES ----------------------------------- -fpath+=$ZSH/zfunc # enable completion features autoload -Uz compinit compinit -d ~/.cache/zcompdump @@ -127,13 +47,180 @@ zstyle ':completion:*' use-compctl false zstyle ':completion:*' verbose true zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' -# enable color support +# History configurations +HISTFILE=~/.zsh_history +HISTSIZE=1000 +SAVEHIST=2000 +setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTSIZE +setopt hist_ignore_dups # ignore duplicated commands history list +setopt hist_ignore_space # ignore commands that start with space +setopt hist_verify # show command with history expansion to user before running it +#setopt share_history # share command history data + +# force zsh to show the complete history +alias history="history 0" + +# configure `time` format +TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S\ncpu\t%P' + +# make less more friendly for non-text input files, see lesspipe(1) +#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +configure_prompt() { + prompt_symbol=㉿ + # Skull emoji for root terminal + #[ "$EUID" -eq 0 ] && prompt_symbol=💀 + case "$PROMPT_ALTERNATIVE" in + twoline) + PROMPT=$'%F{%(#.blue.green)}┌──${debian_chroot:+($debian_chroot)─}${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV))─}(%B%F{%(#.red.blue)}%n'$prompt_symbol$'%m%b%F{%(#.blue.green)})-[%B%F{reset}%(6~.%-1~/…/%4~.%5~)%b%F{%(#.blue.green)}]\n└─%B%(#.%F{red}#.%F{blue}$)%b%F{reset} ' + # Right-side prompt with exit codes and background processes + #RPROMPT=$'%(?.. %? %F{red}%B⨯%b%F{reset})%(1j. %j %F{yellow}%B⚙%b%F{reset}.)' + ;; + oneline) + PROMPT=$'${debian_chroot:+($debian_chroot)}${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV))}%B%F{%(#.red.blue)}%n@%m%b%F{reset}:%B%F{%(#.blue.green)}%~%b%F{reset}%(#.#.$) ' + RPROMPT= + ;; + backtrack) + PROMPT=$'${debian_chroot:+($debian_chroot)}${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV))}%B%F{red}%n@%m%b%F{reset}:%B%F{blue}%~%b%F{reset}%(#.#.$) ' + RPROMPT= + ;; + esac + unset prompt_symbol +} + +# The following block is surrounded by two delimiters. +# These delimiters must not be modified. Thanks. +# START KALI CONFIG VARIABLES +PROMPT_ALTERNATIVE=twoline +NEWLINE_BEFORE_PROMPT=yes +# STOP KALI CONFIG VARIABLES + +if [ "$color_prompt" = yes ]; then + # override default virtualenv indicator in prompt + VIRTUAL_ENV_DISABLE_PROMPT=1 + + configure_prompt + + # enable syntax-highlighting + if [ -f /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]; then + . /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) + ZSH_HIGHLIGHT_STYLES[default]=none + ZSH_HIGHLIGHT_STYLES[unknown-token]=underline + ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=cyan,bold + ZSH_HIGHLIGHT_STYLES[suffix-alias]=fg=green,underline + ZSH_HIGHLIGHT_STYLES[global-alias]=fg=green,bold + ZSH_HIGHLIGHT_STYLES[precommand]=fg=green,underline + ZSH_HIGHLIGHT_STYLES[commandseparator]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[autodirectory]=fg=green,underline + ZSH_HIGHLIGHT_STYLES[path]=bold + ZSH_HIGHLIGHT_STYLES[path_pathseparator]= + ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]= + ZSH_HIGHLIGHT_STYLES[globbing]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[history-expansion]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[command-substitution]=none + ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[process-substitution]=none + ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=fg=green + ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=fg=green + ZSH_HIGHLIGHT_STYLES[back-quoted-argument]=none + ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[single-quoted-argument]=fg=yellow + ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=fg=yellow + ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]=fg=yellow + ZSH_HIGHLIGHT_STYLES[rc-quote]=fg=magenta + ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[assign]=none + ZSH_HIGHLIGHT_STYLES[redirection]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[comment]=fg=black,bold + ZSH_HIGHLIGHT_STYLES[named-fd]=none + ZSH_HIGHLIGHT_STYLES[numeric-fd]=none + ZSH_HIGHLIGHT_STYLES[arg0]=fg=cyan + ZSH_HIGHLIGHT_STYLES[bracket-error]=fg=red,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-1]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-2]=fg=green,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-3]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-4]=fg=yellow,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-5]=fg=cyan,bold + ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]=standout + fi +else + PROMPT='${debian_chroot:+($debian_chroot)}%n@%m:%~%(#.#.$) ' +fi +unset color_prompt force_color_prompt + +toggle_oneline_prompt(){ + if [ "$PROMPT_ALTERNATIVE" = oneline ]; then + PROMPT_ALTERNATIVE=twoline + else + PROMPT_ALTERNATIVE=oneline + fi + configure_prompt + zle reset-prompt +} +zle -N toggle_oneline_prompt +bindkey ^P toggle_oneline_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*|Eterm|aterm|kterm|gnome*|alacritty) + TERM_TITLE=$'\e]0;${debian_chroot:+($debian_chroot)}${VIRTUAL_ENV:+($(basename $VIRTUAL_ENV))}%n@%m: %~\a' + ;; +*) + ;; +esac + +precmd() { + # Print the previously configured title + print -Pnr -- "$TERM_TITLE" + + # Print a new line before the prompt, but only if it is not the first line + if [ "$NEWLINE_BEFORE_PROMPT" = yes ]; then + if [ -z "$_NEW_LINE_BEFORE_PROMPT" ]; then + _NEW_LINE_BEFORE_PROMPT=1 + else + print "" + fi + fi +} + +# enable color support of ls, less and man, and also add handy aliases if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" export LS_COLORS="$LS_COLORS:ow=30;44:" # fix ls color for folders with 777 permissions - alias dir='dir --color=auto' - alias vdir='vdir --color=auto' + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' @@ -154,52 +241,19 @@ if [ -x /usr/bin/dircolors ]; then zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' fi -### ---- PLUGINS ----------------------------------- -source $ZSH/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh -source $ZSH/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh -source ~/.local/share/fzf/key-bindings.zsh -source ~/.local/share/fzf/completion.zsh -fpath=($ZSH/plugins/zsh-completions/src $fpath) +# some more ls aliases +alias ll='ls -l' +alias la='ls -A' +alias l='ls -CF' -### --- fzf Config ------------------------------------ -export FZF_CTRL_T_OPTS="--preview '(highlight -O ansi -l {} 2> /dev/null || cat {} || tree -C {}) 2> /dev/null | head -200'" -export FZF_CTRL_R_OPTS='--no-sort --exact' - -### --- nnn Config ------------------------------------ -source ~/.local/share/nnn/quitcd/quitcd.bash_zsh -export NNN_PLUG='j:jump;z:autojump;' - -### --- kitty Config ------------------------------------ -# $KITTY_TERM is a custom envar I set in the kitty conf -# this stuff does not work nicely with tmux, just make them regular aliases. Shows an error if you use them in another terminal -#if [[ "$KITTY_TERM" -eq "TRUE" ]] -#then -# alias ssh="kitty +kitten ssh" -# alias tmux="export KITTY_TERM='TRUE'; tmux" -#fi -alias kssh="kitty +kitten ssh" -alias kimg="kitty +kitten icat" -# kdiff does not work on my system for some reason -#alias kdiff="kitty +kitten diff" - -### --- zoxide Config ------------------------------------ -if ! command -v zoxide &> /dev/null -then - # zoxide not installed, skipping - # do nothing -else - eval "$(zoxide init zsh)" +# enable auto-suggestions based on the history +if [ -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh ]; then + . /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh + # change suggestion color + ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#999' fi -### load unversioned zsh code -if [ -f ~/.zsh.local ]; then - source ~/.zsh.local -else - touch ~/.zsh.local +# enable command-not-found if installed +if [ -f /etc/zsh_command_not_found ]; then + . /etc/zsh_command_not_found fi - -### --- pyenv Config ------------------------------------- -export PYENV_ROOT="$HOME/.pyenv" -[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" -eval "$(pyenv init -)" -eval "$(pyenv virtualenv-init - zsh)"