aboutsummaryrefslogtreecommitdiff
path: root/linux/home/.config/zsh/.zshrc
blob: acb122503b13c02086908494be81586a22a141d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114

#  ███████╗███████╗██╗  ██╗██████╗  ██████╗
#  ╚══███╔╝██╔════╝██║  ██║██╔══██╗██╔════╝
#    ███╔╝ ███████╗███████║██████╔╝██║
#   ███╔╝  ╚════██║██╔══██║██╔══██╗██║
#  ███████╗███████║██║  ██║██║  ██║╚██████╗
#  ╚══════╝╚══════╝╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝

# Profile zsh time
#zmodload zsh/zprof

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

# Terminal key bindings
#stty intr '^q' # Free Ctrl+C for copy use Ctrl+Q instead for Interrupt
stty lnext '^-' # Free Ctrl+V for paste use Ctrl+- instead for Literal next
stty stop undef # Disable Ctrl+S to freeze terminal
stty start undef # Disable Ctrl+Q nfreeze terminal

# Set the current prompt file (e.g., prompt, or prompt_minimal)
ZSH_PROMPT="${ZSH_PROMPT:-prompt}"
#ZSH_PROMPT="${ZSH_PROMPT:-prompt_minimal}"
#ZSH_PROMPT="${ZSH_PROMPT:-prompt_new}"
#ZSH_PROMPT="${ZSH_PROMPT:-prompt_simple}"

# Source common Zsh files (excluding any that start with 'prompt')
ZSH_SOURCES=()

for zsh_source in "$HOME"/.config/zsh/user/*.zsh; do
    if [[ $(basename "$zsh_source") == prompt* && $(basename "$zsh_source" .zsh) != "$ZSH_PROMPT" ]]; then
        continue
    fi
    ZSH_SOURCES+=("$zsh_source")
done

# Faster SSH
if [[ -n "$SSH_CLIENT" ]]; then
    export KEYTIMEOUT=10
else
    export KEYTIMEOUT=15
fi

# Prevent non-login shell anomalies or toolchain misidentification in VS Code
#[[ "$TERM_PROGRAM" == "vscode" ]] && unset ARGV0
#[[ -n "$TERM_PROGRAM" && "$TERM_PROGRAM" == "vscode" ]] && unset ARGV0
if [[ "${TERM_PROGRAM:-}" == "vscode" ]]; then
  unset ARGV0
fi

# Tmux default session
#if [ "$TERM_PROGRAM" != "vscode" ] && command -v tmux &> /dev/null && [ -n "$PS1" ] && [ -n "$DISPLAY" ] && [ -z "$TMUX" ]; then
#    if ! tmux list-sessions | grep -q '^tmux:'; then
#        tmux new -s tmux
#    fi
#fi

# Enable various options for Zsh behavior
setopt interactive_comments      # Allow comments to appear in interactive mode
unsetopt BEEP                    # Disable the system beep (to prevent annoying beeps)
setopt extendedglob              # Enable extended globbing for complex pattern matching
setopt nomatch                   # Prevent errors when a glob pattern doesn't match any files
setopt notify                    # Notify when background jobs complete
setopt completeinword            # Allow tab completion within words
setopt prompt_subst              # Allow prompt variables to be substituted

# Enable automatic directory navigation
setopt autocd                    # Automatically change to a directory if the directory name is typed alone
setopt AUTO_PUSHD                # Save more directory history, and use "cd -" with tab completion

# Optional: Uncomment to disable waiting dots on completion
# COMPLETION_WAITING_DOTS="false"

# Hide history of commands starting with a space
setopt histignorespace           # Do not save commands that start with a space in the history

# Source ZSH files
for zsh_source in "${ZSH_SOURCES[@]}"; do
    source "$zsh_source"
done

##########    Source Plugins, should be last    ##########
#source /usr/share/nvm/init-nvm.sh

# Load fzf keybindings and completion if fzf is installed
if command -v fzf >/dev/null 2>&1; then
    FZF_BASE="/usr/local/bin/fzf/shell"
    [[ -f "${FZF_BASE}/key-bindings.zsh" ]] && source "${FZF_BASE}/key-bindings.zsh"
    [[ -f "${FZF_BASE}/completion.zsh" ]] && source "${FZF_BASE}/completion.zsh"
fi



#source $(which virtualenvwrapper.sh)

# Suggest aliases for commands
source ~/.config/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh

# Load zsh-syntax-highlighting
source ~/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

# Load fish like auto suggestions
source ~/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh
source ~/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

DISABLE_MAGIC_FUNCTIONS=true

# Zoxide (cd alternative)
if command -v zoxide >/dev/null 2>&1; then
    eval "$(zoxide init zsh)"
fi

# Profile zsh time
#zprof              # At the end of .zshrc