From 2ff3df02472c16918b58dae10d6f2585e3f2b1ce Mon Sep 17 00:00:00 2001 From: Harivansh Rathi Date: Fri, 13 Mar 2026 13:42:28 -0400 Subject: [PATCH] custom agnoster --- config/agnoster.zsh-theme | 183 ++++++++++++++++++++++++++++++++++++++ home/tmux.nix | 2 + home/zsh.nix | 5 ++ modules/homebrew.nix | 4 +- 4 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 config/agnoster.zsh-theme diff --git a/config/agnoster.zsh-theme b/config/agnoster.zsh-theme new file mode 100644 index 0000000..7bbcebf --- /dev/null +++ b/config/agnoster.zsh-theme @@ -0,0 +1,183 @@ +# vim:ft=zsh ts=2 sw=2 sts=2 +# +# agnoster's Theme - https://gist.github.com/3712874 +# A Powerline-inspired theme for ZSH + +### Segment drawing +CURRENT_BG='NONE' + +case ${SOLARIZED_THEME:-dark} in + light) + CURRENT_FG=${CURRENT_FG:-'white'} + CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'white'} + ;; + *) + CURRENT_FG=${CURRENT_FG:-'black'} + CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'default'} + ;; +esac + +### Theme Configuration Initialization +: ${AGNOSTER_DIR_FG:=${CURRENT_FG}} +: ${AGNOSTER_DIR_BG:=blue} + +: ${AGNOSTER_CONTEXT_FG:=${CURRENT_DEFAULT_FG}} +: ${AGNOSTER_CONTEXT_BG:=black} + +: ${AGNOSTER_GIT_CLEAN_FG:=${CURRENT_FG}} +: ${AGNOSTER_GIT_CLEAN_BG:=green} +: ${AGNOSTER_GIT_DIRTY_FG:=black} +: ${AGNOSTER_GIT_DIRTY_BG:=yellow} + +: ${AGNOSTER_BZR_CLEAN_FG:=${CURRENT_FG}} +: ${AGNOSTER_BZR_CLEAN_BG:=green} +: ${AGNOSTER_BZR_DIRTY_FG:=black} +: ${AGNOSTER_BZR_DIRTY_BG:=yellow} + +: ${AGNOSTER_HG_NEWFILE_FG:=white} +: ${AGNOSTER_HG_NEWFILE_BG:=red} +: ${AGNOSTER_HG_CHANGED_FG:=black} +: ${AGNOSTER_HG_CHANGED_BG:=yellow} +: ${AGNOSTER_HG_CLEAN_FG:=${CURRENT_FG}} +: ${AGNOSTER_HG_CLEAN_BG:=green} + +: ${AGNOSTER_VENV_FG:=black} +: ${AGNOSTER_VENV_BG:=blue} + +: ${AGNOSTER_AWS_PROD_FG:=yellow} +: ${AGNOSTER_AWS_PROD_BG:=red} +: ${AGNOSTER_AWS_FG:=black} +: ${AGNOSTER_AWS_BG:=green} + +: ${AGNOSTER_STATUS_RETVAL_FG:=red} +: ${AGNOSTER_STATUS_ROOT_FG:=yellow} +: ${AGNOSTER_STATUS_JOB_FG:=cyan} +: ${AGNOSTER_STATUS_FG:=${CURRENT_DEFAULT_FG}} +: ${AGNOSTER_STATUS_BG:=black} + +: ${AGNOSTER_STATUS_RETVAL_NUMERIC:=false} +: ${AGNOSTER_GIT_INLINE:=false} +: ${AGNOSTER_GIT_BRANCH_STATUS:=true} + +() { + local LC_ALL="" LC_CTYPE="en_US.UTF-8" + SEGMENT_SEPARATOR=$'\ue0b0' +} + +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 + echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} " + else + echo -n "%{$bg%}%{$fg%} " + fi + CURRENT_BG=$1 + [[ -n $3 ]] && echo -n $3 +} + +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" + else + echo -n "%{%k%}" + fi + echo -n "%{%f%}" + CURRENT_BG='' +} + +git_toplevel() { + local repo_root=$(git rev-parse --show-toplevel) + if [[ $repo_root = '' ]]; then + repo_root=$(git rev-parse --git-dir) + [[ $repo_root = '.' ]] && repo_root=$PWD + fi + echo -n $repo_root +} + +### Prompt components + +prompt_context() { + if [[ -n "$SSH_CLIENT" ]]; then + prompt_segment "$AGNOSTER_CONTEXT_BG" "$AGNOSTER_CONTEXT_FG" "%(!.%{%F{$AGNOSTER_STATUS_ROOT_FG}%}.)%n@%m" + fi +} + +prompt_git_relative() { + local repo_root=$(git_toplevel) + local path_in_repo=$(pwd | sed "s/^$(echo "$repo_root" | sed 's:/:\\/:g;s/\$/\\$/g')//;s:^/::;s:/$::;") + [[ $path_in_repo != '' ]] && prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" "$path_in_repo" +} + +prompt_git() { + (( $+commands[git] )) || return + [[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return + + local PL_BRANCH_CHAR + () { local LC_ALL="" LC_CTYPE="en_US.UTF-8"; PL_BRANCH_CHAR=$'\ue0a0' } + + if [[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then + local dirty ref + dirty=$(parse_git_dirty) + ref=$(command git symbolic-ref HEAD 2>/dev/null) || \ + ref="➦ $(command git rev-parse --short HEAD 2>/dev/null)" + + if [[ -n $dirty ]]; then + prompt_segment "$AGNOSTER_GIT_DIRTY_BG" "$AGNOSTER_GIT_DIRTY_FG" + else + prompt_segment "$AGNOSTER_GIT_CLEAN_BG" "$AGNOSTER_GIT_CLEAN_FG" + fi + + echo -n "${${ref:gs/%/%%}/refs\/heads\//$PL_BRANCH_CHAR }" + fi +} + +prompt_dir() { + if [[ $AGNOSTER_GIT_INLINE == 'true' ]] && $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then + prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" "$(git_toplevel | sed "s:^$HOME:~:")" + else + prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" '%~' + fi +} + +prompt_virtualenv() { + return +} + +prompt_status() { + local -a symbols + [[ $AGNOSTER_STATUS_RETVAL_NUMERIC == 'true' && $RETVAL -ne 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_RETVAL_FG}%}$RETVAL" + [[ $AGNOSTER_STATUS_RETVAL_NUMERIC != 'true' && $RETVAL -ne 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_RETVAL_FG}%}✘" + [[ $UID -eq 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_ROOT_FG}%}⚡" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_JOB_FG}%}⚙" + [[ -n "$symbols" ]] && prompt_segment "$AGNOSTER_STATUS_BG" "$AGNOSTER_STATUS_FG" "$symbols" +} + +prompt_aws() { + [[ -z "$AWS_PROFILE" || "$SHOW_AWS_PROMPT" = false ]] && return + case "$AWS_PROFILE" in + *-prod|*production*) prompt_segment "$AGNOSTER_AWS_PROD_BG" "$AGNOSTER_AWS_PROD_FG" "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + *) prompt_segment "$AGNOSTER_AWS_BG" "$AGNOSTER_AWS_FG" "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + esac +} + +prompt_terraform() { + local terraform_info=$(tf_prompt_info) + [[ -z "$terraform_info" ]] && return + prompt_segment magenta yellow "TF: $terraform_info" +} + +build_prompt() { + RETVAL=$? + prompt_status + prompt_virtualenv + prompt_aws + prompt_terraform + prompt_context + prompt_dir + prompt_git + prompt_end +} + +PROMPT='%{%f%b%k%}$(build_prompt) ' diff --git a/home/tmux.nix b/home/tmux.nix index 152845a..478689d 100644 --- a/home/tmux.nix +++ b/home/tmux.nix @@ -23,8 +23,10 @@ set -g mouse on # Enable extended keys so Shift+Enter and other modified keys work + set -g default-terminal "tmux-256color" set -s extended-keys on set -as terminal-features 'xterm*:extkeys' + set -as terminal-features 'xterm-ghostty:RGB' # Use Vim-style pane navigation (prefix + h/j/k/l) bind h select-pane -L diff --git a/home/zsh.nix b/home/zsh.nix index f2c80c3..af9b99e 100644 --- a/home/zsh.nix +++ b/home/zsh.nix @@ -4,6 +4,9 @@ pkgs, ... }: { + home.file.".oh-my-zsh/custom/themes/agnoster.zsh-theme".source = + ../config/agnoster.zsh-theme; + home.activation.removeLegacyZshLinks = lib.hm.dag.entryBefore ["checkLinkTargets"] '' for path in "$HOME/.zshenv" "$HOME/.zshrc"; do if [ -L "$path" ]; then @@ -53,6 +56,7 @@ envExtra = '' . "$HOME/.cargo/env" + export GHOSTTY_RESOURCES_DIR="${pkgs.ghostty-bin}/Applications/Ghostty.app/Contents/Resources/ghostty" ''; initContent = lib.mkMerge [ @@ -63,6 +67,7 @@ (lib.mkOrder 800 '' export ZSH="${pkgs.oh-my-zsh}/share/oh-my-zsh" + export ZSH_CUSTOM="$HOME/.oh-my-zsh/custom" export ZSH_CACHE_DIR="${config.xdg.cacheHome}/oh-my-zsh" ZSH_THEME="agnoster" plugins=(git) diff --git a/modules/homebrew.nix b/modules/homebrew.nix index 5855926..f235261 100644 --- a/modules/homebrew.nix +++ b/modules/homebrew.nix @@ -8,7 +8,9 @@ cleanup = "uninstall"; }; - taps = []; + taps = [ + "humanlayer/humanlayer" + ]; brews = [];