160 lines
5.0 KiB
Bash
Executable File
160 lines
5.0 KiB
Bash
Executable File
#!/bin/zsh
|
|
# Zsh configuration file
|
|
|
|
# History configuration for persistent history across tmux sessions
|
|
export HISTFILE="$HOME/.zsh_history"
|
|
export HISTSIZE=50000
|
|
export SAVEHIST=50000
|
|
setopt SHARE_HISTORY # Share history between all sessions
|
|
setopt HIST_IGNORE_ALL_DUPS # Remove older duplicate entries from history
|
|
setopt HIST_FIND_NO_DUPS # Don't display duplicates when searching history
|
|
setopt HIST_REDUCE_BLANKS # Remove superfluous blanks from history items
|
|
setopt INC_APPEND_HISTORY # Write to history file immediately, not when shell exits
|
|
setopt HIST_VERIFY # Don't execute immediately upon history expansion
|
|
|
|
# Source common profile
|
|
[ -f "$HOME/.shell-common/profile.common" ] && source "$HOME/.shell-common/profile.common"
|
|
|
|
# Zsh-specific configurations
|
|
# Docker CLI completions (macOS specific path)
|
|
if [ "$OS" = "macos" ] && [ -d "/Users/jens/.docker/completions" ]; then
|
|
fpath=(/Users/jens/.docker/completions $fpath)
|
|
fi
|
|
|
|
# Enable completions
|
|
autoload -Uz compinit
|
|
compinit
|
|
|
|
# Source fzf files for Ubuntu/Debian systems
|
|
if [[ -f /usr/share/doc/fzf/examples/key-bindings.zsh ]]; then
|
|
source /usr/share/doc/fzf/examples/key-bindings.zsh
|
|
fi
|
|
if [[ -f /usr/share/doc/fzf/examples/completion.zsh ]]; then
|
|
source /usr/share/doc/fzf/examples/completion.zsh
|
|
fi
|
|
|
|
# Useful aliases with fzf
|
|
alias fzp='fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"'
|
|
alias fzd='cd $(fd --type d --hidden --follow --exclude .git | fzf --preview "tree -C {} | head -200")'
|
|
alias fzv='vim $(fzf --preview "bat --color=always --style=numbers --line-range=:500 {}")'
|
|
|
|
# Git + fzf aliases
|
|
alias fgb='git branch | fzf | xargs git checkout'
|
|
alias fgl='git log --oneline | fzf --preview "git show --color=always {1}" | awk "{print \$1}" | xargs git show'
|
|
|
|
# Emacs client aliases (connect to daemon with graphical frame by default)
|
|
alias ec='/usr/local/bin/emacsclient -cn'
|
|
alias et='/usr/local/bin/emacsclient -t'
|
|
export EDITOR='/usr/local/bin/emacsclient -t'
|
|
export VISUAL='/usr/local/bin/emacsclient -c'
|
|
|
|
# Tmux session switcher with fzf
|
|
fts() {
|
|
local session
|
|
session=$(tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --preview "tmux list-windows -t {} | column -t" --preview-window=down:20%) && tmux switch-client -t "$session"
|
|
}
|
|
|
|
# Enhanced Zsh Prompt Configuration (now handled by Oh My Zsh + Spaceship)
|
|
# Enable prompt substitution and colors
|
|
# setopt PROMPT_SUBST
|
|
# autoload -U colors && colors
|
|
|
|
# Git prompt function
|
|
# git_prompt_info() {
|
|
# local ref
|
|
# ref=$(git symbolic-ref HEAD 2> /dev/null) || \
|
|
# ref=$(git rev-parse --short HEAD 2> /dev/null) || return
|
|
#
|
|
# # Get git status
|
|
# local git_status=""
|
|
# local STATUS=$(git status --porcelain 2> /dev/null | tail -1)
|
|
#
|
|
# if [[ -n $STATUS ]]; then
|
|
# git_status=" %{$fg[yellow]%}✗%{$reset_color%}"
|
|
# else
|
|
# git_status=" %{$fg[green]%}✓%{$reset_color%}"
|
|
# fi
|
|
#
|
|
# echo " %{$fg[cyan]%}(${ref#refs/heads/}${git_status}%{$fg[cyan]%})%{$reset_color%}"
|
|
# }
|
|
#
|
|
# # Virtual environment indicator
|
|
# virtualenv_prompt_info() {
|
|
# if [[ -n "$VIRTUAL_ENV" ]]; then
|
|
# echo "%{$fg[magenta]%}($(basename $VIRTUAL_ENV))%{$reset_color%} "
|
|
# fi
|
|
# }
|
|
#
|
|
# # Exit code indicator
|
|
# exit_code_prompt() {
|
|
# echo "%(?.%{$fg[green]%}➜%{$reset_color%}.%{$fg[red]%}➜%{$reset_color%})"
|
|
# }
|
|
#
|
|
# # Directory with truncation
|
|
# directory_prompt() {
|
|
# echo "%{$fg[blue]%}%3~%{$reset_color%}"
|
|
# }
|
|
#
|
|
# # Username and hostname for SSH sessions
|
|
# user_host_prompt() {
|
|
# if [[ -n "$SSH_CONNECTION" ]]; then
|
|
# echo "%{$fg[yellow]%}%n@%m%{$reset_color%} "
|
|
# fi
|
|
# }
|
|
#
|
|
# # Time in 24-hour format
|
|
# time_prompt() {
|
|
# echo "%{$fg[lightgray]%}%T%{$reset_color%}"
|
|
# }
|
|
#
|
|
# # Main prompt
|
|
# PROMPT='$(user_host_prompt)$(virtualenv_prompt_info)$(directory_prompt)$(git_prompt_info) $(exit_code_prompt) '
|
|
#
|
|
# # Right prompt with time
|
|
# RPROMPT='$(time_prompt)'
|
|
#
|
|
# # Enable command execution time display
|
|
# function preexec() {
|
|
# timer=${timer:-$SECONDS}
|
|
# }
|
|
#
|
|
# function precmd() {
|
|
# if [ $timer ]; then
|
|
# timer_show=$(($SECONDS - $timer))
|
|
# if [ $timer_show -ge 3 ]; then
|
|
# export RPS1="%{$fg[gray]%}${timer_show}s%{$reset_color%} $(time_prompt)"
|
|
# else
|
|
# export RPS1="$(time_prompt)"
|
|
# fi
|
|
# unset timer
|
|
# fi
|
|
# }
|
|
|
|
# Oh My Zsh compatibility settings (for OMZ plugins)
|
|
export ZSH="$HOME/.dotfiles/zsh/oh-my-zsh"
|
|
export ZSH_CACHE_DIR="$HOME/.cache/oh-my-zsh"
|
|
mkdir -p "$ZSH_CACHE_DIR/completions"
|
|
|
|
# Sheldon plugin manager
|
|
export SHELDON_CONFIG_FILE="$HOME/.dotfiles/sheldon/plugins.toml"
|
|
|
|
# Cache Sheldon plugins for faster startup
|
|
eval "$(sheldon source)"
|
|
|
|
# Plugin customizations
|
|
# zsh-autosuggestions
|
|
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
|
|
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
|
|
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20
|
|
|
|
# Key bindings for history-substring-search
|
|
bindkey '^[[A' history-substring-search-up
|
|
bindkey '^[[B' history-substring-search-down
|
|
bindkey -M vicmd 'k' history-substring-search-up
|
|
bindkey -M vicmd 'j' history-substring-search-down
|
|
|
|
source /home/jenlue/.config/broot/launcher/bash/br
|
|
|
|
# opencode
|
|
export PATH=/home/jenlue/.opencode/bin:$PATH
|