195 lines
7.1 KiB
Bash
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
|