From 98f74130a3c2ded17741aea983a638bb68d873d3 Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Tue, 27 May 2025 15:38:41 +1000 Subject: [PATCH] feat: Speedup zsh config --- .zshrc | 232 ++++++++++++++++++--------------------------------------- 1 file changed, 72 insertions(+), 160 deletions(-) diff --git a/.zshrc b/.zshrc index 90b1500..16c6c99 100644 --- a/.zshrc +++ b/.zshrc @@ -1,191 +1,103 @@ -# If you come from bash you might have to change your $PATH. export PATH=$HOME/bin:/usr/local/bin:$PATH +# ~/.zshrc optimized for performance -# Path to your oh-my-zsh installation. + +### 🚀 Performance Tweaks +# Avoid compaudit delays unless root +autoload -Uz compinit +zstyle ':completion:*' use-cache on +zstyle ':completion:*' cache-path ~/.zsh/cache +if [[ $EUID -ne 0 ]]; then + compinit -C -d ~/.zsh/cache/zcompdump +else + compinit -d ~/.zsh/cache/zcompdump +fi + +# TMP profiler +zmodload zsh/zprof + +### 📦 Plugin & Framework Setup export ZSH="$HOME/.oh-my-zsh" - -# Set name of the theme to load --- if set to "random", it will -# load a random theme each time oh-my-zsh is loaded, in which case, -# to know which specific one was loaded, run: echo $RANDOM_THEME -# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes ZSH_THEME="robbyrussell" +plugins=(nvm git sudo systemadmin tldr) -# Set list of themes to pick from when loading at random -# Setting this variable when ZSH_THEME=random will cause zsh to load -# a theme from this variable instead of looking in $ZSH/themes/ -# If set to an empty array, this variable will have no effect. -# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) - -# Uncomment the following line to use case-sensitive completion. -# CASE_SENSITIVE="true" - -# Uncomment the following line to use hyphen-insensitive completion. -# Case-sensitive completion must be off. _ and - will be interchangeable. -# HYPHEN_INSENSITIVE="true" - -# Uncomment one of the following lines to change the auto-update behavior -# zstyle ':omz:update' mode disabled # disable automatic updates -# zstyle ':omz:update' mode auto # update automatically without asking -# zstyle ':omz:update' mode reminder # just remind me to update when it's time - -# Uncomment the following line to change how often to auto-update (in days). -# zstyle ':omz:update' frequency 13 - -# Uncomment the following line if pasting URLs and other text is messed up. -# DISABLE_MAGIC_FUNCTIONS="true" - -# Uncomment the following line to disable colors in ls. -# DISABLE_LS_COLORS="true" - -# Uncomment the following line to disable auto-setting terminal title. -# DISABLE_AUTO_TITLE="true" - -# Uncomment the following line to enable command auto-correction. -# ENABLE_CORRECTION="true" - -# Uncomment the following line to display red dots whilst waiting for completion. -# You can also set it to another string to have that shown instead of the default red dots. -# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" -# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) -# COMPLETION_WAITING_DOTS="true" - -# Uncomment the following line if you want to disable marking untracked files -# under VCS as dirty. This makes repository status check for large repositories -# much, much faster. -# DISABLE_UNTRACKED_FILES_DIRTY="true" - -# Uncomment the following line if you want to change the command execution time -# stamp shown in the history command output. -# You can set one of the optional three formats: -# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" -# or set a custom format using the strftime function format specifications, -# see 'man strftime' for details. -# HIST_STAMPS="mm/dd/yyyy" - -# Would you like to use another custom folder than $ZSH/custom? -# ZSH_CUSTOM=/path/to/new-custom-folder - -# Which plugins would you like to load? -# Standard plugins can be found in $ZSH/plugins/ -# Custom plugins may be added to $ZSH_CUSTOM/plugins/ -# Example format: plugins=(rails git textmate ruby lighthouse) -# Add wisely, as too many plugins slow down shell startup. -plugins=(git sudo systemadmin tldr) +# Lazy-load nvm +zstyle ':omz:plugins:nvm' lazy yes source $ZSH/oh-my-zsh.sh -# User configuration -# export MANPATH="/usr/local/man:$MANPATH" - -# You may need to manually set your language environment -# export LANG=en_US.UTF-8 - -# Preferred editor for local and remote sessions -# if [[ -n $SSH_CONNECTION ]]; then -# export EDITOR='vim' -# else -# export EDITOR='mvim' -# fi - -# Compilation flags -# export ARCHFLAGS="-arch x86_64" - -# Set personal aliases, overriding those provided by oh-my-zsh libs, -# plugins, and themes. Aliases can be placed here, though oh-my-zsh -# users are encouraged to define aliases within the ZSH_CUSTOM folder. -# For a full list of active aliases, run `alias`. -# -# Example aliases -# alias zshconfig="mate ~/.zshrc" -# alias ohmyzsh="mate ~/.oh-my-zsh" +### 🔧 Environment Config export EDITOR=nano export VISUAL=nano +export ANDROID_HOME="$HOME/Android/Sdk" +# Set path at the start to ensure all commands can find their binaries +export PATH="/usr/bin:$PATH" +export PATH="$HOME/.local/bin:$PATH" +export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH" +export PATH="$ANDROID_HOME/platform-tools:$PATH" +export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH" +export PATH="$HOME/.pub-cache/bin:$PATH" +export PATH="/opt/flutter/flutter/bin:$PATH" +export PATH="$HOME/go/bin:$PATH" +export PATH="$HOME/Downloads/go/bin:$PATH" +export PATH="$HOME/Downloads/idea-IU-232.10072.27/bin:$PATH" +export PATH="$HOME/exe/zig-linux-x86_64-0.13.0:$PATH" +export PATH="$HOME/Downloads/javacc-javacc-7.0.13/javacc-javacc-7.0.13/scripts:$PATH" +export PATH="$HOME/.atuin/bin:$PATH" -#eval "$(oh-my-posh init zsh --config ~/theme.omp.json)" +### ⚙️ Tools Init +eval "$(zoxide init --cmd cd zsh)" +eval "$(oh-my-posh init zsh --config ~/theme.omp.json)" +eval "$(atuin init zsh --disable-up-arrow)" +bindkey '^[[1;5A' atuin-up-search -export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm -[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion +. "$HOME/.atuin/bin/env" +# Zellij auto-start +ZELLIJ_AUTO_EXIT=true +eval "$(zellij setup --generate-auto-start zsh)" -export ANDROID_HOME=/home/$USER/Android/Sdk +### 🐚 Shell Options +setopt NO_SHARE_HISTORY -# Path stuff -export PATH="/home/$USER/Downloads/go/bin:$PATH" -export PATH="/home/$USER/Downloads/idea-IU-232.10072.27/bin:$PATH" -export PATH="/home/$USER/.local/bin:$PATH" -export PATH="$PATH:$ANDROID_HOME/platform-tools" -export PATH="$PATH:/home/$USER/Android/Sdk/cmdline-tools/latest/bin/" -export PATH="$PATH:$HOME/.pub-cache/bin" -export PATH="$PATH:/opt/flutter/flutter/bin" -export PATH="/home/$USER/.local/share/solana/install/active_release/bin:$PATH" -export PATH="$PATH:/home/$USER/exe/zig-linux-x86_64-0.13.0" -export PATH="$PATH:/home/$USER/go/bin" - - -export FZF_DEFAULT_OPTS='--preview "bat --color=always {}"' -#export MANPAGER="sh -c 'col -bx | bat -l man -p'" - - - - -# Alias stuff +### 💻 Aliases +alias reload='exec zsh' alias hcurl='curl --doh-url https://hnsdoh.com/dns-query' alias ls='eza --icons=auto' alias ll='eza --long --group --header --icons --classify' -alias ani-cli='FZF_DEFAULT_OPTS= ani-cli' - -eval "$(zoxide init --cmd cd zsh)" -eval "$(oh-my-posh init zsh --config ~/theme.omp.json)" - -alias z='zellij' -alias za='zellij attach' tre() { command tre "$@" && source "/tmp/tre_aliases_$USER" 2>/dev/null; } alias tree=tre +alias z='zellij' +alias za='zellij attach' +alias open='xdg-open' -alias opacity='/home/$USER/scripts/opacity.sh' -alias op='/home/$USER/scripts/opacity.sh' -alias blur='/home/$USER/scripts/blur.sh' -alias music='/home/$USER/scripts/music.sh' -alias venv='source /home/$USER/scripts/venv.sh' -alias copy='/home/$USER/scripts/copy.sh' -alias upload='/home/$USER/scripts/upload.sh' -alias upload_latest_video='/home/$USER/scripts/upload_latest_video.py' -alias ts='/home/$USER/scripts/ts.sh' -alias hold='/home/$USER/scripts/hold.sh' -alias message='/home/$USER/scripts/message.sh' -alias dockerstart='/home/$USER/scripts/dockerstart.sh' -alias dockerstop='/home/$USER/scripts/dockerstop.sh' -alias domains='/home/$USER/scripts/domains.py' -alias fix_touchpad='/home/$USER/scripts/fix_touchpad.sh' -alias wallpaper='/home/$USER/scripts/wallpaper.py' -alias reload='exec zsh' +# ani-cli with preview +alias ani-cli='FZF_DEFAULT_OPTS= ani-cli' -alias open=xdg-open +# Personal scripts +for cmd in opacity op blur music venv copy upload upload_latest_video ts hold message dockerstart dockerstop domains fix_touchpad wallpaper; do + alias $cmd="$HOME/scripts/${cmd}.sh" +done +alias upload_latest_video='$HOME/scripts/upload_latest_video.py' +alias domains='$HOME/scripts/domains.py' -# Use gitkraken's cli tool -unalias gk +# GitKraken CLI +unalias gk 2>/dev/null +# unzip to folder unzip() { /usr/bin/unzip -d "${1%.*}" "$1" } +# FZF config +export FZF_DEFAULT_OPTS='--preview "bat --color=always {}"' +# Completion paths +fpath+=(${ZDOTDIR:-~}/.zsh_functions) +FPATH+="$HOME/Git/eza/completions/zsh" +export FPATH -. "$HOME/.atuin/bin/env" - -eval "$(atuin init zsh --disable-up-arrow)" -# Bind CTRL+UP to atuin search -bindkey '^[[1;5A' atuin-up-search - -fpath+=${ZDOTDIR:-~}/.zsh_functions -FPATH+=${ZDOTDIR:-~}/.zsh_functions -export FPATH="/home/$USER/Git/eza/completions/zsh:$FPATH" - -# Start zellij -ZELLIJ_AUTO_EXIT=true -eval "$(zellij setup --generate-auto-start zsh)" -setopt NO_SHARE_HISTORY - -export PATH="$PATH:/home/$USER/Downloads/javacc-javacc-7.0.13/javacc-javacc-7.0.13/scripts" +# Optional: compile config for faster loading +# zcompile ~/.zshrc +# zcompile ~/.zsh/cache/zcompdump