# Path to your oh-my-zsh configuration. ZSH=$HOME/.oh-my-zsh # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" fi # Set name of the theme to load. # Look in ~/.oh-my-zsh/themes/ # Optionally, if you set this to "random", it'll load a random theme each # time that oh-my-zsh is loaded. ZSH_THEME="powerlevel10k/powerlevel10k" # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh # Powerlevel10k Configuration # Uncomment the following line if you want to disable marking untracked files under VCS as dirty # DISABLE_UNTRACKED_FILES_DIRTY="true" # Powerlevel10k Settings POWERLEVEL9K_MODE="nerdfont-complete" POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon dir vcs) POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status command_execution_time background_jobs time) POWERLEVEL9K_PROMPT_ON_NEWLINE=true POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="" POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="$ " # History Configuration HISTSIZE=10000 # Maximum events in internal history SAVEHIST=10000 # Maximum events in history file HIST_STAMPS="yyyy-mm-dd" # Add timestamps to history setopt HIST_IGNORE_DUPS # Don't record duplicated commands setopt HIST_FIND_NO_DUPS # Don't display duplicates when searching setopt HIST_REDUCE_BLANKS # Remove unnecessary blanks setopt INC_APPEND_HISTORY # Add commands to history immediately setopt EXTENDED_HISTORY # Record command start time and duration # Directory Navigation setopt AUTO_CD # Change directories without typing cd setopt AUTO_PUSHD # Push directories to the stack automatically setopt PUSHD_IGNORE_DUPS # Don't push duplicate directories setopt PUSHD_MINUS # Reverse meaning of +/- when navigating stack DIRSTACKSIZE=10 # Limit directory stack size # Command Line Editing setopt INTERACTIVE_COMMENTS # Allow comments in interactive shell setopt NO_BEEP # Disable beeping setopt COMPLETE_IN_WORD # Allow completion from within a word setopt ALWAYS_TO_END # Move cursor to end of word after completion # Key bindings bindkey "^[[1;5C" forward-word # Ctrl + Right bindkey "^[[1;5D" backward-word # Ctrl + Left bindkey '^[[H' beginning-of-line # Home bindkey '^[[F' end-of-line # End bindkey '^[[3~' delete-char # Delete bindkey '^?' backward-delete-char # Backspace bindkey '^[[A' history-beginning-search-backward # Up arrow bindkey '^[[B' history-beginning-search-forward # Down arrow # Example aliases alias zshconfig="cursor ~/.zshrc" alias ohmyzsh="cursor ~/.oh-my-zsh" # alias python=/usr/local/bin/python3 # alias pip=/usr/local/bin/pip3 # Set to this to use case-sensitive completion # CASE_SENSITIVE="true" # Comment this out to disable weekly auto-update checks # DISABLE_AUTO_UPDATE="true" # Uncomment following line if you want to disable colors in ls # DISABLE_LS_COLORS="true" # Uncomment following line if you want to disable autosetting terminal title. DISABLE_AUTO_TITLE="true" # Uncomment following line if you want red dots to be displayed while waiting for completion COMPLETION_WAITING_DOTS="true" # Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*) # Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ plugins=( copyfile docker extract fzf git git-auto-fetch jira nvm vscode web-search z zsh-autosuggestions zsh-syntax-highlighting # Must be last in the list! ) # Plugin Configurations # FZF export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border --preview 'bat --style=numbers --color=always --line-range :500 {}'" export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" # ZSH Autosuggestions export ZSH_AUTOSUGGEST_STRATEGY=(history completion) export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20 export ZSH_AUTOSUGGEST_USE_ASYNC=true bindkey '^ ' autosuggest-accept # Ctrl + Space to accept suggestion # ZSH Syntax Highlighting export ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor) export ZSH_HIGHLIGHT_PATTERNS=('rm -rf *' 'fg=white,bold,bg=red') # Auto-switch Node version when entering a directory with .nvmrc NVM_AUTOLOAD=1 # SSH Agent configuration from Genehack zstyle :omz:plugins:ssh-agent agent-forwarding on # Load Oh My Zsh source $ZSH/oh-my-zsh.sh # Suppress NVM output for Powerlevel10k instant prompt export NVM_QUIET=1 typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet # Python environment - virtualenv-init (interactive only, base pyenv init is in .zshenv) if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv virtualenv-init -)" fi # Docker source $HOME/.docker/init-zsh.sh || true # iTerm2 integration test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh" # Utility functions listening() { if [ $# -eq 0 ]; then sudo lsof -iTCP -sTCP:LISTEN -n -P elif [ $# -eq 1 ]; then sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1 else echo "Usage: listening [pattern]" fi } # Aliases alias ls='lsd' alias weather='curl wttr.in/Athens' alias mkdir='mkdir -p' # Create parent directories automatically alias h='history' alias path='echo -e ${PATH//:/\\n}' # Pretty print PATH alias now='date +"%T"' alias nowdate='date +"%d-%m-%Y"' [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh # The following lines have been added by Docker Desktop to enable Docker CLI completions. fpath=($HOME/.docker/completions $fpath) autoload -Uz compinit compinit # End of Docker CLI completions