nixrice/.config/zsh/.zshrc
2023-12-05 22:07:56 -05:00

183 lines
5.7 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/zsh
[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
source "$EAT_SHELL_INTEGRATION_DIR/zsh"
# ZSH Configurations
unsetopt autocd # Change directory just by typing its name (hurts performance)
setopt interactivecomments # Allow comments in interactive mode
setopt complete_aliases # Allows auto-completion with aliases
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
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
unsetopt ksharrays # 0-indexing arrays breaks highlighting
# vi mode
bindkey -v
bindkey -M vicmd -r ":"
export KEYTIMEOUT=1
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q"
}
zle -N zle-line-init
echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
## ALIASES ##
# The rice repo
alias config='git --git-dir $HOME/repos/dotfiles/ --work-tree=$HOME'
alias pypr='sh -c pypr'
alias asciiquarium='asciiquarium -t'
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias python='python3'
alias xournal='xournalpp'
alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
alias sxiv='nsxiv'
alias blueman='blueman-manager'
alias spotify='dlkiller spotify'
alias zoom='dlkiller zoom'
alias tor='torbrowser-launcher'
alias emax="devour emacsclient -c -a 'emacs' 1>/dev/null"
alias em="emacsclient -nw -a 'emacs -nw'"
# Print out all colors
alias colors='for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$"\n"}; done'
# Colors
alias ls='LC_COLLATE=C ls --color=auto --group-directories-first -hN -A'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias diff='diff --color=auto'
alias ip='ip --color=auto'
## FUNCTIONS ##
function lfcd {
tmp="$(mktemp)"
command lf -last-dir-path="$tmp" "$@"
if [ -f "$tmp" ]; then
dir="$(cat "$tmp")"
rm -f "$tmp"
if [ -d "$dir" ]; then
if [ "$dir" != "$(pwd)" ]; then
cd "$dir"
fi
fi
fi
}
# This script was automatically generated by the broot program
# More information can be found in https://github.com/Canop/broot
# This function starts broot and executes the command
# it produces, if any.
# It's needed because some shell commands, like `cd`,
# have no useful effect if executed in a subshell.
function br {
local cmd cmd_file code
cmd_file=$(mktemp)
if broot --outcmd "$cmd_file" "$@"; then
cmd=$(<"$cmd_file")
command rm -f "$cmd_file"
eval "$cmd"
else
code=$?
command rm -f "$cmd_file"
return "$code"
fi
}
function nix_shell_menu {
shell_dir="$HOME/shells"
shells=$(ls "$shell_dir")
selection=$(echo "$shells" | rofi -dmenu)
nix-shell "$shell_dir/$selection" --run "
export name=${selection%.*};
$([ "$1" = "fhs" ] && echo "fhs-run ")$([ "$1" = "sudo" ] && echo "sudo ")$SHELL
"
}
# function man () {
# emacsclient -nw --eval '(progn (man "'$1'"))'
# }
## KEYBINDS ##
bindkey -s '^e' 'lfcd\n'
bindkey -s '^n' 'nix_shell_menu'
bindkey -s '^[^M' 'nohup $TERMINAL -e $SHELL -c "cd $PWD && exec $SHELL" >/dev/null 2>&1 & \n'
# Enable completion features
autoload -Uz compinit
compinit -d ~/.cache/zcompdump
zstyle ':completion:*:*:*:*:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # case insensitive tab completion
# Remove green background of simlinks
LS_COLORS+=':ow=01;33'
# Don't consider certain characters part of the word
WORDCHARS=${WORDCHARS//\/}
# History configurations
export HISTFILE=~/.local/share/history
HISTSIZE=1000
SAVEHIST=2000
alias history="history 0" # force zsh to show the complete history
export GPG_TTY=$(tty)
if [ ! -z "$(grep nixos /etc/os-release)" ]; then
# Shell niceties
source /run/current-system/sw/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /run/current-system/sw/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# Use zsh as default nix build shell
source /run/current-system/sw/share/zsh-nix-shell/nix-shell.plugin.zsh
nix-shell-name() {
# If hopping into a pkg subshell, the shell name should reflect the
# package linked. (i.e.: 'nix-shell -p nyancat' => 'export name=nyancat')
if [ "$1" = "-p" ]; then
nix-shell "$@" --command "export name='$2'"
else
nix-shell "$@"
fi
}
alias nix-shell='nix-shell-name'
else
source ~/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh
fi
source ~/.config/zsh/.zshhighlighting
if [ -f ~/.config/zsh/.zshpersonalrc ]; then
source ~/.config/zsh/.zshpersonalrc
fi
eval "$(starship init zsh)"