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