export MISE_SHELL=zsh export __MISE_ORIG_PATH="$PATH" mise() { local command command="${1:-}" if [ "$#" = 0 ]; then command mise return fi shift case "$command" in deactivate|shell|sh) # if argv doesn't contains -h,--help if [[ ! " $@ " =~ " --help " ]] && [[ ! " $@ " =~ " -h " ]]; then eval "$(command mise "$command" "$@")" return $? fi ;; esac command mise "$command" "$@" } _mise_hook() { eval "$(mise hook-env -s zsh)"; } typeset -ag precmd_functions; if [[ -z "${precmd_functions[(r)_mise_hook]+1}" ]]; then precmd_functions=( _mise_hook ${precmd_functions[@]} ) fi typeset -ag chpwd_functions; if [[ -z "${chpwd_functions[(r)_mise_hook]+1}" ]]; then chpwd_functions=( _mise_hook ${chpwd_functions[@]} ) fi _mise_hook if [ -z "${_mise_cmd_not_found:-}" ]; then _mise_cmd_not_found=1 # preserve existing handler if present if typeset -f command_not_found_handler >/dev/null; then functions -c command_not_found_handler _command_not_found_handler fi typeset -gA _mise_cnf_tried # helper for fallback behavior _mise_fallback() { local _cmd="$1"; shift if typeset -f _command_not_found_handler >/dev/null; then _command_not_found_handler "$_cmd" "$@" return $? else print -u2 -- "zsh: command not found: $_cmd" return 127 fi } command_not_found_handler() { local cmd="$1"; shift # never intercept mise itself or retry already-attempted commands if [[ "$cmd" == "mise" || "$cmd" == mise-* || -n "${_mise_cnf_tried["$cmd"]}" ]]; then _mise_fallback "$cmd" "$@" return $? fi # run the hook; only retry if the command is actually found afterward if mise hook-not-found -s zsh -- "$cmd"; then _mise_hook if command -v -- "$cmd" >/dev/null 2>&1; then "$cmd" "$@" return $? fi else # only mark as tried if mise explicitly can't handle it _mise_cnf_tried["$cmd"]=1 fi # fall back _mise_fallback "$cmd" "$@" } fi # shellcheck shell=bash # ============================================================================= # # Utility functions for zoxide. # # pwd based on the value of _ZO_RESOLVE_SYMLINKS. function __zoxide_pwd() { \builtin pwd -L } # cd + custom logic based on the value of _ZO_ECHO. function __zoxide_cd() { # shellcheck disable=SC2164 \builtin cd -- "$@" } # ============================================================================= # # Hook configuration for zoxide. # # Hook to add new entries to the database. function __zoxide_hook() { # shellcheck disable=SC2312 \command zoxide add -- "$(__zoxide_pwd)" } # Initialize hook. \builtin typeset -ga precmd_functions \builtin typeset -ga chpwd_functions # shellcheck disable=SC2034,SC2296 precmd_functions=("${(@)precmd_functions:#__zoxide_hook}") # shellcheck disable=SC2034,SC2296 chpwd_functions=("${(@)chpwd_functions:#__zoxide_hook}") chpwd_functions+=(__zoxide_hook) # Report common issues. function __zoxide_doctor() { [[ ${_ZO_DOCTOR:-1} -ne 0 ]] || return 0 [[ ${chpwd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] || return 0 _ZO_DOCTOR=0 \builtin printf '%s\n' \ 'zoxide: detected a possible configuration issue.' \ 'Please ensure that zoxide is initialized right at the end of your shell configuration file (usually ~/.zshrc).' \ '' \ 'If the issue persists, consider filing an issue at:' \ 'https://github.com/ajeetdsouza/zoxide/issues' \ '' \ 'Disable this message by setting _ZO_DOCTOR=0.' \ '' >&2 } # ============================================================================= # # When using zoxide with --no-cmd, alias these internal functions as desired. # # Jump to a directory using only keywords. function __zoxide_z() { __zoxide_doctor if [[ "$#" -eq 0 ]]; then __zoxide_cd ~ elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]$ ]]; }; then __zoxide_cd "$1" elif [[ "$#" -eq 2 ]] && [[ "$1" = "--" ]]; then __zoxide_cd "$2" else \builtin local result # shellcheck disable=SC2312 result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -- "$@")" && __zoxide_cd "${result}" fi } # Jump to a directory using interactive search. function __zoxide_zi() { __zoxide_doctor \builtin local result result="$(\command zoxide query --interactive -- "$@")" && __zoxide_cd "${result}" } # ============================================================================= # # Commands for zoxide. Disable these using --no-cmd. # function z() { __zoxide_z "$@" } function zi() { __zoxide_zi "$@" } # Completions. if [[ -o zle ]]; then __zoxide_result='' function __zoxide_z_complete() { # Only show completions when the cursor is at the end of the line. # shellcheck disable=SC2154 [[ "${#words[@]}" -eq "${CURRENT}" ]] || return 0 if [[ "${#words[@]}" -eq 2 ]]; then # Show completions for local directories. _cd -/ elif [[ "${words[-1]}" == '' ]]; then # Show completions for Space-Tab. # shellcheck disable=SC2086 __zoxide_result="$(\command zoxide query --exclude "$(__zoxide_pwd || \builtin true)" --interactive -- ${words[2,-1]})" || __zoxide_result='' # Set a result to ensure completion doesn't re-run compadd -Q "" # Bind '\e[0n' to helper function. \builtin bindkey '\e[0n' '__zoxide_z_complete_helper' # Sends query device status code, which results in a '\e[0n' being sent to console input. \builtin printf '\e[5n' # Report that the completion was successful, so that we don't fall back # to another completion function. return 0 fi } function __zoxide_z_complete_helper() { if [[ -n "${__zoxide_result}" ]]; then # shellcheck disable=SC2034,SC2296 BUFFER="z ${(q-)__zoxide_result}" __zoxide_result='' \builtin zle reset-prompt \builtin zle accept-line else \builtin zle reset-prompt fi } \builtin zle -N __zoxide_z_complete_helper [[ "${+functions[compdef]}" -ne 0 ]] && \compdef __zoxide_z_complete z fi # ============================================================================= # # To initialize zoxide, add this to your shell configuration file (usually ~/.zshrc): # # eval "$(zoxide init zsh)" # If you come from bash you might have to change your $PATH. # export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH # Path to your Oh My Zsh installation. 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="nicoulaj" # 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. MAGIC_ENTER_GIT_COMMAND='git status -u . | bat --style=plain -l=sh' MAGIC_ENTER_OTHER_COMMAND='ls -lh . | bat --paging=never -l=ls' plugins=(git gh rake zsh-autosuggestions rails ssh mise mix bun docker docker-compose magic-enter sudo) 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='nvim' # fi # Compilation flags # export ARCHFLAGS="-arch $(uname -m)" # 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 a top-level file in # the $ZSH_CUSTOM folder, with .zsh extension. Examples: # - $ZSH_CUSTOM/aliases.zsh # - $ZSH_CUSTOM/macos.zsh # For a full list of active aliases, run `alias`. # # Example aliases # alias zshconfig="mate ~/.zshrc" # alias ohmyzsh="mate ~/.oh-my-zsh" . "$HOME/.atuin/bin/env" eval "$(atuin init zsh)"