diff --git a/zsh/.zshrc b/zsh/.zshrc index b409c95..d2d8253 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -6,17 +6,7 @@ # 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="agnoster" - -# 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" ) +ZSH_THEME="my_theme" # Uncomment the following line to use case-sensitive completion. # CASE_SENSITIVE="true" @@ -25,10 +15,7 @@ ZSH_THEME="agnoster" # 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 +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 @@ -40,7 +27,7 @@ ZSH_THEME="agnoster" # DISABLE_LS_COLORS="true" # Uncomment the following line to disable auto-setting terminal title. -# DISABLE_AUTO_TITLE="true" +DISABLE_AUTO_TITLE="true" # Uncomment the following line to enable command auto-correction. # ENABLE_CORRECTION="true" @@ -65,15 +52,17 @@ ZSH_THEME="agnoster" # HIST_STAMPS="mm/dd/yyyy" # Would you like to use another custom folder than $ZSH/custom? -# ZSH_CUSTOM=/path/to/new-custom-folder +ZSH_CUSTOM=/home/daveanand/.config/nvim/zsh/custom # 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) - +plugins=( + zsh-syntax-highlighting + zsh-autosuggestions +) source $ZSH/oh-my-zsh.sh # User configuration @@ -93,14 +82,4 @@ 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" +export PATH="$PATH:/usr/bin" diff --git a/zsh/custom/aliases.zsh b/zsh/custom/aliases.zsh new file mode 100644 index 0000000..7144d5d --- /dev/null +++ b/zsh/custom/aliases.zsh @@ -0,0 +1,7 @@ +alias l='-l' +alias ls='lsd' +alias la='ls -a' +alias lla='ls -la' + + +alias fd='fdfind' diff --git a/zsh/custom/plugins/.gitignore b/zsh/custom/plugins/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/zsh/custom/plugins/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/zsh/custom/themes/my_theme.zsh-theme b/zsh/custom/themes/my_theme.zsh-theme new file mode 100644 index 0000000..ec8bd9b --- /dev/null +++ b/zsh/custom/themes/my_theme.zsh-theme @@ -0,0 +1,154 @@ +### Segments of the prompt, default order declaration + +typeset -aHg AGNOSTER_PROMPT_SEGMENTS=( + prompt_status + prompt_context + prompt_virtualenv + prompt_dir + prompt_git + prompt_end +) + +### Segment drawing +# A few utility functions to make it easy and re-usable to draw segmented prompts +WHITE="#c6c6c6", +GREY="#303030" +VIOLET="#d183e8" +BLACK='#080808' +CURRENT_BG='NONE' +if [[ -z "$PRIMARY_FG" ]]; then + PRIMARY_FG=$VIOLET +fi + +# Characters +SEGMENT_SEPARATOR="" +PLUSMINUS="\u00b1" +BRANCH="\ue0a0" +DETACHED="\u27a6" +CROSS="\u2718" +LIGHTNING="\u26a1" +GEAR="\u2699" + +# Begin a segment +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_segment() { + local bg fg + [[ -n $1 ]] && bg="%K{$1}" || bg="%k" + [[ -n $2 ]] && fg="%F{$2}" || fg="%f" + if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then + print -n "%{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%}" + else + print -n "%{$bg%}%{$fg%}" + fi + CURRENT_BG=$1 + [[ -n $3 ]] && print -n $3 +} + +# End the prompt, closing any open segments +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + print -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" + else + print -n "%{%k%}" + fi + print -n "%{%f%}" + CURRENT_BG='' +} + +### Prompt components +# Each component will draw itself, and hide itself if no information needs to be shown + +# Context: user@hostname (who am I and where am I) +prompt_context() { + local user=`whoami` + + if [[ "$user" != "$DEFAULT_USER" || -n "$SSH_CONNECTION" ]]; then + prompt_segment $PRIMARY_FG $PRIMARY_FG " " + prompt_segment $PRIMARY_FG green "%(!.%{%F{yellow}%}.)$user@%m " + fi + PROMPT='%{%f%b%k%}$(prompt_agnoster_main) ' +} + +# Git: branch/detached head, dirty status +prompt_git() { + local color ref + is_dirty() { + test -n "$(git status --porcelain --ignore-submodules)" + } + ref="$vcs_info_msg_0_" + if [[ -n "$ref" ]]; then + if is_dirty; then + color=yellow + ref="${ref} $PLUSMINUS " + else + color=green + ref="${ref} " + fi + if [[ "${ref/.../}" == "$ref" ]]; then + ref="$BRANCH $ref" + else + ref="$DETACHED ${ref/.../}" + fi + prompt_segment $color $PRIMARY_FG + print -n " $ref" + fi +} + +# Dir: current working directory +prompt_dir() { + prompt_segment $BLACK $WHITE ' %~ ' +} + +# Status: +# - was there an error +# - am I root +# - are there background jobs? +prompt_status() { + local symbols + symbols=() + [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}$CROSS" + [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}$LIGHTNING" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$GEAR" + + [[ -n "$symbols" ]] && prompt_segment $PRIMARY_FG default " $symbols " +} + +# Display current virtual environment +prompt_virtualenv() { + if [[ -n $VIRTUAL_ENV ]]; then + color=cyan + prompt_segment $color $PRIMARY_FG + print -Pn " $(basename $VIRTUAL_ENV) " + fi +} + +## Main prompt +prompt_agnoster_main() { + RETVAL=$? + CURRENT_BG='NONE' + for prompt_segment in "${AGNOSTER_PROMPT_SEGMENTS[@]}"; do + [[ -n $prompt_segment ]] && $prompt_segment + done +} + +prompt_agnoster_precmd() { + vcs_info + PROMPT='%{%f%b%k%}$(prompt_agnoster_main) ' +} + +prompt_agnoster_setup() { + autoload -Uz add-zsh-hook + autoload -Uz vcs_info + + prompt_opts=(cr subst percent) + + add-zsh-hook precmd prompt_agnoster_precmd + + zstyle ':vcs_info:*' enable git + zstyle ':vcs_info:*' check-for-changes false + zstyle ':vcs_info:git*' formats '%b' + zstyle ':vcs_info:git*' actionformats '%b (%a)' +} + +prompt_agnoster_setup "$@"