# If you come from bash you might have to change your $PATH. # export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH # ============================================================================= # Homebrew # ============================================================================= if [ "$(arch)" = "arm64" ]; then eval "$(/opt/homebrew/bin/brew shellenv)" else eval "$(/usr/local/bin/brew shellenv)" fi # ============================================================================= # Oh My Zsh # ============================================================================= 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" # 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 z) 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" # ============================================================================= # Environment variables & PATH # ============================================================================= # For clash Verge # export HTTP_PROXY="http://localhost:7897" # export HTTPS_PROXY="http://localhost:7897" export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-22.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH export PATH="/opt/homebrew/opt/node@22/bin:$PATH" export PATH="/Library/TeX/texbin:$PATH" export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH" export MIRALIB=/usr/local/lib/miralib # ============================================================================= # Aliases # ============================================================================= # 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" alias mars='java -jar /opt/homebrew/Caskroom/mars/4.5.1/Mars4_5.jar' # Override oh-my-zsh's run-help alias to enable built-in zsh help unalias run-help autoload run-help HELPDIR=/usr/share/zsh/"${ZSH_VERSION}"/help alias help=run-help # ============================================================================= # Conda # ============================================================================= # >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/Users/dhx/miniconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/Users/dhx/miniconda3/etc/profile.d/conda.sh" ]; then . "/Users/dhx/miniconda3/etc/profile.d/conda.sh" else export PATH="/Users/dhx/miniconda3/bin:$PATH" fi fi unset __conda_setup # <<< conda initialize <<< # ============================================================================= # Plugins # ============================================================================= # zsh-syntax-highlighting source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh # zsh-autosuggestions export ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(forward-word) source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh # zsh-history-substring-search source $(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh # ============================================================================= # Key bindings # Must be set after oh-my-zsh and all plugins are sourced # ============================================================================= # autosuggestions bindkey '^[[C' autosuggest-accept # Tab or right arrow for whole line bindkey '^[f' forward-word # option + right arrow for first word # history-substring-search bindkey '^[[A' history-substring-search-up # ↑ bindkey '^[[B' history-substring-search-down # ↓ bindkey '^P' history-substring-search-up bindkey '^N' history-substring-search-down HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=1 # Custom ↓ behaviour: clear the line when already at the newest entry _history_substring_search_down_then_clear() { if [[ $HISTORY_SUBSTRING_SEARCH_RESULT == '' ]]; then zle .kill-whole-line else zle history-substring-search-down fi } zle -N _history_substring_search_down_then_clear bindkey '^[[B' _history_substring_search_down_then_clear # ============================================================================= # fzf — fuzzy finder (replaces Ctrl+R with interactive history search) # ============================================================================= eval "$(fzf --zsh)" # ============================================================================= # Misc # ============================================================================= # ghcup-env [ -f "/Users/dhx/.ghcup/env" ] && . "/Users/dhx/.ghcup/env"