dotfiles/.zshrc

195 lines
7.1 KiB
Bash

local_install_dir="$HOME/.local/install"
# =============================================================================
# History configuration.
# =============================================================================
export HISTFILE="$HOME/.zsh_history"
export HISTSIZE=10000
export SAVEHIST=10000
export HISTORY_IGNORE="(ls|cd|pwd|exit)*"
export HIST_STAMPS="yyyy-mm-dd"
setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format.
setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits.
setopt SHARE_HISTORY # Share history between all sessions.
setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again.
setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate.
setopt HIST_IGNORE_SPACE # Do not record an event starting with a space.
setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file.
setopt HIST_VERIFY # Do not execute immediately upon history expansion.
setopt APPEND_HISTORY # append to history file (Default)
setopt HIST_NO_STORE # Don't store history commands
setopt HIST_REDUCE_BLANKS # Remove superfluous blanks from each command line being added to the history.
export FZF_CTRL_R_OPTS="
--preview 'echo {}' --preview-window up:3:hidden:wrap
--bind 'ctrl-/:toggle-preview'
--bind 'ctrl-y:execute-silent(echo -n {2..} | xclip -selection clipboard)+abort'
--color header:italic
--header 'Press CTRL-Y to copy command into clipboard'"
# =============================================================================
# Allow for menu-style tab completion.
# =============================================================================
zstyle ':completion:*' menu select
# =============================================================================
# GPG Initialization (Ensure prompts work properly).
# =============================================================================
export GPG_TTY=$(tty)
# =============================================================================
# Personalized Logging for Shell Setup
# =============================================================================
logging_enabled=false
log_dir="$HOME/.local/log/$USER"
log_file="$log_dir/shell.log"
if [ -d "$log_dir" ]; then
export SHELL_LOG_FILE="$log_file"
logging_enabled=true
touch "$SHELL_LOG_FILE"
fi
# =============================================================================
# Common Environment Configuration
# =============================================================================
# Note: use vim here so that if Neovim isn't setup, we gracefully fall back.
export EDITOR=vim
# =============================================================================
# PATH
# =============================================================================
if [ -d "$HOME/.local/bin" ]; then
export PATH="$HOME/.local/bin:$PATH"
fi
if [ -f "$HOME/.cargo/env" ]; then
. "$HOME/.cargo/env"
elif [ -d "$HOME/.cargo/bin" ]; then
export PATH="$HOME/.cargo/bin:$PATH"
fi
if [ -f ~/.fzf.zsh ]; then
source ~/.fzf.zsh
fi
export JAVA_HOME="$local_install_dir/jdk"
if [ -d "$JAVA_HOME/bin" ]; then
export PATH="$JAVA_HOME/bin:$PATH"
fi
export COURSIER_HOME="$HOME/.local/share/coursier"
if [ -d "$COURSIER_HOME/bin" ]; then
export PATH="$COURSIER_HOME/bin:$PATH"
fi
export GO_HOME="$local_install_dir/go"
if [ -d "$GO_HOME/bin" ]; then
export PATH="$GO_HOME/bin:$PATH"
export GOPATH="$HOME/.local/go"
export PATH="$GOPATH/bin:$PATH"
fi
export N_PREFIX="$HOME/.n"
if [ -d "$N_PREFIX/bin" ]; then
export PATH="$N_PREFIX/bin:$PATH"
fi
# =============================================================================
# SSH Agent Management
# =============================================================================
# Start ssh-agent if it is not already running. If it is running, ensure the
# environment variables are set properly.
ssh_agent_sock_file="$HOME/.ssh-agent-sock"
ssh_agent_pid_file="$HOME/.ssh-agent-pid"
touch $ssh_agent_sock_file
touch $ssh_agent_pid_file
if ps -p $(cat $ssh_agent_pid_file) > /dev/null 2>&1; then
export SSH_AUTH_SOCK="$(cat $ssh_agent_sock_file)"
export SSH_AGENT_PID="$(cat $ssh_agent_pid_file)"
else
# Start a new instance of the SSH agent.
eval "$(ssh-agent)"
# Record the new settings in the agent tracking files.
echo $SSH_AUTH_SOCK > $ssh_agent_sock_file
echo $SSH_AGENT_PID > $ssh_agent_pid_file
fi
# =============================================================================
# Aliases
# =============================================================================
if command -v eza > /dev/null 2>&1; then
alias ls='eza'
alias ll='eza -l'
else
if $logging_enabled; then
echo "[warn] eza is not setup! Attempting to use exa" >> "$log_file"
fi
if command -v exa > /dev/null 2>&1; then
alias ls='exa'
alias ll='exa -l'
else
if $logging_enabled; then
echo "[warn] exa is not setup! Using the system ls" >> "$log_file"
fi
fi
fi
if command -v nvim > /dev/null 2>&1; then
alias vim='nvim'
else
if $logging_enabled; then
echo "[warn] Neovim is not setup! Using the system vim" >> "$log_file"
fi
fi
if command -v podman > /dev/null 2>&1; then
alias docker='podman'
export DOCKER_HOST=unix:///run/podman/podman.sock
export TESTCONTAINERS_RYUK_DISABLED=true
else
if $logging_enabled; then
echo "[warn] Podman is not setup! The 'docker' command will not be available." >> "$log_file"
fi
fi
# =============================================================================
# Scala/SBT Setup
# =============================================================================
if command -v sbt > /dev/null 2>&1; then
export SBT_OPTS="-XX:+UseG1GC -Xmx2048m"
fi
# =============================================================================
# Git Command Completion
# =============================================================================
zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash
fpath=(~/.zsh $fpath)
autoload -Uz compinit && compinit
# =============================================================================
# OPAM Completion
# =============================================================================
[[ ! -r /home/pfm/.opam/opam-init/init.zsh ]] || source /home/pfm/.opam/opam-init/init.zsh > /dev/null 2> /dev/null
# =============================================================================
# Haskell Setup
# =============================================================================
[ -f "$HOME/.ghcup/env" ] && source "$HOME/.ghcup/env"
# =============================================================================
# Initialize Starship
# =============================================================================
eval "$(starship init zsh)"
# =============================================================================
# Enable Command Syntax Highlighting
# This must be the last item in this file.
# =============================================================================
source $local_install_dir/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh