nixos-configs/dotfiles/zsh/.zshrc

153 lines
4.8 KiB
Bash
Raw Normal View History

2024-09-02 21:22:08 +02:00
# Filename : ~/.zshrc
# Purpose : setup file for zsh
# Author : Jeffrey Serio <hyperreal@fedoraproject.org>
# Homepage : https://hyperreal.coffee
#
# Zsh Manual - https://zsh-manual.netlify.app
# Zsh Guide - https://zsh-guide.netlify.app
#
# ,----[ man -k zsh ]
# |
# | zsh (1) - the Z shell
# | zshall (1) - the Z shell meta-man page
# | zshbuiltins (1) - zsh builtin commands
# | zshcalsys (1) - zsh calendar system
# | zshcompctl (1) - zsh programmable completion
# | zshcompsys (1) - zsh completion system
# | zshcompwid (1) - zsh completion widgets
# | zshcontrib (1) - user contributions to zsh
# | zshexpn (1) - zsh expansion and substitution
# | zshmisc (1) - everything and then some
# | zshmodules (1) - zsh loadable modules
# | zshoptions (1) - zsh options
# | zshparam (1) - zsh parameters
# | zshroadmap (1) - informal introduction to the zsh manual
# | zshtcpsys (1) - zsh tcp system
# | zshzftpsys (1) - zftp function front-end
# | zshzle (1) - zsh command line editor
# `----
#
# Zsh startup sequence
# 1) /etc/zshenv -> Always run for every zsh. (login + interactive + other)
# 2) ~/.zshenv -> Usually run for every zsh. (login + interactive + other)
# 3) /etc/zprofile -> Run for login shells. (login)
# 4) ~/.zprofile -> Run for login shells. (login)
# 5) /etc/zshrc -> Run for interactive shells. (login + interactive)
# 6) ~/.zshrc -> Run for interactive shells. (login + interactive)
# 7) /etc/zlogin -> Run for login shells. (login)
# 8) ~/.zlogin -> Run for login shells. (login)
#
# This file is based on Christian Schneider's zsh configuration
# https://www.strcat.de/dotfiles
# Load Homebrew
if test -d "/home/linuxbrew"; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi
# Plugins
if ! test -f ~/.zplug/init.zsh; then
export ZPLUG_HOME=~/.zplug
git clone https://github.com/zplug/zplug $ZPLUG_HOME
fi
source ~/.zplug/init.zsh
# Use autosuggestions when typing commands
zplug "zsh-users/zsh-autosuggestions"
# Use a keybinding to complete parts of command from the history file
zplug "zsh-users/zsh-history-substring-search"
# Use syntax highlighting when typing commands
zplug "zsh-users/zsh-syntax-highlighting", defer:2
# Press escape twice to prepend `sudo` to the command line
zplug "plugins/sudo", from:oh-my-zsh
# extract archives
zplug "plugins/extract", from:oh-my-zsh
# systemd aliases
zplug "plugins/systemd", from:oh-my-zsh
# bookmarks
zplug "zpm-zsh/zshmarks"
# Load file from ~/.zshrc.d
zplug "~/.zshrc.d", from:local, use:'*'
if ! zplug check; then
zplug install;
exec $SHELL $SHELL_ARGS "$@"
fi
zplug load
# -----------------------------------------------------------------------------
# ENVIRONMENT VARS
# -----------------------------------------------------------------------------
export SHELL=/run/current-system/sw/bin/zsh
export DOOMDIR="${HOME}/shared/doom"
export LS_COLORS=$(vivid generate catppuccin-mocha)
export PAGER="less -X"
export MANWIDTH="88"
export MANROFFOPT="-c"
export MANPAGER="less -X"
if test -x "$(command -v emacs)"; then
EDITOR="emacs"
else
EDITOR="nvim"
fi
export EDITOR
# Have less display colours
# from: https://wiki.archlinux.org/index.php/Color_output_in_console#man
export LESS_TERMCAP_mb=$'\e[1;31m' # begin bold
export LESS_TERMCAP_md=$'\e[1;34m' # begin blink
export LESS_TERMCAP_so=$'\e[01;0;33m' # begin reverse video
export LESS_TERMCAP_us=$'\e[01;31m' # begin underline
export LESS_TERMCAP_me=$'\e[0m' # reset bold/blink
export LESS_TERMCAP_se=$'\e[0m' # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m' # reset underline
export GROFF_NO_SGR=1 # for konsole and gnome-terminal
# HISTSIZE is the number of lines of history that is kept within any given
# running zsh instance. SAVEHIST is the number of lines of history that is
# written out to the HISTFILE when that event occurs. If you use the
# HIST_EXPIRE_DUPS_FIRST option, setting this value larger than the SAVEHIST
# size will give you the difference as a cushion for saving duplicated history
# events.
HISTSIZE=100000
SAVEHIST=65536
# Name of the file used to store command history
HISTFILE=~/.zsh_history
# Language
export LANG="en_US.UTF-8"
# Manpages
export MANPATH="${MANPATH:-/usr/share/man:/usr/local/share/man}"
if [ -d "${HOME}/.fzf/man" ]; then
export MANPATH="${MANPATH}:${HOME}/.fzf/man"
fi
# Bat theme
export BAT_THEME="Catppuccin Mocha"
# Automatically remove duplicates from these arrays
typeset -gU path cdpath manpath fpath
# compatibility with vterm-buffer-name-string in Emacs
autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd() { print -Pn "\e]2;%m:%2~\a" }
# starship.rs
eval "$(starship init zsh)"
# direnv
eval "$(direnv hook zsh)"