From d2d15320969028e29ad5ad505fa1916521e3c641 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Fri, 28 Apr 2023 20:26:30 +0530 Subject: [PATCH 01/19] added powerlevel10k --- airootfs/etc/skel/.p10k.zsh | 1764 ++++ airootfs/etc/skel/.zshrc | 19 + airootfs/etc/skel/powerlevel10k/README.md | 2020 ++++ .../powerlevel10k/config/p10k-classic.zsh | 1667 +++ .../config/p10k-lean-8colors.zsh | 1648 +++ .../skel/powerlevel10k/config/p10k-lean.zsh | 1644 +++ .../skel/powerlevel10k/config/p10k-pure.zsh | 193 + .../powerlevel10k/config/p10k-rainbow.zsh | 1757 ++++ .../config/p10k-robbyrussell.zsh | 111 + .../skel/powerlevel10k/internal/configure.zsh | 85 + .../etc/skel/powerlevel10k/internal/icons.zsh | 1029 ++ .../etc/skel/powerlevel10k/internal/notes.md | 197 + .../etc/skel/powerlevel10k/internal/p10k.zsh | 9334 +++++++++++++++++ .../skel/powerlevel10k/internal/parser.zsh | 382 + .../skel/powerlevel10k/internal/wizard.zsh | 2205 ++++ .../skel/powerlevel10k/internal/worker.zsh | 219 + .../powerlevel10k/powerlevel10k.zsh-theme | 83 + .../skel/powerlevel10k/powerlevel9k.zsh-theme | 1 + airootfs/{etc/skel/.bashrc => root/.zshrc} | 15 +- .../usr/share/backgrounds/xfce/wallpaper6.png | Bin 643745 -> 0 bytes packages.x86_64 | 17 +- 21 files changed, 24380 insertions(+), 10 deletions(-) create mode 100644 airootfs/etc/skel/.p10k.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/README.md create mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/internal/configure.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/internal/icons.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/internal/notes.md create mode 100644 airootfs/etc/skel/powerlevel10k/internal/p10k.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/internal/parser.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/internal/wizard.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/internal/worker.zsh create mode 100644 airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme create mode 100644 airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme rename airootfs/{etc/skel/.bashrc => root/.zshrc} (54%) delete mode 100644 airootfs/usr/share/backgrounds/xfce/wallpaper6.png diff --git a/airootfs/etc/skel/.p10k.zsh b/airootfs/etc/skel/.p10k.zsh new file mode 100644 index 0000000..9cc2ac1 --- /dev/null +++ b/airootfs/etc/skel/.p10k.zsh @@ -0,0 +1,1764 @@ +# Generated by Powerlevel10k configuration wizard on 2023-04-23 at 21:04 IST. +# Based on romkatv/powerlevel10k/config/p10k-rainbow.zsh, checksum 24603. +# Wizard options: nerdfont-complete + powerline, small icons, rainbow, unicode, +# 12h time, angled separators, sharp heads, sharp tails, 2 lines, dotted, full frame, +# darkest-ornaments, sparse, many icons, fluent, instant_prompt=quiet. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with powerline prompt style with colorful background. +# Type `p10k configure` to generate your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # cpu_arch # CPU architecture + time # current time + # =========================[ Line #2 ]========================= + newline + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%238F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%238F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%238F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%238F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%238F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%238F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=238 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=232 + typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Current directory background color. + typeset -g POWERLEVEL9K_DIR_BACKGROUND=4 + # Default current directory foreground color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=254 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='in ' + + #####################################[ vcs: git status ]###################################### + # Version control background colors. + typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8 + + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + # Styling for different parts of Git status. + local meta='%7F' # white foreground + local clean='%0F' # black foreground + local modified='%0F' # black foreground + local untracked='%0F' # black foreground + local conflicted='%1F' # red foreground + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_VCS_PREFIX='on ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg repository. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0 + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0 + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 + + ###################[ command_execution_time: duration of the last command ]################### + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3 + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6 + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0 + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 + typeset -g POWERLEVEL9K_DIRENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override these parameters for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND and + # POWERLEVEL9K_ASDF_${TOOL}_BACKGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_BACKGROUND=7 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUBY_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PYTHON_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_GOLANG_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_NODEJS_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUST_BACKGROUND=208 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_FLUTTER_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_LUA_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=1 + typeset -g POWERLEVEL9K_ASDF_JAVA_BACKGROUND=7 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PERL_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ERLANG_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ELIXIR_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_POSTGRES_BACKGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PHP_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_HASKELL_BACKGROUND=3 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_JULIA_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7 + typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 + typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=0 + typeset -g POWERLEVEL9K_NNN_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=0 + typeset -g POWERLEVEL9K_LF_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=0 + typeset -g POWERLEVEL9K_XPLR_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIM_SHELL_BACKGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=7 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=1 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Foreground color. + typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0 + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8 + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RAM_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=0 + typeset -g POWERLEVEL9K_SWAP_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=0 + typeset -g POWERLEVEL9K_TODO_BACKGROUND=8 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=255 + typeset -g POWERLEVEL9K_TIMEWARRIOR_BACKGROUND=8 + + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=0 + typeset -g POWERLEVEL9K_TASKWARRIOR_BACKGROUND=6 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=0 + typeset -g POWERLEVEL9K_CPU_ARCH_BACKGROUND=3 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 + typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_BACKGROUND=0 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0 + + # Context format when running with privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_GOENV_BACKGROUND=4 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_NVM_BACKGROUND=5 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255 + typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHP_VERSION_BACKGROUND=5 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_LARAVEL_VERSION_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_JAVA_VERSION_BACKGROUND=7 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=0 + typeset -g POWERLEVEL9K_PACKAGE_BACKGROUND=6 + + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RVM_BACKGROUND=240 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_FVM_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_LUAENV_BACKGROUND=4 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=1 + typeset -g POWERLEVEL9K_JENV_BACKGROUND=7 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PLENV_BACKGROUND=4 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHPENV_BACKGROUND=5 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide PHP version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_SCALAENV_BACKGROUND=1 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=0 + typeset -g POWERLEVEL9K_HASKELL_STACK_BACKGROUND=3 + + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform_version: It shows active terraform version (https://www.terraform.io) ]################# + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_SHOW_ON_COMMAND='terraform|tf' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_AWS_DEFAULT_BACKGROUND=1 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=7 + typeset -g POWERLEVEL9K_AZURE_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=7 + typeset -g POWERLEVEL9K_GCLOUD_BACKGROUND=4 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=0 + typeset -g POWERLEVEL9K_TOOLBOX_BACKGROUND=3 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='in ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7 + typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0 + typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_BACKGROUND=4 + typeset -g POWERLEVEL9K_IP_FOREGROUND=0 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+⇡$P9K_IP_TX_RATE }$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4 + typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0 + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=0 + typeset -g POWERLEVEL9K_WIFI_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(0 0 0 0 0) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_TIME_BACKGROUND=7 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%I:%M:%S %p}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_TIME_PREFIX='at ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background + # greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=3 + typeset -g POWERLEVEL9K_EXAMPLE_BACKGROUND=1 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index 53140c5..2f38d0e 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -1,3 +1,22 @@ +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. + +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 + +source ~/powerlevel10k/powerlevel10k.zsh-theme + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +alias ls='ls --color=auto' +PS1='[\u@\h \W]\$ ' + #Display ISO version and distribution information in short alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" diff --git a/airootfs/etc/skel/powerlevel10k/README.md b/airootfs/etc/skel/powerlevel10k/README.md new file mode 100644 index 0000000..6629e91 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/README.md @@ -0,0 +1,2020 @@ +# Powerlevel10k +[![Gitter](https://badges.gitter.im/powerlevel10k/community.svg)]( + https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +Powerlevel10k is a theme for Zsh. It emphasizes [speed](#uncompromising-performance), +[flexibility](#extremely-customizable) and [out-of-the-box experience](#configuration-wizard). + +![Powerlevel10k]( +https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-styles-high-contrast.png) + +- [Getting started](#getting-started) +- [Features](#features) +- [Installation](#installation) +- [Configuration](#configuration) +- [Fonts](#fonts) +- [Try it in Docker](#try-it-in-docker) +- [License](#license) +- [FAQ](#faq) +- [Troubleshooting](#troubleshooting) + +## Getting started + +1. [Install the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). *Optional but highly + recommended.* +1. [Install Powerlevel10k](#installation) itself. +1. Restart Zsh with `exec zsh`. +1. Type `p10k configure` if the configuration wizard doesn't start automatically. + +## Features + +- [Configuration wizard](#configuration-wizard) +- [Uncompromising performance](#uncompromising-performance) +- [Powerlevel9k compatibility](#powerlevel9k-compatibility) +- [Pure compatibility](#pure-compatibility) +- [Instant prompt](#instant-prompt) +- [Show on command](#show-on-command) +- [Transient prompt](#transient-prompt) +- [Current directory that just works](#current-directory-that-just-works) +- [Extremely customizable](#extremely-customizable) +- [Batteries included](#batteries-included) +- [Extensible](#extensible) + +### Configuration wizard + +Type `p10k configure` to access the builtin configuration wizard right from your terminal. + +
+ Screen recording + + ![Powerlevel10k Configuration Wizard]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/configuration-wizard.gif) +
+ +All styles except [Pure](#pure-compatibility) are functionally equivalent. They display the same +information and differ only in presentation. + +Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt +customization can be done by editing this file. It has plenty of comments to help you navigate +through configuration options. + +*Tip*: Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) before +running `p10k configure` to unlock all prompt styles. + +*FAQ:* + +- [What is the best prompt style in the configuration wizard?]( + #what-is-the-best-prompt-style-in-the-configuration-wizard) +- [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) +- [How do I change prompt colors?](#how-do-i-change-prompt-colors) + +*Troubleshooting*: + +- [Some prompt styles are missing from the configuration wizard]( + #some-prompt-styles-are-missing-from-the-configuration-wizard). +- [Question mark in prompt](#question-mark-in-prompt). +- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render). +- [Sub-pixel imperfections around powerline symbols]( + #sub-pixel-imperfections-around-powerline-symbols). +- [Directory is difficult to see in prompt when using Rainbow style]( + #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style). + +### Uncompromising performance + +When you hit *ENTER*, the next prompt appears instantly. With Powerlevel10k there is no prompt lag. +If you install Cygwin on Raspberry Pi, `cd` into a Linux Git repository and activate enough prompt +segments to fill four prompt lines on both sides of the screen... wait, that's just crazy and no +one ever does that. Probably impossible, too. The point is, Powerlevel10k prompt is always fast, no +matter what you do! + +
+ Screen recording + + ![Powerlevel10k Performance]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/performance.gif) +
+ +Note how the effect of every command is instantly reflected by the very next prompt. + +| Command | Prompt Indicator | Meaning | +|-------------------------------|:----------------:|----------------------------------------------------------------------:| +| `timew start hack linux` | `⌚ hack linux` | time tracking enabled in [timewarrior](https://timewarrior.net/) | +| `touch x y` | `?2` | 2 untracked files in the Git repo | +| `rm COPYING` | `!1` | 1 unstaged change in the Git repo | +| `echo 3.7.3 >.python-version` | `🐍 3.7.3` | the current python version in [pyenv](https://github.com/pyenv/pyenv) | + +Other Zsh themes capable of displaying the same information either produce prompt lag or print +prompt that doesn't reflect the current state of the system and then refresh it later. With +Powerlevel10k you get fast prompt *and* up-to-date information. + +*FAQ*: [Is it really fast?](#is-it-really-fast) + +### Powerlevel9k compatibility + +Powerlevel10k understands all [Powerlevel9k](https://github.com/Powerlevel9k/powerlevel9k) +configuration parameters. + +
+ Screen recording + + ![Powerlevel10k Compatibility with 9k]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/9k-compatibility.gif) +
+ +[Migration](#installation) from Powerlevel9k to Powerlevel10k is a straightforward process. All +your `POWERLEVEL9K` configuration parameters will still work. Prompt will look the same as before +([almost]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config)) +but it will be [much faster](#uncompromising-performance) ([certainly](#is-it-really-fast)). + +*FAQ*: + +- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?]( + #im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) +- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) +- [What is the relationship between Powerlevel9k and Powerlevel10k?]( + #What-is-the-relationship-between-powerlevel9k-and-powerlevel10k) + +### Pure compatibility + +Powerlevel10k can produce the same prompt as [Pure](https://github.com/sindresorhus/pure). Type +`p10k configure` and select *Pure* style. + +
+ Screen recording + + ![Powerlevel10k Pure Style]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/pure-style.gif) +
+ +You can still use Powerlevel10k features such as [transient prompt](#transient-prompt) or +[instant prompt](#instant-prompt) when sporting Pure style. + +To customize prompt, edit `~/.p10k.zsh`. Powerlevel10k doesn't recognize Pure configuration +parameters, so you'll need to use `POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3` instead of +`PURE_CMD_MAX_EXEC_TIME=3`, etc. All relevant parameters are in `~/.p10k.zsh`. This file has +plenty of comments to help you navigate through it. + +*FAQ:* [What is the best prompt style in the configuration wizard?]( + #what-is-the-best-prompt-style-in-the-configuration-wizard) + +### Instant prompt + +If your `~/.zshrc` loads many plugins, or perhaps just a few slow ones +(for example, [pyenv](https://github.com/pyenv/pyenv) or [nvm](https://github.com/nvm-sh/nvm)), you +may have noticed that it takes some time for Zsh to start. + +
+ Screen recording + + ![Powerlevel10k No Instant Prompt]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/no-instant-prompt.gif) +
+ +Powerlevel10k can remove Zsh startup lag **even if it's not caused by a theme**. + +
+ Screen recording + + ![Powerlevel10k Instant Prompt]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/instant-prompt.gif) +
+ +This feature is called *Instant Prompt*. You need to explicitly enable it through `p10k configure` +or [manually](#how-do-i-configure-instant-prompt). It does what it says on the tin -- prints prompt +instantly upon Zsh startup allowing you to start typing while plugins are still loading. + +Other themes *increase* Zsh startup lag -- some by a lot, others by a just a little. Powerlevel10k +*removes* it outright. + +If you are curious about how *Instant Prompt* works, see +[this section in zsh-bench](https://github.com/romkatv/zsh-bench#instant-prompt). + +*FAQ:* [How do I configure instant prompt?](#how-do-i-configure-instant-prompt) + +### Show on command + +The behavior of some commands depends on global environment. For example, `kubectl run ...` runs an +image on the cluster defined by the current kubernetes context. If you frequently change context +between "prod" and "testing", you might want to display the current context in Zsh prompt. If you do +likewise for AWS, Azure and Google Cloud credentials, prompt will get pretty crowded. + +Enter *Show On Command*. This feature makes prompt segments appear only when they are relevant to +the command you are currently typing. + +
+ Screen recording + + ![Powerlevel10k Show On Command]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/show-on-command.gif) +
+ +Configs created by `p10k configure` enable show on command for several prompt segments by default. +Here's the relevant parameter for kubernetes context: + +```zsh +# Show prompt segment "kubecontext" only when the command you are typing invokes one of these tools. +typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens' +``` + +To customize when different prompt segments are shown, open `~/.p10k.zsh`, search for +`SHOW_ON_COMMAND` and either remove these parameters to display affected segments unconditionally, +or change their values. + +### Transient prompt + +When *Transient Prompt* is enabled through `p10k configure`, Powerlevel10k will trim down every +prompt when accepting a command line. + +
+ Screen recording + + ![Powerlevel10k Transient Prompt]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/transient-prompt.gif) +
+ +Transient prompt makes it much easier to copy-paste series of commands from the terminal scrollback. + +*Tip*: If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of +extra space for typing commands without the usual drawback of reduced scrollback density. Sparse +prompt (with an empty line before prompt) also works great in combination with transient prompt. + +### Current directory that just works + +The current working directory is perhaps the most important prompt segment. Powerlevel10k goes to +great length to highlight its important parts and to truncate it with the least loss of information +when horizontal space gets scarce. + +
+ Screen recording + + ![Powerlevel10k Directory Truncation]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/directory-truncation.gif) +
+ +When the full directory doesn't fit, the leftmost segment gets truncated to its shortest unique +prefix. In the screencast, `~/work` becomes `~/wo`. It couldn't be truncated to `~/w` because it +would be ambiguous (there was `~/wireguard` when the session was recorded). The next segment -- +`projects` -- turns into `p` as there was nothing else that started with `p` in `~/work/`. + +Directory segments are shown in one of three colors: + +- Truncated segments are bleak. +- Important segments are bright and never truncated. These include the first and the last segment, + roots of Git repositories, etc. +- Regular segments (not truncated but can be) use in-between color. + +*Tip*: If you copy-paste a truncated directory and hit *TAB*, it'll complete to the original. + +*Troubleshooting*: [Directory is difficult to see in prompt when using Rainbow style.]( + #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) + +### Extremely customizable + +Powerlevel10k can be configured to look like any other Zsh theme out there. + +
+ Screen recording + + ![Powerlevel10k Other Theme Emulation]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/other-theme-emulation.gif) +
+ +[Pure](#pure-compatibility), [Powerlevel9k](#powerlevel9k-compatibility) and [robbyrussell]( + #how-to-make-powerlevel10k-look-like-robbyrussell-oh-my-zsh-theme) emulations are built-in. +To emulate the appearance of other themes, you'll need to write a suitable configuration file. The +best way to go about it is to run `p10k configure`, select the style that is the closest to your +goal and then edit `~/.p10k.zsh`. + +The full range of Powerlevel10k appearance spans from spartan: + +![Powerlevel10k Spartan Style]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/spartan-style.png) + +To ~~ridiculous~~ extravagant: + +![Powerlevel10k Extravagant Style]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/extravagant-style.png) + +### Batteries included + +Powerlevel10k comes with dozens of built-in high quality segments. When you run `p10k configure` +and choose any style except [Pure](#pure-compatibility), many of these segments get enabled by +default while others can be manually enabled by opening `~/.p10k.zsh` and uncommenting them. You can +enable as many segments as you like. It won't slow down your prompt or Zsh startup. + +| Segment | Meaning | +|--------:|---------| +| `anaconda` | virtual environment from [conda](https://conda.io/) | +| `asdf` | tool versions from [asdf](https://github.com/asdf-vm/asdf) | +| `aws` | [aws profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) | +| `aws_eb_env` | [aws elastic beanstalk](https://aws.amazon.com/elasticbeanstalk/) environment | +| `azure` | [azure](https://docs.microsoft.com/en-us/cli/azure) account name | +| `background_jobs` | presence of background jobs | +| `battery` | internal battery state and charge level (yep, batteries *literally* included) | +| `command_execution_time` | duration (wall time) of the last command | +| `context` | user@hostname | +| `cpu_arch` | CPU architecture | +| `dir` | current working directory | +| `direnv` | [direnv](https://direnv.net/) status | +| `disk_usage` | disk usage | +| `dotnet_version` | [dotnet](https://dotnet.microsoft.com) version | +| `fvm` | flutter environment from [fvm](https://github.com/leoafarias/fvm) | +| `gcloud` | [google cloud](https://cloud.google.com/) cli account and project | +| `goenv` | go environment from [goenv](https://github.com/syndbg/goenv) | +| `google_app_cred` | [google application credentials](https://cloud.google.com/docs/authentication/production) | +| `go_version` | [go](https://golang.org) version | +| `haskell_stack` | haskell version from [stack](https://haskellstack.org/) | +| `ip` | IP address and bandwidth usage for a specified network interface | +| `java_version` | [java](https://www.java.com/) version | +| `jenv` | java environment from [jenv](https://github.com/jenv/jenv) | +| `kubecontext` | current [kubernetes](https://kubernetes.io/) context | +| `laravel_version` | [laravel php framework](https://laravel.com/) version | +| `load` | CPU load | +| `luaenv` | lua environment from [luaenv](https://github.com/cehoffman/luaenv) | +| `midnight_commander` | [midnight commander](https://midnight-commander.org/) shell | +| `nix_shell` | [nix shell](https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) indicator | +| `nnn` | [nnn](https://github.com/jarun/nnn) shell | +| `lf` | [lf](https://github.com/gokcehan/lf) shell | +| `nodeenv` | node.js environment from [nodeenv](https://github.com/ekalinin/nodeenv) | +| `nodenv` | node.js environment from [nodenv](https://github.com/nodenv/nodenv) | +| `node_version` | [node.js](https://nodejs.org/) version | +| `nordvpn` | [nordvpn](https://nordvpn.com/) connection status | +| `nvm` | node.js environment from [nvm](https://github.com/nvm-sh/nvm) | +| `os_icon` | your OS logo (apple for macOS, swirl for debian, etc.) | +| `package` | `name@version` from [package.json](https://docs.npmjs.com/files/package.json) | +| `perlbrew` | perl version from [perlbrew](https://github.com/gugod/App-perlbrew) | +| `phpenv` | php environment from [phpenv](https://github.com/phpenv/phpenv) | +| `php_version` | [php](https://www.php.net/) version | +| `plenv` | perl environment from [plenv](https://github.com/tokuhirom/plenv) | +| `prompt_char` | multi-functional prompt symbol; changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual and replace mode respectively; turns red on error | +| `proxy` | system-wide http/https/ftp proxy | +| `public_ip` | public IP address | +| `pyenv` | python environment from [pyenv](https://github.com/pyenv/pyenv) | +| `ram` | free RAM | +| `ranger` | [ranger](https://github.com/ranger/ranger) shell | +| `rbenv` | ruby environment from [rbenv](https://github.com/rbenv/rbenv) | +| `rust_version` | [rustc](https://www.rust-lang.org) version | +| `rvm` | ruby environment from [rvm](https://rvm.io) | +| `scalaenv` | scala version from [scalaenv](https://github.com/scalaenv/scalaenv) | +| `status` | exit code of the last command | +| `swap` | used swap | +| `taskwarrior` | [taskwarrior](https://taskwarrior.org/) task count | +| `terraform` | [terraform](https://www.terraform.io) workspace | +| `terraform_version` | [terraform](https://www.terraform.io) version | +| `time` | current time | +| `timewarrior` | [timewarrior](https://timewarrior.net/) tracking status | +| `todo` | [todo](https://github.com/todotxt/todo.txt-cli) items | +| `toolbox` | [toolbox](https://github.com/containers/toolbox) name | +| `vcs` | Git repository status | +| `vim_shell` | [vim](https://www.vim.org/) shell (`:sh`) | +| `virtualenv` | python environment from [venv](https://docs.python.org/3/library/venv.html) | +| `vi_mode` | vi mode (you don't need this if you've enabled prompt_char) | +| `vpn_ip` | virtual private network indicator | +| `wifi` | WiFi speed | +| `xplr` | [xplr](https://github.com/sayanarijit/xplr) shell | + +### Extensible + +If there is no prompt segment that does what you need, implement your own. Powerlevel10k provides +public API for defining segments that are as fast and as flexible as built-in ones. + +
+ Screen recording + + ![Powerlevel10k Custom Segment]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/custom-segment.gif) +
+ +On Linux you can fetch current CPU temperature by reading `/sys/class/thermal/thermal_zone0/temp`. +The screencast shows how to define a prompt segment to display this value. Once the segment is +defined, you can use it like any other segment. All standard customization parameters will work for +it out of the box. + +Type `p10k help segment` for reference. + +*Tip*: Prefix names of your own segments with `my_` to avoid clashes with future versions of +Powerlevel10k. + +## Installation + +- [Manual](#manual) 👈 **choose this if confused or uncertain** +- [Oh My Zsh](#oh-my-zsh) +- [Prezto](#prezto) +- [Zim](#zim) +- [Antibody](#antibody) +- [Antidote](#antidote) +- [Antigen](#antigen) +- [Zplug](#zplug) +- [Zgen](#zgen) +- [Zplugin](#zplugin) +- [Zinit](#zinit) +- [Zi](#zi) +- [Zap](#zap) +- [Homebrew](#homebrew) +- [Arch Linux](#arch-linux) +- [Alpine Linux](#arch-linux) +- [Fig](#fig) + +### Manual + +```zsh +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k +echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +Users in China can use the official mirror on gitee.com for faster download.
+中国用户可以使用 gitee.com 上的官方镜像加速下载. + +```zsh +git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10k +echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +This is the simplest kind of installation and it works even if you are using a plugin manager. Just +make sure to disable the current theme in your plugin manager. See +[troubleshooting](#cannot-make-powerlevel10k-work-with-my-plugin-manager) for help. + +### Oh My Zsh + +1. Clone the repository: + ```zsh + git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k + ``` + Users in China can use the official mirror on gitee.com for faster download.
+ 中国用户可以使用 gitee.com 上的官方镜像加速下载. + + ```zsh + git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k + ``` +2. Set `ZSH_THEME="powerlevel10k/powerlevel10k"` in `~/.zshrc`. + +### Prezto + +Add `zstyle :prezto:module:prompt theme powerlevel10k` to `~/.zpreztorc`. + +### Zim + +Add `zmodule romkatv/powerlevel10k --use degit` to `~/.zimrc` and run `zimfw install`. + +### Antibody + +Add `antibody bundle romkatv/powerlevel10k` to `~/.zshrc`. + +### Antidote + +Add `romkatv/powerlevel10k` to `~/.zsh_plugins.txt`. + +### Antigen + +Add `antigen theme romkatv/powerlevel10k` to `~/.zshrc`. Make sure you have `antigen apply` +somewhere after it. + +### Zplug + +Add `zplug romkatv/powerlevel10k, as:theme, depth:1` to `~/.zshrc`. + +### Zgen + +Add `zgen load romkatv/powerlevel10k powerlevel10k` to `~/.zshrc`. + +### Zplugin + +Add `zplugin ice depth=1; zplugin light romkatv/powerlevel10k` to `~/.zshrc`. + +The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially +supported by Powerlevel10k. + +### Zinit + +Add `zinit ice depth=1; zinit light romkatv/powerlevel10k` to `~/.zshrc`. + +The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially +supported by Powerlevel10k. + +### Zi + +Add `zi ice depth=1; zi light romkatv/powerlevel10k` to `~/.zshrc`. + +The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially +supported by Powerlevel10k. + +### Zap + +Add `plug "romkatv/powerlevel10k"` to `~/.zshrc`. + +### Homebrew + +```zsh +brew install romkatv/powerlevel10k/powerlevel10k +echo "source $(brew --prefix)/opt/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc +``` + +### Arch Linux + +```zsh +yay -S --noconfirm zsh-theme-powerlevel10k-git +echo 'source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +[zsh-theme-powerlevel10k-git](https://aur.archlinux.org/packages/zsh-theme-powerlevel10k-git/) +referenced above is the official Powerlevel10k package. + +There is also [zsh-theme-powerlevel10k]( + https://www.archlinux.org/packages/community/x86_64/zsh-theme-powerlevel10k/) community package. +Historically, [it has been breaking often and for extended periods of time]( + https://github.com/romkatv/powerlevel10k/pull/786). **Do not use it.** + +### Alpine Linux + +```zsh +apk add zsh zsh-theme-powerlevel10k +mkdir -p ~/.local/share/zsh/plugins +ln -s /usr/share/zsh/plugins/powerlevel10k ~/.local/share/zsh/plugins/ +``` + +### Fig + +Follow the instructions on +[this page](https://fig.io/plugins/other/powerlevel10k). + +## Configuration + +- [For new users](#for-new-users) +- [For Powerlevel9k users](#for-powerlevel9k-users) + +### For new users + +On the first run, Powerlevel10k [configuration wizard](#configuration-wizard) will ask you a few +questions and configure your prompt. If it doesn't trigger automatically, type `p10k configure`. +Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt +customization can be done by editing this file. It has plenty of comments to help you navigate +through configuration options. + +*FAQ*: + +- [What is the best prompt style in the configuration wizard?]( + #what-is-the-best-prompt-style-in-the-configuration-wizard) +- [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) +- [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) +- [How do I add username and/or hostname to prompt?]( + #how-do-i-add-username-andor-hostname-to-prompt) +- [How do I change prompt colors?](#how-do-i-change-prompt-colors) +- [Why some prompt segments appear and disappear as I'm typing?]( + #why-some-prompt-segments-appear-and-disappear-as-im-typing) + +*Troubleshooting*: + +- [Question mark in prompt](#question-mark-in-prompt). +- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render). +- [Sub-pixel imperfections around powerline symbols]( + #sub-pixel-imperfections-around-powerline-symbols). +- [Directory is difficult to see in prompt when using Rainbow style]( + #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style). + +### For Powerlevel9k users + +If you've been using Powerlevel9k before, **do not remove the configuration options**. Powerlevel10k +will pick them up and provide you with the same prompt UI you are used to. See +[Powerlevel9k compatibility](#powerlevel9k-compatibility). + +*FAQ*: + +- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?]( + #im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) +- [What is the relationship between Powerlevel9k and Powerlevel10k?]( + #what-is-the-relationship-between-powerlevel9k-and-powerlevel10k) +- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) + +*Troubleshooting*: [Extra or missing spaces in prompt compared to Powerlevel9k]( + #extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k). + +## Fonts + +Powerlevel10k doesn't require custom fonts but can take advantage of them if they are available. +It works well with [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts), +[Source Code Pro](https://github.com/adobe-fonts/source-code-pro), +[Font Awesome](https://fontawesome.com/), [Powerline](https://github.com/powerline/fonts), and even +the default system fonts. The full choice of style options is available only when using +[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts). + +👇 **Recommended font**: Meslo Nerd Font patched for Powerlevel10k. 👇 + +### Meslo Nerd Font patched for Powerlevel10k + +Gorgeous monospace font designed by Jim Lyles for Bitstream, customized by the same for Apple, +further customized by André Berg, and finally patched by yours truly with customized scripts +originally developed by Ryan L McIntyre of Nerd Fonts. Contains all glyphs and symbols that +Powerlevel10k may need. Battle-tested in dozens of different terminals on all major operating +systems. + +*FAQ*: [How was the recommended font created?](#how-was-the-recommended-font-created) + +#### Automatic font installation + +If you are using iTerm2 or Termux, `p10k configure` can install the recommended font for you. +Simply answer `Yes` when asked whether to install *Meslo Nerd Font*. + +If you are using a different terminal, proceed with manual font installation. 👇 + +#### Manual font installation + +1. Download these four ttf files: + - [MesloLGS NF Regular.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf) + - [MesloLGS NF Bold.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf) + - [MesloLGS NF Italic.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf) + - [MesloLGS NF Bold Italic.ttf]( + https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf) +1. Double-click on each file and click "Install". This will make `MesloLGS NF` font available to all + applications on your system. +1. Configure your terminal to use this font: + - **iTerm2**: Type `p10k configure` and answer `Yes` when asked whether to install + *Meslo Nerd Font*. Alternatively, open *iTerm2 → Preferences → Profiles → Text* and set *Font* to + `MesloLGS NF`. + - **Apple Terminal**: Open *Terminal → Preferences → Profiles → Text*, click *Change* under *Font* + and select `MesloLGS NF` family. + - **Hyper**: Open *Hyper → Edit → Preferences* and change the value of `fontFamily` under + `module.exports.config` to `MesloLGS NF`. + - **Visual Studio Code**: Open *File → Preferences → Settings* (PC) or + *Code → Preferences → Settings* (Mac), enter `terminal.integrated.fontFamily` in the search box at + the top of *Settings* tab and set the value below to `MesloLGS NF`. + Consult [this screenshot]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/389133fb8c9a2347929a23702ce3039aacc46c3d/visual-studio-code-font-settings.jpg) + to see how it should look like or see [this issue]( + https://github.com/romkatv/powerlevel10k/issues/671) for extra information. + - **GNOME Terminal** (the default Ubuntu terminal): Open *Terminal → Preferences* and click on the + selected profile under *Profiles*. Check *Custom font* under *Text Appearance* and select + `MesloLGS NF Regular`. + - **Konsole**: Open *Settings → Edit Current Profile → Appearance*, click *Select Font* and select + `MesloLGS NF Regular`. + - **Tilix**: Open *Tilix → Preferences* and click on the selected profile under *Profiles*. Check + *Custom font* under *Text Appearance* and select `MesloLGS NF Regular`. + - **Windows Console Host** (the old thing): Click the icon in the top left corner, then + *Properties → Font* and set *Font* to `MesloLGS NF`. + - **Windows Terminal** by Microsoft (the new thing): Open *Settings* (Ctrl+,), click + either on the selected profile under *Profiles* or on *Defaults*, click *Appearance* and set + *Font face* to `MesloLGS NF`. + - **IntelliJ** (and other IDEs by Jet Brains): Open *IDE → Edit → Preferences → Editor → + Color Scheme → Console Font*. Select *Use console font instead of the default* and set the font + name to `MesloLGS NF`. + - **Termux**: Type `p10k configure` and answer `Yes` when asked whether to install + *Meslo Nerd Font*. + - **Blink**: Type `config`, go to *Appearance*, tap *Add a new font*, tap *Open Gallery*, select + *MesloLGS NF.css*, tap *import* and type `exit` in the home view to reload the font. + - **Terminus**: Open *Settings → Appearance* and set *Font* to `MesloLGS NF`. + - **Terminator**: Open *Preferences* using the context menu. Under *Profiles* select the *General* + tab (should be selected already), uncheck *Use the system fixed width font* (if not already) + and select `MesloLGS NF Regular`. Exit the Preferences dialog by clicking *Close*. + - **Guake**: Right Click on an open terminal and open *Preferences*. Under *Appearance* + tab, uncheck *Use the system fixed width font* (if not already) and select `MesloLGS NF Regular`. + Exit the Preferences dialog by clicking *Close*. + - **MobaXterm**: Open *Settings* → *Configuration* → *Terminal* → (under *Terminal look and feel*) + and change *Font* to `MesloLGS NF`. + - **Asbrú Connection Manager**: Open *Preferences → Local Shell Options → Look and Feel*, enable + *Use these personal options* and change *Font:* under *Terminal UI* to `MesloLGS NF Regular`. + To change the font for the remote host connections, go to *Preferences → Terminal Options → + Look and Feel* and change *Font:* under *Terminal UI* to `MesloLGS NF Regular`. + - **WSLtty**: Right click on an open terminal and then on *Options*. In the *Text* section, under + *Font*, click *"Select..."* and set Font to `MesloLGS NF Regular`. + - **Yakuake**: Click *≡* → *Manage Profiles* → *New* → *Appearance*. Click *Choose* next to the + *Font* dropdown, select `MesloLGS NF` and click *OK*. Click *OK* to save the profile. Select the + new profile and click *Set as Default*. + - **Alacritty**: Create or open `~/.config/alacritty/alacritty.yml` and add the following section + to it: + ```yaml + font: + normal: + family: "MesloLGS NF" + ``` + - **kitty**: Create or open `~/.config/kitty/kitty.conf` and add the following line to it: + ```text + font_family MesloLGS NF + ``` + Restart kitty by closing all sessions and opening a new session. + - **puTTY**: Set *Window* → *Appearance* → *Font* to `MesloLGS NF`. Requires puTTY + version >= 0.75. + - **WezTerm**: Create or open `$HOME/.config/wezterm/wezterm.lua` and add the following: + ```lua + local wezterm = require 'wezterm'; + return { + font = wezterm.font("MesloLGS NF"), + } + ``` + If the file already exists, only add the line with the font to the existing return. + Also add the first line if it is not already present. + - **urxvt**: Create or open `~/.Xresources` and add the following line to it: + ```text + URxvt.font: xft:MesloLGS NF:size=11 + ``` + You can adjust the font size to your preference. After changing the config run + `xrdb ~/.Xresources` to reload it. The new config is applied to all new terminals. + - **xterm**: Create or open `~/.Xresources` and add the following line to it: + ```text + xterm*faceName: MesloLGS NF + ``` + After changing the config run `xrdb ~/.Xresources` to reload it. The new config is applied to + all new terminals. + - **Zed**: Open `~/.config/zed/settings.json` and set `terminal.font_family` to `"MesloLGS NF"`. + ```jsonc + { + "terminal": { + "font_family": "MesloLGS NF" + }, + // Other settings. + } + ``` + - Crostini (Linux on Chrome OS): Open + chrome-untrusted://terminal/html/nassh_preferences_editor.html, set *Text font family* to + `'MesloLGS NF'` (including the quotes) and *Custom CSS (inline text)* to the following: + ```css + @font-face { + font-family: "MesloLGS NF"; + src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Regular.ttf"); + font-weight: normal; + font-style: normal; + } + @font-face { + font-family: "MesloLGS NF"; + src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold.ttf"); + font-weight: bold; + font-style: normal; + } + @font-face { + font-family: "MesloLGS NF"; + src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Italic.ttf"); + font-weight: normal; + font-style: italic; + } + @font-face { + font-family: "MesloLGS NF"; + src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold%20Italic.ttf"); + font-weight: bold; + font-style: italic; + } + ``` + **_CAVEAT_**: If you open the normal terminal preferences these settings will be overwritten. +1. Run `p10k configure` to generate a new `~/.p10k.zsh`. The old config may work + incorrectly with the new font. + +_Using a different terminal and know how to set the font for it? Share your knowledge by sending a +PR to expand the list!_ + +## Try it in Docker + +Try Powerlevel10k in Docker. You can safely make any changes to the file system while trying out +the theme. Once you exit Zsh, the container is deleted. + +```zsh +docker run -e TERM -e COLORTERM -e LC_ALL=C.UTF-8 -it --rm alpine sh -uec ' + apk add git zsh nano vim + git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k + echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc + cd ~/powerlevel10k + exec zsh' +``` + +*Tip*: Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) before +running the Docker command to get access to all prompt styles. + +*Tip*: Run `p10k configure` while in Docker to try a different prompt style. + +## License + +Powerlevel10k is released under the +[MIT license](https://github.com/romkatv/powerlevel10k/blob/master/LICENSE). + +## FAQ + +- [How do I update Powerlevel10k?](#how-do-i-update-powerlevel10k) +- [How do I uninstall Powerlevel10k?](#how-do-i-uninstall-powerlevel10k) +- [How do I install Powerlevel10k on a machine without Internet access?](#how-do-i-install-powerlevel10k-on-a-machine-without-internet-access) +- [Where can I ask for help and report bugs?](#where-can-i-ask-for-help-and-report-bugs) +- [Which aspects of shell and terminal does Powerlevel10k affect?](#which-aspects-of-shell-and-terminal-does-powerlevel10k-affect) +- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?](#im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) +- [Is it really fast?](#is-it-really-fast) +- [How do I configure instant prompt?](#how-do-i-configure-instant-prompt) +- [How do I initialize direnv when using instant prompt?](#how-do-i-initialize-direnv-when-using-instant-prompt) +- [How do I export GPG_TTY when using instant prompt?](#how-do-i-export-gpg_tty-when-using-instant-prompt) +- [What do different symbols in Git status mean?](#what-do-different-symbols-in-git-status-mean) +- [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) +- [Why is Git status from `$HOME/.git` not displayed in prompt?](#why-is-git-status-from-homegit-not-displayed-in-prompt) +- [Why does Git status sometimes appear grey and then gets colored after a short period of time?](#why-does-git-status-sometimes-appear-grey-and-then-gets-colored-after-a-short-period-of-time) +- [How do I add username and/or hostname to prompt?](#how-do-i-add-username-andor-hostname-to-prompt) +- [Why some prompt segments appear and disappear as I'm typing?](#why-some-prompt-segments-appear-and-disappear-as-im-typing) +- [How do I change prompt colors?](#how-do-i-change-prompt-colors) +- [Why does Powerlevel10k spawn extra processes?](#why-does-powerlevel10k-spawn-extra-processes) +- [Are there configuration options that make Powerlevel10k slow?](#are-there-configuration-options-that-make-powerlevel10k-slow) +- [Is Powerlevel10k fast to load?](#is-powerlevel10k-fast-to-load) +- [What is the relationship between Powerlevel9k and Powerlevel10k?](#what-is-the-relationship-between-powerlevel9k-and-powerlevel10k) +- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) +- [What is the best prompt style in the configuration wizard?](#what-is-the-best-prompt-style-in-the-configuration-wizard) +- [How to make Powerlevel10k look like robbyrussell Oh My Zsh theme?](#how-to-make-powerlevel10k-look-like-robbyrussell-oh-my-zsh-theme) +- [Can prompts for completed commands display error status for *those* commands instead of the commands preceding them?](#can-prompts-for-completed-commands-display-error-status-for-those-commands-instead-of-the-commands-preceding-them) +- [What is the minimum supported Zsh version?](#what-is-the-minimum-supported-zsh-version) +- [How were these screenshots and animated gifs created?](#how-were-these-screenshots-and-animated-gifs-created) +- [How was the recommended font created?](#how-was-the-recommended-font-created) +- [How to package Powerlevel10k for distribution?](#how-to-package-powerlevel10k-for-distribution) + +### How do I update Powerlevel10k? + +The command to update Powerlevel10k depends on how it was installed. + +| Installation | Update command | +|-------------------------------|-------------------------------------------------------------| +| [Manual](#manual) | `git -C ~/powerlevel10k pull` | +| [Oh My Zsh](#oh-my-zsh) | `git -C ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k pull` | +| [Prezto](#prezto) | `zprezto-update` | +| [Zim](#zim) | `zimfw update` | +| [Antigen](#antigen) | `antigen update` | +| [Antidote](#antidote) | `antidote update` | +| [Zplug](#zplug) | `zplug update` | +| [Zgen](#zgen) | `zgen update` | +| [Zplugin](#zplugin) | `zplugin update` | +| [Zinit](#zinit) | `zinit update` | +| [Zi](#zi) | `zi update` | +| [Zap](#zap) | `zap --update` | +| [Homebrew](#homebrew) | `brew update && brew upgrade` | +| [Arch Linux](#arch-linux) | `yay -S --noconfirm zsh-theme-powerlevel10k-git` | +| [Alpine Linux](#alpine-linux) | `apk update && apk upgrade` | + +**IMPORTANT**: Restart Zsh after updating Powerlevel10k. [Do not use `source ~/.zshrc`]( + #weird-things-happen-after-typing-source-zshrc). + +### How do I uninstall Powerlevel10k? + +1. Remove all references to "p10k" from `~/.zshrc`. You might have this snippet at the top: + ```zsh + 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 + ``` + And this at the bottom: + ```zsh + [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + ``` + These are added by the [configuration wizard](#configuration-wizard). Remove them. +2. Remove all references to "powerlevel10k" from `~/.zshrc`, `~/.zpreztorc` and `~/.zimrc` (some + of these files may be missing -- this is normal). These references have been added manually by + yourself when installing Powerlevel10k. Refer to the [installation instructions](#installation) + if you need a reminder. +3. Verify that all references to "p10k" and "powerlevel10k" are gone from `~/.zshrc`, `~/.zpreztorc` + and `~/.zimrc`. + ```zsh + grep -E 'p10k|powerlevel10k' ~/.zshrc ~/.zpreztorc ~/.zimrc 2>/dev/null + ``` + If this command produces output, there are still references to "p10k" or "powerlevel10k". You + need to remove them. +4. Delete Powerlevel10k configuration file. This file is created by the + [configuration wizard](#configuration-wizard) and may contain manual edits by yourself. + ```zsh + rm -f ~/.p10k.zsh + ``` +5. Delete Powerlevel10k source files. These files have been downloaded when you've installed + Powerlevel10k. The command to delete them depends on which installation method you'd chosen. + Refer to the [installation instructions](#installation) if you need a reminder. + + | Installation | Uninstall command | + |-------------------------------|------------------------------------------------------------------| + | [Manual](#manual) | `rm -rf ~/powerlevel10k` | + | [Oh My Zsh](#oh-my-zsh) | `rm -rf -- ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k` | + | [Prezto](#prezto) | n/a | + | [Zim](#zim) | `zimfw uninstall` | + | [Antigen](#antigen) | `antigen purge romkatv/powerlevel10k` | + | [Antidote](#antidote) | `antidote purge romkatv/powerlevel10k` | + | [Zplug](#zplug) | `zplug clean` | + | [Zgen](#zgen) | `zgen reset` | + | [Zplugin](#zplugin) | `zplugin delete romkatv/powerlevel10k` | + | [Zinit](#zinit) | `zinit delete romkatv/powerlevel10k` | + | [Zi](#zi) | `zi delete romkatv/powerlevel10k` | + | [Zap](#zap) | `zsh -ic 'zap --clean'` | + | [Homebrew](#homebrew) | `brew uninstall powerlevel10k; brew untap romkatv/powerlevel10k` | + | [Arch Linux](#arch-linux) | `yay -R --noconfirm zsh-theme-powerlevel10k-git` | + | [Alpine Linux](#alpine-linux) | `apk del zsh-theme-powerlevel10k` | +6. Restart Zsh. [Do not use `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc). +7. Delete Powerlevel10k cache files. + ```zsh + rm -rf -- "${XDG_CACHE_HOME:-$HOME/.cache}"/p10k-*(N) "${XDG_CACHE_HOME:-$HOME/.cache}"/gitstatus + ``` + +### How do I install Powerlevel10k on a machine without Internet access? + +1. Run this command on the machine without Internet access: + ```sh + uname -sm | tr '[A-Z]' '[a-z]' + ``` +2. Run these commands on a machine connected to the Internet after replacing the value of + `target_uname` with the output of the previous command: + ```sh + target_uname="replace this with the output of the previous command" + git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k + GITSTATUS_CACHE_DIR="$HOME"/powerlevel10k/gitstatus/usrbin ~/powerlevel10k/gitstatus/install -f -s "${target_uname% *}" -m "${target_uname#* }" + ``` +3. Copy `~/powerlevel10k` from the machine connected to the Internet to the one without Internet + access. +4. Add `source ~/powerlevel10k/powerlevel10k.zsh-theme` to `~/.zshrc` on the machine without + Internet access: + ```zsh + echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc + ``` +5. If `~/.zshrc` on the machine without Internet access sets `ZSH_THEME`, remove that line. + ```zsh + sed -i.bak '/^ZSH_THEME=/d' ~/.zshrc + ``` + +To update, remove `~/powerlevel10k` on both machines and repeat steps 1-3. + +### Where can I ask for help and report bugs? + +The best way to ask for help and to report bugs is to [open an issue]( + https://github.com/romkatv/powerlevel10k/issues). + +[Gitter]( + https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +is another option. + +If all else fails, email roman.perepelitsa@gmail.com. + +If necessary, encrypt your communication with [this PGP key]( + https://api.github.com/users/romkatv/gpg_keys). + +### Which aspects of shell and terminal does Powerlevel10k affect? + +Powerlevel10k defines prompt and nothing else. It sets [prompt-related options]( + http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting), and parameters `PS1` and `RPS1`. + +![Prompt Highlight]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-highlight.png) + +Everything within the highlighted areas on the screenshot is produced by Powerlevel10k. +Powerlevel10k has no control over the terminal content or colors outside these areas. + +Powerlevel10k does not affect: + +- Terminal window/tab title. +- Colors used by `ls`. +- The behavior of `git` command. +- The content and style of Tab completions. +- Command line colors (syntax highlighting, autosuggestions, etc.). +- Key bindings. +- Aliases. +- Prompt parameters other than `PS1` and `RPS1`. +- Zsh options other than those [related to prompt]( + http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting). + +### I'm using Powerlevel9k with Oh My Zsh. How do I migrate? + +1. Run this command: +```zsh +# Add powerlevel10k to the list of Oh My Zsh themes. +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k +# Replace ZSH_THEME="powerlevel9k/powerlevel9k" with ZSH_THEME="powerlevel10k/powerlevel10k". +sed -i.bak 's/powerlevel9k/powerlevel10k/g' ~/.zshrc +# Restart Zsh. +exec zsh +``` +2. *Optional but highly recommended:* + 1. Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). + 1. Type `p10k configure` and choose your favorite prompt style. + +*Related:* + - [Powerlevel9k compatibility.](#powerlevel9k-compatibility) + - [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( + #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) + - [Extra or missing spaces in prompt compared to Powerlevel9k.]( + #extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k) + - [Configuration wizard.](#configuration-wizard) + +### Is it really fast? + +Yes. See [zsh-bench](https://github.com/romkatv/zsh-bench) or a direct comparison with +[Powerlevel9k](https://asciinema.org/a/NHRjK3BMePw66jtRVY2livHwZ) and +[Spaceship](https://asciinema.org/a/253094). + +### How do I configure instant prompt? + +See [instant prompt](#instant-prompt) to learn about instant prompt. This section explains how you +can enable and configure it and lists caveats that you should be aware of. + +Instant prompt can be enabled either through `p10k configure` or by manually adding the following +code snippet at the top of `~/.zshrc`: + +```zsh +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +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 +``` + +It's important that you copy the lines verbatim. Don't replace `source` with something else, don't +call `zcompile`, don't redirect output, etc. + +When instant prompt is enabled, for the duration of Zsh initialization standard input is redirected +to `/dev/null` and standard output with standard error are redirected to a temporary file. Once Zsh +is fully initialized, standard file descriptors are restored and the content of the temporary file +is printed out. + +When using instant prompt, you should carefully check any output that appears on Zsh startup as it +may indicate that initialization has been altered, or perhaps even broken, by instant prompt. +Initialization code that may require console input, such as asking for a keyring password or for a +*[y/n]* confirmation, must be moved above the instant prompt preamble in `~/.zshrc`. Initialization +code that merely prints to console but never reads from it will work correctly with instant prompt, +although output that normally has colors may appear uncolored. You can either leave it be, suppress +the output, or move it above the instant prompt preamble. + +Here's an example of `~/.zshrc` that breaks when instant prompt is enabled: + +```zsh +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 + +keychain id_rsa --agents ssh # asks for password +chatty-script # spams to stdout even when everything is fine +# ... +``` + +Fixed version: + +```zsh +keychain id_rsa --agents ssh # moved before instant prompt + +# OK to perform console I/O before this point. +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 +# From this point on, until zsh is fully initialized, console input won't work and +# console output may appear uncolored. + +chatty-script >/dev/null # spam output suppressed +# ... +``` + +If `POWERLEVEL9K_INSTANT_PROMPT` is unset or set to `verbose`, Powerlevel10k will print a warning +when it detects console output during initialization to bring attention to potential issues. You can +silence this warning (without suppressing console output) with `POWERLEVEL9K_INSTANT_PROMPT=quiet`. +This is recommended if some initialization code in `~/.zshrc` prints to console and it's infeasible +to move it above the instant prompt preamble or to suppress its output. You can completely disable +instant prompt with `POWERLEVEL9K_INSTANT_PROMPT=off`. Do this if instant prompt breaks Zsh +initialization and you don't know how to fix it. + +The value of `POWERLEVEL9K_INSTANT_PROMPT` can be changed by running `p10k configure` and selecting +the appropriate option on the *Instant Prompt* screen. Alternatively, you can search for +`POWERLEVEL9K_INSTANT_PROMPT` in the existing `~/.p10k.zsh` and change its value there. + +*Note*: Instant prompt requires Zsh >= 5.4. It's OK to enable it even when using an older version of +Zsh but it won't do anything. + +*FAQ*: + +- [How do I initialize direnv when using instant prompt?]( + #how-do-i-initialize-direnv-when-using-instant-prompt) +- [How do I export GPG_TTY when using instant prompt?]( + #how-do-i-export-gpg_tty-when-using-instant-prompt) + +### How do I initialize direnv when using instant prompt? + +If you've enabled [instant prompt](#instant-prompt), you should have these lines at the top of +`~/.zshrc`: + +```zsh +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 +``` + +To initialize direnv you need to add one line above that block and one line below it. + +```zsh +(( ${+commands[direnv]} )) && emulate zsh -c "$(direnv export zsh)" + +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 + +(( ${+commands[direnv]} )) && emulate zsh -c "$(direnv hook zsh)" +``` + +*Related*: [How do I export GPG_TTY when using instant prompt?]( + #how-do-i-export-gpg_tty-when-using-instant-prompt) + +### How do I export GPG_TTY when using instant prompt? + +You can export `GPG_TTY` like this anywhere in `~/.zshrc`: + +```zsh +export GPG_TTY=$TTY +``` + +This works whether you are using [instant prompt](#instant-prompt) or not. It works even if you +aren't using powerlevel10k. As an extra bonus, it's much faster than the commonly used +`export GPG_TTY=$(tty)`. + +*Related*: [How do I initialize direnv when using instant prompt?]( + #how-do-i-initialize-direnv-when-using-instant-prompt) + +### What do different symbols in Git status mean? + +When using Lean, Classic or Rainbow style, Git status may look like this: + +```text +feature:master wip ⇣42⇡42 ⇠42⇢42 *42 merge ~42 +42 !42 ?42 +``` + +| Symbol | Meaning | Source | +| --------- | -------------------------------------------------------------------- | ------------------------------------------------------ | +| `feature` | current branch; replaced with `#tag` or `@commit` if not on a branch | `git status --ignore-submodules=dirty` | +| `master` | remote tracking branch; only shown if different from local branch | `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}` | +| `wip` | the latest commit's summary contains "wip" or "WIP" | `git show --pretty=%s --no-patch HEAD` | +| `⇣42` | this many commits behind the remote | `git rev-list --right-only --count HEAD...@{upstream}` | +| `⇡42` | this many commits ahead of the remote | `git rev-list --left-only --count HEAD...@{upstream}` | +| `⇠42` | this many commits behind the push remote | `git rev-list --right-only --count HEAD...@{push}` | +| `⇢42` | this many commits ahead of the push remote | `git rev-list --left-only --count HEAD...@{push}` | +| `*42` | this many stashes | `git stash list` | +| `merge` | repository state | `git status --ignore-submodules=dirty` | +| `~42` | this many merge conflicts | `git status --ignore-submodules=dirty` | +| `+42` | this many staged changes | `git status --ignore-submodules=dirty` | +| `!42` | this many unstaged changes | `git status --ignore-submodules=dirty` | +| `?42` | this many untracked files | `git status --ignore-submodules=dirty` | +| `─` | the number of staged, unstaged or untracked files is unknown | `echo $POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY` or `git config --get bash.showDirtyState` | + +*Related*: [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) + +### How do I change the format of Git status? + +To change the format of Git status, open `~/.p10k.zsh`, search for `my_git_formatter` and edit its +source code. + +*Related*: [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) + +### Why is Git status from `$HOME/.git` not displayed in prompt? + +When using Lean, Classic or Rainbow style, `~/.p10k.zsh` contains the following parameter: + +```zsh +# Don't show Git status in prompt for repositories whose workdir matches this pattern. +# For example, if set to '~', the Git repository at $HOME/.git will be ignored. +# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. +typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' +``` + +To see Git status for `$HOME/.git` in prompt, open `~/.p10k.zsh` and remove +`POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN`. + +### Why does Git status sometimes appear grey and then gets colored after a short period of time? + +tl;dr: When Git status in prompt is greyed out, it means Powerlevel10k is currently computing +up-to-date Git status in the background. Prompt will get automatically refreshed when this +computation completes. + +When your current directory is within a Git repository, Powerlevel10k computes up-to-date Git +status after every command. If the repository is large, or the machine is slow, this computation +can take quite a bit of time. If it takes longer than 10 milliseconds (configurable via +`POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS`), Powerlevel10k displays the last known Git status in +grey and continues to compute up-to-date Git status in the background. When the computation +completes, Powerlevel10k refreshes prompt with new information, this time with colored Git status. + +When using *Rainbow* style, Git status is displayed as black on grey while it's still being +computed. Depending on the terminal color palette, this may be difficult to read. In this case you +might want to change the background color to something ligher for more contrast. To do that, open +`~/.p10k.zsh`, search for `POWERLEVEL9K_VCS_LOADING_BACKGROUND`, uncomment it if it's commented out, +and change the value. + +```zsh +typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=244 +``` + +Type `source ~/.p10k.zsh` to apply your changes to the current Zsh session. + +*Related*: [How do I change prompt colors?](#how-do-i-change-prompt-colors) + +### How do I add username and/or hostname to prompt? + +When using Lean, Classic or Rainbow style, prompt shows `username@hostname` when you are logged in +as root or via SSH. There is little value in showing `username` or `hostname` when you are logged in +to your local machine as a normal user. So the absence of `username@hostname` in your prompt is an +indication that you are working locally and that you aren't root. You can change it, however. + +Open `~/.p10k.zsh`. Close to the top you can see the most important parameters that define which +segments are shown in your prompt. All generally useful prompt segments are listed in there. Some of +them are enabled, others are commented out. One of them is of interest to you. + +```zsh +typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + ... + context # user@hostname + ... +) +``` + +Search for `context` to find the section in the config that lists parameters specific to this prompt +segment. You should see the following lines: + +```zsh +# Don't show context unless running with privileges or in SSH. +# Tip: Remove the next line to always show context. +typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= +``` + +If you follow the tip and remove (or comment out) the last line, you'll always see +`username@hostname` in prompt. You can change the format to just `username`, or change the color, by +adjusting the values of parameters nearby. There are plenty of comments to help you navigate. + +You can also move `context` to a different position in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` or even +to `POWERLEVEL9K_LEFT_PROMPT_ELEMENTS`. + +### Why some prompt segments appear and disappear as I'm typing? + +Prompt segments can be configured to be shown only when the current command you are typing invokes +a relevant tool. + +```zsh +# Show prompt segment "kubecontext" only when the command you are typing invokes +# invokes kubectl, helm, or kubens. +typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens' +``` + +Configs created by `p10k configure` may contain parameters of this kind. To customize when different +prompt segments are shown, open `~/.p10k.zsh`, search for `SHOW_ON_COMMAND` and either remove these +parameters or change their values. + +You can also define a function in `~/.zshrc` to toggle the display of a prompt segment between +*always* and *on command*. This is similar to `kubeon`/`kubeoff` from +[kube-ps1](https://github.com/jonmosco/kube-ps1). + +```zsh +function kube-toggle() { + if (( ${+POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND} )); then + unset POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND + else + POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens' + fi + p10k reload + if zle; then + zle push-input + zle accept-line + fi +} +``` + +Invoke this function by typing `kube-toggle`. You can also bind it to a key by adding two more lines +to `~/.zshrc`: + +```zsh +zle -N kube-toggle +bindkey '^]' kube-toggle # ctrl-] to toggle kubecontext in powerlevel10k prompt +``` + +### How do I change prompt colors? + +You can either [change the color palette used by your terminal]( + #change-the-color-palette-used-by-your-terminal) or +[set colors through Powerlevel10k configuration parameters]( + #set-colors-through-Powerlevel10k-configuration-parameters). + +#### Change the color palette used by your terminal + +How exactly you change the terminal color palette (a.k.a. color scheme, or theme) depends on the +kind of terminal you are using. Look around in terminal's settings/preferences or consult +documentation. + +When you change the terminal color palette, it usually affects only the first 16 colors, numbered +from 0 to 15. In order to see any effect on Powerlevel10k prompt, you need to use prompt style that +utilizes these low-numbered colors. Type `p10k configure` and select *Rainbow*, *Lean* → *8 colors* +or *Pure* → *Original*. Other styles use higher-numbered colors, so they look the same in any +terminal color palette. + +#### Set colors through Powerlevel10k configuration parameters + +Open `~/.p10k.zsh`, search for "color", "foreground" and "background" and change values of +appropriate parameters. For example, here's how you can set the foreground of `time` prompt segment +to bright red: + +```zsh +typeset -g POWERLEVEL9K_TIME_FOREGROUND=160 +``` + +Colors are specified using numbers from 0 to 255. Colors from 0 to 15 look differently in different +terminals. Many terminals also support customization of these colors through color palettes +(a.k.a. color schemes, or themes). Colors from 16 to 255 always look the same. + +Type `source ~/.p10k.zsh` to apply your changes to the current Zsh session. + +To see how different colors look in your terminal, run the following command: + +```zsh +for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done +``` + +*Related:* + - [Directory is difficult to see in prompt when using Rainbow style.]( + #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) + +### Why does Powerlevel10k spawn extra processes? + +Powerlevel10k uses [gitstatus](https://github.com/romkatv/gitstatus) as the backend behind `vcs` +prompt; gitstatus spawns `gitstatusd` and `zsh`. See +[gitstatus](https://github.com/romkatv/gitstatus) for details. Powerlevel10k may also spawn `zsh` +to perform computation without blocking prompt. To avoid security hazard, these background processes +aren't shared by different interactive shells. They terminate automatically when the parent `zsh` +process terminates or runs `exec(3)`. + +### Are there configuration options that make Powerlevel10k slow? + +No, Powerlevel10k is always fast, with any configuration you throw at it. If you have noticeable +prompt latency when using Powerlevel10k, please +[open an issue](https://github.com/romkatv/powerlevel10k/issues). + +### Is Powerlevel10k fast to load? + +Yes. See [zsh-bench](https://github.com/romkatv/zsh-bench). + +### What is the relationship between Powerlevel9k and Powerlevel10k? + +Powerlevel10k was forked from Powerlevel9k in March 2019 after a week-long discussion in +[powerlevel9k#1170](https://github.com/Powerlevel9k/powerlevel9k/issues/1170). Powerlevel9k was +already a mature project with a large user base and a release cycle measured in months. Powerlevel10k +was spun off to iterate on performance improvements and new features at much higher pace. + +Powerlevel9k and Powerlevel10k are independent projects. When using one, you shouldn't install the +other. Issues should be filed against the project that you actually use. There are no individuals +that have commit rights in both repositories. All bug fixes and new features committed to +Powerlevel9k repository get ported to Powerlevel10k. + +Over time, virtually all code in Powerlevel10k has been rewritten. There is currently no meaningful +overlap between the implementations of Powerlevel9k and Powerlevel10k. + +Powerlevel10k is committed to maintaining backward compatibility with all configs indefinitely. This +commitment covers all configuration parameters recognized by Powerlevel9k (see +[Powerlevel9k compatibility](#powerlevel9k-compatibility)) and additional parameters that only +Powerlevel10k understands. Names of all parameters in Powerlevel10k start with `POWERLEVEL9K_` for +consistency. + +### Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config? + +Almost. There are a few differences. + +- By default only `git` vcs backend is enabled in Powerlevel10k. If you need `svn` and `hg`, add + them to `POWERLEVEL9K_VCS_BACKENDS`. These backends aren't yet optimized in Powerlevel10k, so + enabling them will make prompt *very slow*. +- Powerlevel10k doesn't support `POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY=true`. +- Powerlevel10k strives to be bug-compatible with Powerlevel9k but not when it comes to egregious + bugs. If you accidentally rely on these bugs, your prompt will differ between Powerlevel9k and + Powerlevel10k. Some examples: + - Powerlevel9k ignores some options that are set after the theme is sourced while Powerlevel10k + respects all options. If you see different icons in Powerlevel9k and Powerlevel10k, you've + probably defined `POWERLEVEL9K_MODE` before sourcing the theme. This parameter gets ignored + by Powerlevel9k but honored by Powerlevel10k. If you want your prompt to look in Powerlevel10k + the same as in Powerlevel9k, remove `POWERLEVEL9K_MODE`. + - Powerlevel9k doesn't respect `ZLE_RPROMPT_INDENT`. As a result, right prompt in Powerlevel10k + can have an extra space at the end compared to Powerlevel9k. Set `ZLE_RPROMPT_INDENT=0` if you + don't want that space. More details in + [troubleshooting](#extra-space-without-background-on-the-right-side-of-right-prompt). + - Powerlevel9k has inconsistent spacing around icons. This was fixed in Powerlevel10k. Set + `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to get the same spacing as in Powerlevel9k. More + details in [troubleshooting](#extra-or-missing-spaces-around-icons). + - There are dozens more bugs in Powerlevel9k that don't exist in Powerlevel10k. + +If you notice any other changes in prompt appearance when switching from Powerlevel9k to +Powerlevel10k, please [open an issue](https://github.com/romkatv/powerlevel10k/issues). + +### What is the best prompt style in the configuration wizard? + +There are as many opinions on what constitutes the best prompt as there are people. It mostly comes +down to personal preference. There are, however, a few hidden implications of different choices. + +Pure style is an exact replication of [Pure Zsh theme](https://github.com/sindresorhus/pure). It +exists to ease the migration for users of this theme. Unless you are one of them, choose Lean +style over Pure. + +If you want to confine prompt colors to the selected terminal color palette (say, *Solarized Dark*), +use *Rainbow*, *Lean* → *8 colors* or *Pure* → *Original*. Other styles use fixed colors and thus +look the same in any terminal color palette. + +All styles except Pure have an option to use *ASCII* charset. Prompt will look less pretty but will +render correctly with all fonts and in all locales. + +If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of +extra space for typing commands without the usual drawback of reduced scrollback density. Having +all commands start from the same offset is also nice. + +Similarly, if you enable transient prompt, sparse prompt (with an empty line before prompt) is a +great choice. + +If you are using vi keymap, choose prompt with `prompt_char` in it (shown as green `❯` in the +wizard). This symbol changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual +and replace mode respectively. When a command fails, the symbol turns red. *Lean* style always has +`prompt_char` in it. *Rainbow* and *Classic* styles have it only in the two-line configuration +without left frame. + +If you value horizontal space or prefer minimalist aesthetics: + +- Use a monospace font, such as [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). + Non-monospace fonts require extra space after icons that are larger than a single column. +- Use Lean style. Compared to Classic and Rainbow, it saves two characters per prompt segment. +- Disable *current time* and *frame*. +- Use *few icons*. The extra icons enabled by the *many icons* option primarily serve decorative + function. Informative icons, such as background job indicator, will be shown either way. + +*Note*: You can run configuration wizard as many times as you like. Type `p10k configure` to try new +prompt style. + +### How to make Powerlevel10k look like robbyrussell Oh My Zsh theme? + +Use [this config]( + https://github.com/romkatv/powerlevel10k/blob/master/config/p10k-robbyrussell.zsh). + +You can either download it, save as `~/.p10k.zsh` and `source ~/.p10k.zsh` from `~/.zshrc`, or +source `p10k-robbyrussell.zsh` directly from your cloned `powerlevel10k` repository. + +### Can prompts for completed commands display error status for *those* commands instead of the commands preceding them? + +No. When you hit *ENTER* and the command you've typed starts running, its error status isn't yet +known, so it cannot be shown in prompt. When the command completes, the error status gets known but +it's no longer possible to update prompt for *that* command. This is why the error status for every +command is reflected in the *next* prompt. + +For details, see [this post on /r/zsh]( +https://www.reddit.com/r/zsh/comments/eg49ff/powerlevel10k_prompt_history_exit_code_colors/fc5huku). + +### What is the minimum supported Zsh version? + +Zsh 5.3 or newer should work. Fast startup requires Zsh >= 5.4. + +### How were these screenshots and animated gifs created? + +All screenshots and animated gifs were recorded in GNOME Terminal with +[the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) and Tango Dark color palette with +custom background color (`#171A1B` instead of `#2E3436` -- twice as dark). + +![GNOME Terminal Color Settings]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/gnome-terminal-colors.png) + +Syntax highlighting, where present, was provided by [zsh-syntax-highlighting]( + https://github.com/zsh-users/zsh-syntax-highlighting). + +### How was the recommended font created? + +[The recommended font](#meslo-nerd-font-patched-for-powerlevel10k) is the product of many +individuals. Its origin is *Bitstream Vera Sans Mono*, which has given birth to *Menlo*, which in +turn has spawned *Meslo*. Finally, extra glyphs have been added to *Meslo* with scripts forked +from Nerd Fonts. The final font is released under the terms of +[Apache License]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20License.txt). + +MesloLGS NF font can be recreated with the following command (requires `git` and `docker`): + +```zsh +git clone --depth=1 https://github.com/romkatv/nerd-fonts.git +cd nerd-fonts +./build 'Meslo/S/*' +``` + +If everything goes well, four `ttf` files will appear in `./out`. + +### How to package Powerlevel10k for distribution? + +It's currently neither easy nor recommended to package and distribute Powerlevel10k. There are no +instructions you can follow that would allow you to easily update your package when new versions of +Powerlevel10k are released. This may change in the future but not soon. + +## Troubleshooting + +- [Question mark in prompt](#question-mark-in-prompt) +- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render) +- [Sub-pixel imperfections around powerline symbols](#sub-pixel-imperfections-around-powerline-symbols) +- [Error: character not in range](#error-character-not-in-range) +- [Cursor is in the wrong place](#cursor-is-in-the-wrong-place) +- [Prompt wrapping around in a weird way](#prompt-wrapping-around-in-a-weird-way) +- [Right prompt is in the wrong place](#right-prompt-is-in-the-wrong-place) +- [Configuration wizard runs automatically every time Zsh is started](#configuration-wizard-runs-automatically-every-time-zsh-is-started) +- [Some prompt styles are missing from the configuration wizard](#some-prompt-styles-are-missing-from-the-configuration-wizard) +- [Cannot install the recommended font](#cannot-install-the-recommended-font) +- [Extra or missing spaces in prompt compared to Powerlevel9k](#extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k) + - [Extra space without background on the right side of right prompt](#extra-space-without-background-on-the-right-side-of-right-prompt) + - [Extra or missing spaces around icons](#extra-or-missing-spaces-around-icons) +- [Weird things happen after typing `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc) +- [Transient prompt stops working after some time](#transient-prompt-stops-working-after-some-time) +- [Cannot make Powerlevel10k work with my plugin manager](#cannot-make-powerlevel10k-work-with-my-plugin-manager) +- [Directory is difficult to see in prompt when using Rainbow style](#directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) +- [Horrific mess when resizing terminal window](#horrific-mess-when-resizing-terminal-window) +- [Icons cut off in Konsole](#icons-cut-off-in-konsole) +- [Arch Linux logo has a dot in the bottom right corner](#arch-linux-logo-has-a-dot-in-the-bottom-right-corner) + +### Question mark in prompt + +If it looks like a regular `?`, that's normal. It means you have untracked files in the current Git +repository. Type `git status` to see these files. You can change this symbol or disable the display +of untracked files altogether. Search for `untracked files` in `~/.p10k.zsh`. + +*FAQ*: [What do different symbols in Git status mean?]( + #what-do-different-symbols-in-git-status-mean) + +You can also get a weird-looking question mark in your prompt if your terminal's font is missing +some glyphs. See [icons, glyphs or powerline symbols don't render]( + #icons-glyphs-or-powerline-symbols-dont-render). + +### Icons, glyphs or powerline symbols don't render + +Restart your terminal, [install the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) +and run `p10k configure`. + +### Sub-pixel imperfections around powerline symbols + +![Powerline Prompt Imperfections]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/powerline-imperfections.png) + +There are three imperfections on the screenshot. From left to right: + +1. A thin blue line (a sub-pixel gap) between the content of a prompt segment and the following +powerline connection. +1. Incorrect alignment of a powerline connection and the following prompt segment. The connection +appears shifted to the right. +1. A thin red line below a powerline connection. The connection appears shifted up. + +Zsh themes don't have down-to-pixel control over the terminal content. Everything you see on the +screen is made of monospace characters. A white powerline prompt segment is made of text on white +background followed by U+E0B0 (a right-pointing triangle). + +![Powerline Prompt Imperfections]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/powerline-anatomy.png) + +If Powerlevel10k prompt has imperfections around powerline symbols, you'll see exactly the same +imperfections with all powerline themes (Agnoster, Powerlevel9k, Powerline, etc.) + +There are several things you can try to deal with these imperfections: + +- Try [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). If you are already using + it, switching to another font may help but is unlikely. +- Change terminal font size one point up or down. For example, in iTerm2 powerline prompt looks + perfect at font sizes 11 and 13 but breaks down at 12. +- Enable builtin powerline glyphs in terminal settings if your terminal supports it (iTerm2 does). +- Change font hinting and/or anti-aliasing mode in the terminal settings. +- Shift all text one pixel up/down/left/right if your terminal has an option to do so. +- Try a different terminal. + +A more radical solution is to switch to prompt style without background. Type `p10k configure` and +select *Lean*. This style has a modern lightweight look. As a bonus, it doesn't suffer from +rendering imperfections that afflict powerline-style prompt. + +### Error: character not in range + +Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", your locale +doesn't support UTF-8. You need to fix it. If you are running Zsh over SSH, see +[this](https://github.com/romkatv/powerlevel10k/issues/153#issuecomment-518347833). If you are +running Zsh locally, Google "set UTF-8 locale in *your OS*". + +### Cursor is in the wrong place + +Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", see the +[previous section](#zsh-character-not-in-range). + +If the `echo` command prints `❯` but the cursor is still in the wrong place, install +[the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) and run +`p10k configure`. + +If this doesn't help, add `unset ZLE_RPROMPT_INDENT` at the bottom of `~/.zshrc`. + +Still having issues? Run the following command to diagnose the problem: + +```zsh +() { + emulate -L zsh + setopt err_return no_unset + local text + print -rl -- 'Select a part of your prompt from the terminal window and paste it below.' '' + read -r '?Prompt: ' text + local -i len=${(m)#text} + local frame="+-${(pl.$len..-.):-}-+" + print -lr -- $frame "| $text |" $frame +} +``` + +#### If the prompt line aligns with the frame + +```text ++------------------------------+ +| romka@adam ✓ ~/powerlevel10k | ++------------------------------+ +``` + +If the output of the command is aligned for every part of your prompt (left and right), this +indicates a bug in the theme or your config. Use this command to diagnose it: + +```zsh +print -rl -- ${(eq+)PROMPT} ${(eq+)RPROMPT} +``` + +Look for `%{...%}` and backslash escapes in the output. If there are any, they are the likely +culprits. Open an issue if you get stuck. + +#### If the prompt line is longer than the frame + +```text ++-----------------------------+ +| romka@adam ✓ ~/powerlevel10k | ++-----------------------------+ +``` + +This is usually caused by a terminal bug or misconfiguration that makes it print ambiguous-width +characters as double-width instead of single width. For example, +[this issue](https://github.com/romkatv/powerlevel10k/issues/165). + +#### If the prompt line is shorter than the frame and is mangled + +```text ++------------------------------+ +| romka@adam ✓~/powerlevel10k | ++------------------------------+ +``` + +Note that this prompt is different from the original as it's missing a space after the check mark. + +This can be caused by a low-level bug in macOS. See +[this issue](https://github.com/romkatv/powerlevel10k/issues/241). + +This can also happen if prompt contains glyphs designated as "wide" in the Unicode standard and your +terminal incorrectly displays them as non-wide. Terminals suffering from this limitation include +Konsole, Hyper and the integrated VSCode Terminal. The solution is to use a different terminal or +remove all wide glyphs from prompt. + +#### If the prompt line is shorter than the frame and is not mangled + +```text ++--------------------------------+ +| romka@adam ✓ ~/powerlevel10k | ++--------------------------------+ +``` + +This can be caused by misconfigured locale. See +[this issue](https://github.com/romkatv/powerlevel10k/issues/251). + +### Prompt wrapping around in a weird way + +See [cursor is in the wrong place](#cursor-is-in-the-wrong-place). + +### Right prompt is in the wrong place + +See [cursor is in the wrong place](#cursor-is-in-the-wrong-place). + +### Configuration wizard runs automatically every time Zsh is started + +When Powerlevel10k starts, it automatically runs `p10k configure` if no `POWERLEVEL9K_*` +parameters are defined. Based on your prompt style choices, the configuration wizard creates +`~/.p10k.zsh` with a bunch of `POWERLEVEL9K_*` parameters in it and adds a line to `~/.zshrc` to +source this file. The next time you start Zsh, the configuration wizard shouldn't run automatically. +If it does, this means the evaluation of `~/.zshrc` terminates prematurely before it reaches the +line that sources `~/.p10k.zsh`. This most often happens due to syntax errors in `~/.zshrc`. These +errors get hidden by the configuration wizard screen, so you don't notice them. When you exit +configuration wizard, look for error messages. You can also use +`POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true zsh` to start Zsh without automatically running the +configuration wizard. Once you can see the errors, fix `~/.zshrc` to get rid of them. + +### Some prompt styles are missing from the configuration wizard + +If Zsh version is below 5.7.1 or `COLORTERM` environment variable is neither `24bit` nor +`truecolor`, configuration wizard won't offer Pure style with Snazzy color scheme. *Fix*: Install +Zsh >= 5.7.1 and use a terminal with truecolor support. Verify with `print -P '%F{#ff0000}red%f'`. + +If the terminal can display fewer than 256 colors, configuration wizard preselects Lean style with +8 colors. All other styles require at least 256 colors. *Fix*: Use a terminal with 256 color support +and make sure that `TERM` environment variable is set correctly. Verify with +`print $terminfo[colors]`. + +If there is no UTF-8 locale on the system, configuration wizard won't offer prompt styles that use +Unicode characters. *Fix*: Install a UTF-8 locale. Verify with `locale -a`. + +When a UTF-8 locale is available, the first few questions asked by the configuration wizard assess +capabilities of the terminal font. If your answers indicate that some glyphs don't render correctly, +configuration wizard won't offer prompt styles that use them. *Fix*: Restart your terminal and +install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). Verify by running +`p10k configure` and checking that all glyphs render correctly. + +### Cannot install the recommended font + +Once you download [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k), +you can install it just like any other font. Google "how to install fonts on *your OS*". + +### Extra or missing spaces in prompt compared to Powerlevel9k + +tl;dr: Add `ZLE_RPROMPT_INDENT=0` and `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get +the same prompt spacing as in Powerlevel9k. + +When using Powerlevel10k with a Powerlevel9k config, you might get additional spaces in prompt here +and there. These come in two flavors. + +#### Extra space without background on the right side of right prompt + +tl;dr: Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get rid of that space. + +From [Zsh documentation]( + http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-ZLE_005fRPROMPT_005fINDENT): + +> `ZLE_RPROMPT_INDENT ` +> +> If set, used to give the indentation between the right hand side of the right prompt in the line +> editor as given by `RPS1` or `RPROMPT` and the right hand side of the screen. If not set, the +> value `1` is used. +> +> Typically this will be used to set the value to `0` so that the prompt appears flush with the +> right hand side of the screen. + +Powerlevel10k respects this parameter. If you set `ZLE_RPROMPT_INDENT=1` (or leave it unset, which +is the same thing as setting it to `1`), you'll get an empty space to the right of right prompt. If +you set `ZLE_RPROMPT_INDENT=0`, your prompt will go to the edge of the terminal. This is how it +works in every theme except Powerlevel9k. + +![ZLE_RPROMPT_INDENT: Powerlevel10k vs Powerlevel9k]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/p9k-vs-p10k-zle-rprompt-indent.png) + +Powerlevel9k issue: [powerlevel9k#1292](https://github.com/Powerlevel9k/powerlevel9k/issues/1292). +It's been fixed in the development branch of Powerlevel9k but the fix hasn't yet made it to +`master`. + +Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get the same spacing on the right edge of prompt as in +Powerlevel9k. + +*Note:* Several versions of Zsh have bugs that get triggered when you set `ZLE_RPROMPT_INDENT=0`. +Powerlevel10k can work around these bugs when using powerline prompt style. If you notice visual +artifacts in prompt, or wrong cursor position, try removing `ZLE_RPROMPT_INDENT` from `~/.zshrc`. + +#### Extra or missing spaces around icons + +tl;dr: Add `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around +icons as in Powerlevel9k. + +Spacing around icons in Powerlevel9k is inconsistent. + +![ZLE_RPROMPT_INDENT: Powerlevel10k vs Powerlevel9k]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/p9k-vs-p10k-icon-spacing.png) + +This inconsistency is a constant source of annoyance, so it was fixed in Powerlevel10k. You can add +`POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around icons as in +Powerlevel9k. + +*Note:* It's not a good idea to define `POWERLEVEL9K_LEGACY_ICON_SPACING` when using +`p10k configure`. + +### Weird things happen after typing `source ~/.zshrc` + +It's almost always a bad idea to run `source ~/.zshrc`, whether you are using Powerlevel10k or not. +This command may result in random errors, misbehaving code and progressive slowdown of Zsh. + +If you've made changes to `~/.zshrc` or to files sourced by it, restart Zsh to apply them. The most +reliable way to do this is to type `exit` and then start a new Zsh session. You can also use +`exec zsh`. While not exactly equivalent to complete Zsh restart, this command is much more reliable +than `source ~/.zshrc`. + +### Transient prompt stops working after some time + +See [weird things happen after typing `source ~/.zshrc`]( + #weird-things-happen-after-typing-source-zshrc). + +### Cannot make Powerlevel10k work with my plugin manager + +If the [installation instructions](#installation) didn't work for you, try disabling your current +theme (so that you end up with no theme) and then installing Powerlevel10k manually. + +1. Disable the current theme in your framework / plugin manager. + +- **oh-my-zsh:** Open `~/.zshrc` and remove the line that sets `ZSH_THEME`. It might look like this: + `ZSH_THEME="powerlevel9k/powerlevel9k"`. +- **zplug:** Open `~/.zshrc` and remove the `zplug` command that refers to your current theme. For + example, if you are currently using Powerlevel9k, look for + `zplug bhilburn/powerlevel9k, use:powerlevel9k.zsh-theme`. +- **prezto:** Open `~/.zpreztorc` and put `zstyle :prezto:module:prompt theme off` in it. Remove + any other command that sets `theme` such as `zstyle :prezto:module:prompt theme powerlevel9k`. +- **antigen:** Open `~/.zshrc` and remove the line that sets `antigen theme`. It might look like + this: `antigen theme powerlevel9k/powerlevel9k`. + +2. Install Powerlevel10k manually. + +```zsh +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k +echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc +``` + +This method of installation won't make anything slower or otherwise sub-par. + +### Directory is difficult to see in prompt when using Rainbow style + +In Rainbow style the current working directory is shown with bright white text on blue background. +The white is fixed and always looks the same but the appearance of "blue" is defined by your +terminal color palette. If it's very light, it may be difficult to see white text on it. + +There are several ways to fix this. + +- Type `p10k configure` and choose a more readable prompt style. +- [Change terminal color palette](#change-the-color-palette-used-by-your-terminal). Try Tango Dark + or Solarized Dark, or change just the "blue" color. +- [Change directory background and/or foreground color](#set-colors-through-Powerlevel10k-configuration-parameters). + The parameters you are looking for are called `POWERLEVEL9K_DIR_BACKGROUND`, + `POWERLEVEL9K_DIR_FOREGROUND`, `POWERLEVEL9K_DIR_SHORTENED_FOREGROUND`, + `POWERLEVEL9K_DIR_ANCHOR_FOREGROUND` and `POWERLEVEL9K_DIR_ANCHOR_BOLD`. You can find them in + `~/.p10k.zsh`. + +### Horrific mess when resizing terminal window + +When you resize a terminal window horizontally back and forth a few times, you might see this ugly +picture. + +![Powerlevel10k Resizing Mess]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resizing-mess.png) + +tl;dr: This issue arises when a terminal reflows Zsh prompt upon resizing. It isn't specific to +Powerlevel10k. See [mitigation](#mitigation). + +*Note: This section [used to say]( + https://github.com/romkatv/powerlevel10k/blob/dce00cdb5daaa8a519df234a7012ba3257b644d4/README.md#horrific-mess-when-resizing-terminal-window) +that the problem is caused by a bug in Zsh. While it's true that it's possible to avoid the problem +in many circumstances by modifying Zsh, it cannot be completely resolved this way. Thus it's unfair +to pin the blame on Zsh.* + +#### The anatomy of the problem + +The issue is manifested when the vertical distance between the start of the current prompt and the +cursor (henceforth `VD`) changes when the terminal window is resized. + +When a terminal window gets shrunk horizontally, there are two ways for a terminal to handle long +lines that no longer fit: *reflow* or *truncate*. + +Terminal content before shrinking: + +![Terminal Content Before Shrinking]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-original.png) + +Terminal reflows text when shrinking: + +![Terminal Reflows Text When Shrinking]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-reflow.png) + +Terminal truncates text when shrinking: + +![Terminal Truncates Text When Shrinking]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-truncate.png) + +Reflowing strategy can change the height of terminal content. If such content happens to be between +the start of the current prompt and the cursor, Zsh will print prompt on the wrong line. Truncation +strategy never changes the height of terminal content, so it doesn't trigger this issue. + +Let's see how the issue plays out in slow motion. We'll start by launching `zsh -f` and pasting +the following code: + +```zsh +function pause() { read -s } +functions -M pause 0 + +reset +print -l {1..3} +setopt prompt_subst +PROMPT=$'${$((pause()))+}left>${(pl.$((COLUMNS-12))..-.)} ' +``` + +When `PROMPT` gets expanded, it calls `pause` to let us observe the state of the terminal. Here's +the initial state: + +![Terminal Resizing Bug 1]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-1.png) + +Zsh keeps track of the cursor position relative to the start of the current prompt. In this case it +knows that the cursor is one line below. When we shrink the terminal window, it looks like this: + +![Terminal Resizing Bug 2]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-2.png) + +At this point the terminal sends `SIGWINCH` to Zsh to notify it about changes in the terminal +dimensions. Note that this signal is sent *after* the content of the terminal has been reflown. + +When Zsh receives `SIGWINCH`, it attempts to erase the current prompt and print it anew. It goes to +the position where it *thinks* the current prompt is -- one line above the cursor (!) -- erases all +terminal content that follows and prints reexpanded prompt there. However, after resizing prompt is +no longer one line above the cursor. It's two lines above! Zsh ends up printing new prompt one line +too low. + +![Terminal Resizing Bug 3]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-3.png) + +In this case we ended up with unwanted junk content because `VD` has *increased*. When you make +terminal window wider, `VD` can also *decrease*, which would result in the new prompt being printed +higher than intended, potentially erasing useful content in the process. + +Here are a few more examples where shrinking terminal window increased `VD`. + +- Simple one-line left prompt with right prompt. No `prompt_subst`. Note that the cursor is below + the prompt line (hit *ESC-ENTER* to get it there). + ![Zsh Prompt That Breaks on Terminal Shrinking 1]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-breakable-1.png) +- Simple one-line left prompt. No `prompt_subst`, no right prompt. Here `VD` is bound to increase + upon terminal shrinking due to the command line wrapping around. + ![Zsh Prompt That Breaks on Terminal Shrinking 2]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-breakable-2.png) + +#### Zsh patch + +[This Zsh patch](https://github.com/romkatv/zsh/tree/fix-winchanged) fixes the issue on some +terminals. The idea behind the patch is to use `sc` (save cursor) terminal capability before +printing prompt and `rc` (restore cursor) to move cursor back to the original position when prompt +needs to be refreshed. + +The patch works only on terminals that reflow saved cursor position together with text when the +terminal window is resized. The patch has no observable effect on terminals that don't reflow text +on resize (both patched and unpatched Zsh behave correctly) and on terminals that reflow text but +not the saved cursor position (both patched and unpatched Zsh redraw prompt at the same incorrect +position). In other words, the patch fixes the resizing issue on some terminals while keeping the +behavior unchanged on others. + +There are two alternative approaches to patching Zsh that may seem to work at first glance but in +fact don't: + +- Instead of `sc`, use `u7` terminal capability to query the current cursor position and then `cup` + to go back to it. This doesn't work because the absolute position of the start of the current + prompt changes when text gets reflown. +- Recompute `VD` based on new terminal dimensions before attempting to refresh prompt. This doesn't + work because Zsh doesn't know whether terminal reflows text or truncates it. If Zsh could somehow + know that the terminal reflows text, this approach still wouldn't work on terminals that + continuously reflow text and rapid-fire `SIGWINCH` when the window is being resized. In such + environment real terminal dimensions go out of sync with what Zsh thinks the dimensions are. + +There is no ETA for the patch making its way into upstream Zsh. See [discussion]( + https://www.zsh.org/mla/workers//2019/msg00561.html). + +#### Mitigation + +There are a few mitigation options for this issue. + +- Use [kitty](https://sw.kovidgoyal.net/kitty/) terminal version >= 0.24.0 and enable terminal-shell + integration in Powerlevel10k by defining `POWERLEVEL9K_TERM_SHELL_INTEGRATION=true` in + `~/.p10k.zsh`. +- Apply [the patch](#zsh-patch) and [rebuild Zsh from source]( + https://github.com/zsh-users/zsh/blob/master/INSTALL). It won't help if you are using Alacritty, + kitty or some other terminal that reflows text on resize but doesn't reflow saved cursor position. + On such terminals the patch will have no visible effect. +- Disable text reflowing on window resize in terminal settings. If your terminal doesn't have this + setting, try a different terminal. +- Avoid long lines between the start of prompt and cursor. + 1. Disable ruler with `POWERLEVEL9K_SHOW_RULER=false`. + 2. Disable prompt connection with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '`. + 3. Disable right frame with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=''`, + `POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=''` and + `POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=''`. + 4. Set `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()`. Right prompt on the last prompt line will cause + resizing issues only when the cursor is below it. This isn't very common, so you might want to + keep some elements in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` provided that none of them are + succeeded by `newline`. + +### Icons cut off in Konsole + +When using Konsole with a non-monospace font, icons may be cut off on the right side. Here +"non-monospace" refers to any font with glyphs wider than a single column, or wider than two columns +for glyphs designated as "wide" in the Unicode standard. + +![Icons cut off in Konsole]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/konsole-non-monospace-font.png) + +The last line on the screenshot shows a cut off Arch Linux logo. + +There are several mitigation options for this issue. + +1. Use a different terminal. Konsole is the only terminal that exhibits this behavior. +2. Use a monospace font. +3. Manually add an extra space after the icon that gets cut off. For example, if the content of + `os_icon` prompt segment gets cut off, open `~/.p10k.zsh`, search for + `POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and change it as follows: +```zsh +typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT} ' # extra space at the end +``` +4. Use a different icon that is monospace. For example, if Arch Linux logo gets cut off, add + the following parameter to `~/.p10k.zsh`: +```zsh +typeset -g POWERLEVEL9K_LINUX_ARCH_ICON='Arch' # plain "Arch" in place of a logo +``` +5. Disable the display of the icon that gets cut off. For example, if the content of + `os_icon` prompt segment gets cut off, open `~/.p10k.zsh` and remove `os_icon` from + `POWERLEVEL9K_LEFT_PROMPT_ELEMENTS` and `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS`. + +*Note*: [Non-monospace fonts are not officially supported by Konsole]( + https://bugs.kde.org/show_bug.cgi?id=418553#c5). + +### Arch Linux logo has a dot in the bottom right corner + +![Arch Linux Logo with a dot]( + https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/arch-linux-logo-dot.png) + +Some fonts have this incorrect dotted icon in bold typeface. There are two ways to fix this issue. + +1. Use a font with a correct Arch Linux logo in bold typeface. For example, + [the recommended Powerlevel10k font](#meslo-nerd-font-patched-for-powerlevel10k). +2. Display the icon in regular (non-bold) typeface. To do this, open `~/.p10k.zsh`, search for + `POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and remove `%B` from its value. +```zsh +typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT}' # not bold +``` diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh new file mode 100644 index 0000000..441be2c --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh @@ -0,0 +1,1667 @@ +# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # cpu_arch # CPU architecture + # time # current time + # =========================[ Line #2 ]========================= + newline # \n + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%242F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%242F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%242F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Default background color. + typeset -g POWERLEVEL9K_BACKGROUND=238 + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%246F\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%246F\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%248Fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%248F' # grey foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%248Fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%248Ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 + + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%248Fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%248Fat ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%248Fin ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%248Fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh new file mode 100644 index 0000000..50e4261 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh @@ -0,0 +1,1648 @@ +# Config for Powerlevel10k with 8-color lean prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # cpu_arch # CPU architecture + # time # current time + # =========================[ Line #2 ]========================= + newline # \n + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # Basic style options that define the overall look of your prompt. You probably don't want to + # change them. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= + + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll + # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and + # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. + typeset -g POWERLEVEL9K_SHOW_RULER=false + typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' + typeset -g POWERLEVEL9K_RULER_FOREGROUND=7 + + # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' + # to make it easier to see the alignment between left and right prompt and to separate prompt + # from command output. It serves the same purpose as ruler (see above) without increasing + # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false + # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact + # prompt. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=7 + # Add a space between the end of left prompt and the filler. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' + # Add a space between the filler and the start of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=2 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=1 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=4 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=4 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=4 + # Set to true to display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=false + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable directories. See POWERLEVEL9K_LOCK_ICON and + # POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v2 + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=4 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=4# + # + # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=4 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%f' # default foreground + local clean='%2F' # green foreground + local modified='%3F' # yellow foreground + local untracked='%4F' # blue foreground + local conflicted='%1F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%f' # default foreground + local clean='%f' # default foreground + local modified='%f' # default foreground + local untracked='%f' # default foreground + local conflicted='%f' # default foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=2 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR= + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg repository. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=2 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=2 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=3 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=false + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=false + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=1 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=1 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=1 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=3 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=6 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=3 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=6 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=4 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=2 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=1 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=2 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=3 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=4 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=4 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=6 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=3 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=7 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=7 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=6 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=6 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=6 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=6 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=2 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=6 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=4 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=5 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=5 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=4 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=6 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=1 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=1 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=4 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=4 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=6 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=5 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=1 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=3 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=3 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=5 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=3 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=4 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=3 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=5 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=3 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=3 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=4 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %2F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %3F⇡$P9K_IP_TX_RATE}' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{0}▁' '%K{0}▂' '%K{0}▃' '%K{0}▄' '%K{0}▅' '%K{0}▆' '%K{0}▇' '%K{0}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(4 4 4 4 4) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=6 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and green text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 2 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh new file mode 100644 index 0000000..b938ce6 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh @@ -0,0 +1,1644 @@ +# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # cpu_arch # CPU architecture + # time # current time + # =========================[ Line #2 ]========================= + newline + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # Basic style options that define the overall look of your prompt. You probably don't want to + # change them. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= + + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll + # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and + # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. + typeset -g POWERLEVEL9K_SHOW_RULER=false + typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' + typeset -g POWERLEVEL9K_RULER_FOREGROUND=240 + + # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' + # to make it easier to see the alignment between left and right prompt and to separate prompt + # from command output. It serves the same purpose as ruler (see above) without increasing + # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false + # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact + # prompt. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 + # Add a space between the end of left prompt and the filler. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' + # Add a space between the filler and the start of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%f' # default foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg repository. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=false + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=false + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %70F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %215F⇡$P9K_IP_TX_RATE}' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh new file mode 100644 index 0000000..97c1a20 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh @@ -0,0 +1,193 @@ +# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure). +# +# Differences from Pure: +# +# - Git: +# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state. +# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`). +# +# Apart from the differences listed above, the replication of Pure prompt is exact. This includes +# even the questionable parts. For example, just like in Pure, there is no indication of Git status +# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt +# doesn't fit on one line, it wraps around with no attempt to shorten it. +# +# If you like the general style of Pure but not particularly attached to all its quirks, type +# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking +# advantage of Powerlevel10k features that aren't present in Pure. + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # Prompt colors. + local grey=242 + local red=1 + local yellow=3 + local blue=4 + local magenta=5 + local cyan=6 + local white=7 + + # Left prompt segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + context # user@host + dir # current directory + vcs # git status + command_execution_time # previous command duration + # =========================[ Line #2 ]========================= + newline # \n + virtualenv # python virtual environment + prompt_char # prompt symbol + ) + + # Right prompt segments. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # command_execution_time # previous command duration + # virtualenv # python virtual environment + # context # user@host + # time # current time + # =========================[ Line #2 ]========================= + newline # \n + ) + + # Basic style options that define the overall prompt look. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons + + # Add an empty line before each prompt except the first. This doesn't emulate the bug + # in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Magenta prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮' + # Prompt symbol in overwrite vi mode is the same as in command mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false + + # Grey Python Virtual Environment. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey + # Don't show Python version. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + + # Blue current directory. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue + + # Context format when root: user@host. The first part white, the rest grey. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f" + # Context format when not root: user@host. The whole thing grey. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f" + # Don't show context unless root or in SSH. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION= + + # Show previous command duration only if it's >= 5s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5 + # Don't show fractional seconds. Thus, 7s rather than 7.3s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Yellow previous command duration. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow + + # Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones. + typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey + + # Disable async loading indicator to make directories that aren't Git repositories + # indistinguishable from large Git repositories without known state. + typeset -g POWERLEVEL9K_VCS_LOADING_TEXT= + + # Don't wait for Git status even for a millisecond, so that prompt always updates + # asynchronously when Git state changes. + typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0 + + # Cyan ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan + # Don't show remote branch, current tag or stashes. + typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind) + # Don't show the branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + # When in detached HEAD state, show @commit where branch normally goes. + typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@' + # Don't show staged, unstaged, untracked indicators. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON= + # Show '*' when there are staged, unstaged or untracked files. + typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*' + # Show '⇣' if local branch is behind remote. + typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣' + # Show '⇡' if local branch is ahead of remote. + typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡' + # Don't show the number of commits next to the ahead/behind arrows. + typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1 + # Remove space between '⇣' and '⇡' and all trailing spaces. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }' + + # Grey current time. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands rather than the end times of + # their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh new file mode 100644 index 0000000..e989b0a --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh @@ -0,0 +1,1757 @@ +# Config for Powerlevel10k with powerline prompt style with colorful background. +# Type `p10k configure` to generate your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + # os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # cpu_arch # CPU architecture + # time # current time + # =========================[ Line #2 ]========================= + newline + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%242F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%242F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%242F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=232 + typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Current directory background color. + typeset -g POWERLEVEL9K_DIR_BACKGROUND=4 + # Default current directory foreground color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=254 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='in ' + + #####################################[ vcs: git status ]###################################### + # Version control background colors. + typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8 + + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + # Styling for different parts of Git status. + local meta='%7F' # white foreground + local clean='%0F' # black foreground + local modified='%0F' # black foreground + local untracked='%0F' # black foreground + local conflicted='%1F' # red foreground + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='on ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg repository. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0 + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0 + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 + + ###################[ command_execution_time: duration of the last command ]################### + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3 + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6 + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0 + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 + typeset -g POWERLEVEL9K_DIRENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override these parameters for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND and + # POWERLEVEL9K_ASDF_${TOOL}_BACKGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_BACKGROUND=7 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUBY_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PYTHON_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_GOLANG_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_NODEJS_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUST_BACKGROUND=208 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_FLUTTER_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_LUA_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=1 + typeset -g POWERLEVEL9K_ASDF_JAVA_BACKGROUND=7 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PERL_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ERLANG_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ELIXIR_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_POSTGRES_BACKGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PHP_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_HASKELL_BACKGROUND=3 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_JULIA_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7 + typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 + typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=0 + typeset -g POWERLEVEL9K_NNN_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=0 + typeset -g POWERLEVEL9K_LF_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=0 + typeset -g POWERLEVEL9K_XPLR_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIM_SHELL_BACKGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=7 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=1 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Foreground color. + typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0 + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8 + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RAM_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=0 + typeset -g POWERLEVEL9K_SWAP_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=0 + typeset -g POWERLEVEL9K_TODO_BACKGROUND=8 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=255 + typeset -g POWERLEVEL9K_TIMEWARRIOR_BACKGROUND=8 + + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=0 + typeset -g POWERLEVEL9K_TASKWARRIOR_BACKGROUND=6 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=0 + typeset -g POWERLEVEL9K_CPU_ARCH_BACKGROUND=3 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 + typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_BACKGROUND=0 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0 + + # Context format when running with privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_GOENV_BACKGROUND=4 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_NVM_BACKGROUND=5 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255 + typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHP_VERSION_BACKGROUND=5 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_LARAVEL_VERSION_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_JAVA_VERSION_BACKGROUND=7 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=0 + typeset -g POWERLEVEL9K_PACKAGE_BACKGROUND=6 + + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RVM_BACKGROUND=240 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_FVM_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_LUAENV_BACKGROUND=4 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=1 + typeset -g POWERLEVEL9K_JENV_BACKGROUND=7 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PLENV_BACKGROUND=4 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHPENV_BACKGROUND=5 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide PHP version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_SCALAENV_BACKGROUND=1 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=0 + typeset -g POWERLEVEL9K_HASKELL_STACK_BACKGROUND=3 + + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform_version: It shows active terraform version (https://www.terraform.io) ]################# + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_SHOW_ON_COMMAND='terraform|tf' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_AWS_DEFAULT_BACKGROUND=1 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=7 + typeset -g POWERLEVEL9K_AZURE_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=7 + typeset -g POWERLEVEL9K_GCLOUD_BACKGROUND=4 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=0 + typeset -g POWERLEVEL9K_TOOLBOX_BACKGROUND=3 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='in ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7 + typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0 + typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_BACKGROUND=4 + typeset -g POWERLEVEL9K_IP_FOREGROUND=0 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+⇡$P9K_IP_TX_RATE }$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4 + typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0 + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=0 + typeset -g POWERLEVEL9K_WIFI_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(0 0 0 0 0) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_TIME_BACKGROUND=7 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='at ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background + # greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=3 + typeset -g POWERLEVEL9K_EXAMPLE_BACKGROUND=1 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh new file mode 100644 index 0000000..a59e222 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh @@ -0,0 +1,111 @@ +# Config file for Powerlevel10k with the style of robbyrussell theme from Oh My Zsh. +# +# Original: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#robbyrussell. +# +# Replication of robbyrussell theme is exact. The only observable difference is in +# performance. Powerlevel10k prompt is very fast everywhere, even in large Git repositories. +# +# Usage: Source this file either before or after loading Powerlevel10k. +# +# source ~/powerlevel10k/config/p10k-robbyrussell.zsh +# source ~/powerlevel10k/powerlevel10k.zsh-theme + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # Left prompt segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(prompt_char dir vcs) + # Right prompt segments. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=() + + # Basic style options that define the overall prompt look. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons + + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=green + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=red + # Prompt symbol: bold arrow. + typeset -g POWERLEVEL9K_PROMPT_CHAR_CONTENT_EXPANSION='%B➜ ' + + # Cyan current directory. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=cyan + # Show only the last segment of the current directory. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last + # Bold directory. + typeset -g POWERLEVEL9K_DIR_CONTENT_EXPANSION='%B$P9K_CONTENT' + + # Git status formatter. + function my_git_formatter() { + emulate -L zsh + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, it's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + else + # Use VCS_STATUS_* parameters to assemble Git status. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + typeset -g my_git_format="${1+%B%4F}git:(${1+%1F}" + my_git_format+=${${VCS_STATUS_LOCAL_BRANCH:-${VCS_STATUS_COMMIT[1,8]}}//\%/%%} + my_git_format+="${1+%4F})" + if (( VCS_STATUS_NUM_CONFLICTED || VCS_STATUS_NUM_STAGED || + VCS_STATUS_NUM_UNSTAGED || VCS_STATUS_NUM_UNTRACKED )); then + my_git_format+=" ${1+%3F}✗" + fi + fi + } + functions -M my_git_formatter 2>/dev/null + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' + # Grey Git status when loading. + typeset -g POWERLEVEL9K_VCS_LOADING_FOREGROUND=246 + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/internal/configure.zsh b/airootfs/etc/skel/powerlevel10k/internal/configure.zsh new file mode 100644 index 0000000..3e880f2 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/internal/configure.zsh @@ -0,0 +1,85 @@ +# Fewer than 47 columns will probably work. Haven't tried it. +typeset -gr __p9k_wizard_columns=47 +# The bottleneck is ask_tails with nerd fonts. Everything else works fine with 12 lines. +typeset -gr __p9k_wizard_lines=14 +typeset -gr __p9k_zd=${ZDOTDIR:-$HOME} +typeset -gr __p9k_zd_u=${${${(q)__p9k_zd}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%} +typeset -gr __p9k_zshrc=${${:-$__p9k_zd/.zshrc}:A} +typeset -gr __p9k_zshrc_u=$__p9k_zd_u/.zshrc +typeset -gr __p9k_root_dir_u=${${${(q)__p9k_root_dir}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%} + +function _p9k_can_configure() { + [[ $1 == '-q' ]] && local -i q=1 || local -i q=0 + function $0_error() { + (( q )) || print -rP "%1F[ERROR]%f %Bp10k configure%b: $1" >&2 + } + typeset -g __p9k_cfg_path_o=${POWERLEVEL9K_CONFIG_FILE:=${ZDOTDIR:-~}/.p10k.zsh} + typeset -g __p9k_cfg_basename=${__p9k_cfg_path_o:t} + typeset -g __p9k_cfg_path=${__p9k_cfg_path_o:A} + typeset -g __p9k_cfg_path_u=${${${(q)__p9k_cfg_path_o}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%} + { + [[ -o multibyte ]] || { $0_error "multibyte option is not set"; return 1 } + [[ -e $__p9k_zd ]] || { $0_error "$__p9k_zd_u does not exist"; return 1 } + [[ -d $__p9k_zd ]] || { $0_error "$__p9k_zd_u is not a directory"; return 1 } + [[ ! -d $__p9k_cfg_path ]] || { $0_error "$__p9k_cfg_path_u is a directory"; return 1 } + [[ ! -d $__p9k_zshrc ]] || { $0_error "$__p9k_zshrc_u is a directory"; return 1 } + + local dir=${__p9k_cfg_path:h} + while [[ ! -e $dir && $dir != ${dir:h} ]]; do dir=${dir:h}; done + if [[ ! -d $dir ]]; then + $0_error "cannot create $__p9k_cfg_path_u because ${dir//\%/%%} is not a directory" + return 1 + fi + if [[ ! -w $dir ]]; then + $0_error "cannot create $__p9k_cfg_path_u because ${dir//\%/%%} is readonly" + return 1 + fi + + [[ ! -e $__p9k_cfg_path || -f $__p9k_cfg_path || -h $__p9k_cfg_path ]] || { + $0_error "$__p9k_cfg_path_u is a special file" + return 1 + } + [[ ! -e $__p9k_zshrc || -f $__p9k_zshrc || -h $__p9k_zshrc ]] || { + $0_error "$__p9k_zshrc_u a special file" + return 1 + } + [[ ! -e $__p9k_zshrc || -r $__p9k_zshrc ]] || { + $0_error "$__p9k_zshrc_u is not readable" + return 1 + } + local style + for style in lean lean-8colors classic rainbow pure; do + [[ -r $__p9k_root_dir/config/p10k-$style.zsh ]] || { + $0_error "$__p9k_root_dir_u/config/p10k-$style.zsh is not readable" + return 1 + } + done + + (( LINES >= __p9k_wizard_lines && COLUMNS >= __p9k_wizard_columns )) || { + $0_error "terminal size too small; must be at least $__p9k_wizard_columns columns by $__p9k_wizard_lines lines" + return 1 + } + [[ -t 0 && -t 1 ]] || { + $0_error "no TTY" + return 2 + } + return 0 + } always { + unfunction $0_error + } +} + +function p9k_configure() { + eval "$__p9k_intro" + _p9k_can_configure || return + ( + set -- -f + builtin source $__p9k_root_dir/internal/wizard.zsh + ) + local ret=$? + case $ret in + 0) builtin source $__p9k_cfg_path; _p9k__force_must_init=1;; + 69) return 0;; + *) return $ret;; + esac +} diff --git a/airootfs/etc/skel/powerlevel10k/internal/icons.zsh b/airootfs/etc/skel/powerlevel10k/internal/icons.zsh new file mode 100644 index 0000000..0a6c665 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/internal/icons.zsh @@ -0,0 +1,1029 @@ +typeset -gA icons + +function _p9k_init_icons() { + [[ -n ${POWERLEVEL9K_MODE-} || ${langinfo[CODESET]} == (utf|UTF)(-|)8 ]] || local POWERLEVEL9K_MODE=ascii + [[ $_p9k__icon_mode == $POWERLEVEL9K_MODE/$POWERLEVEL9K_LEGACY_ICON_SPACING/$POWERLEVEL9K_ICON_PADDING ]] && return + typeset -g _p9k__icon_mode=$POWERLEVEL9K_MODE/$POWERLEVEL9K_LEGACY_ICON_SPACING/$POWERLEVEL9K_ICON_PADDING + + if [[ $POWERLEVEL9K_LEGACY_ICON_SPACING == true ]]; then + local s= + local q=' ' + else + local s=' ' + local q= + fi + + case $POWERLEVEL9K_MODE in + 'flat'|'awesome-patched') + # Awesome-Patched Font required! See: + # https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched + icons=( + RULER_CHAR '\u2500' # ─ + LEFT_SEGMENT_SEPARATOR '\uE0B0' #  + RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  + LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace + LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  + RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  + CARRIAGE_RETURN_ICON '\u21B5'$s # ↵ + ROOT_ICON '\uE801' #  + SUDO_ICON '\uE0A2' #  + RUBY_ICON '\uE847 ' #  + AWS_ICON '\uE895'$s #  + AWS_EB_ICON '\U1F331'$q # 🌱 + BACKGROUND_JOBS_ICON '\uE82F ' #  + TEST_ICON '\uE891'$s #  + TODO_ICON '\u2611' # ☑ + BATTERY_ICON '\uE894'$s #  + DISK_ICON '\uE1AE ' #  + OK_ICON '\u2714' # ✔ + FAIL_ICON '\u2718' # ✘ + SYMFONY_ICON 'SF' + NODE_ICON '\u2B22'$s # ⬢ + NODEJS_ICON '\u2B22'$s # ⬢ + MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ + MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ + MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ + APPLE_ICON '\uE26E'$s #  + WINDOWS_ICON '\uE26F'$s #  + FREEBSD_ICON '\U1F608'$q # 😈 + ANDROID_ICON '\uE270'$s #  + LINUX_ICON '\uE271'$s #  + LINUX_ARCH_ICON '\uE271'$s #  + LINUX_DEBIAN_ICON '\uE271'$s #  + LINUX_RASPBIAN_ICON '\uE271'$s #  + LINUX_UBUNTU_ICON '\uE271'$s #  + LINUX_CENTOS_ICON '\uE271'$s #  + LINUX_COREOS_ICON '\uE271'$s #  + LINUX_ELEMENTARY_ICON '\uE271'$s #  + LINUX_MINT_ICON '\uE271'$s #  + LINUX_FEDORA_ICON '\uE271'$s #  + LINUX_GENTOO_ICON '\uE271'$s #  + LINUX_MAGEIA_ICON '\uE271'$s #  + LINUX_NIXOS_ICON '\uE271'$s #  + LINUX_MANJARO_ICON '\uE271'$s #  + LINUX_DEVUAN_ICON '\uE271'$s #  + LINUX_ALPINE_ICON '\uE271'$s #  + LINUX_AOSC_ICON '\uE271'$s #  + LINUX_OPENSUSE_ICON '\uE271'$s #  + LINUX_SABAYON_ICON '\uE271'$s #  + LINUX_SLACKWARE_ICON '\uE271'$s #  + LINUX_VOID_ICON '\uE271'$s #  + LINUX_ARTIX_ICON '\uE271'$s #  + LINUX_RHEL_ICON '\uE271'$s #  + LINUX_AMZN_ICON '\uE271'$s #  + LINUX_ENDEAVOUROS_ICON '\uE271'$s #  + SUNOS_ICON '\U1F31E'$q # 🌞 + HOME_ICON '\uE12C'$s #  + HOME_SUB_ICON '\uE18D'$s #  + FOLDER_ICON '\uE818'$s #  + NETWORK_ICON '\uE1AD'$s #  + ETC_ICON '\uE82F'$s #  + LOAD_ICON '\uE190 ' #  + SWAP_ICON '\uE87D'$s #  + RAM_ICON '\uE1E2 ' #  + SERVER_ICON '\uE895'$s #  + VCS_UNTRACKED_ICON '\uE16C'$s #  + VCS_UNSTAGED_ICON '\uE17C'$s #  + VCS_STAGED_ICON '\uE168'$s #  + VCS_STASH_ICON '\uE133 ' #  + #VCS_INCOMING_CHANGES_ICON '\uE1EB ' #  + #VCS_INCOMING_CHANGES_ICON '\uE80D ' #  + VCS_INCOMING_CHANGES_ICON '\uE131 ' #  + #VCS_OUTGOING_CHANGES_ICON '\uE1EC ' #  + #VCS_OUTGOING_CHANGES_ICON '\uE80E ' #  + VCS_OUTGOING_CHANGES_ICON '\uE132 ' #  + VCS_TAG_ICON '\uE817 ' #  + VCS_BOOKMARK_ICON '\uE87B' #  + VCS_COMMIT_ICON '\uE821 ' #  + VCS_BRANCH_ICON '\uE220 ' #  + VCS_REMOTE_BRANCH_ICON '\u2192' # → + VCS_LOADING_ICON '' + VCS_GIT_ICON '\uE20E ' #  + VCS_GIT_GITHUB_ICON '\uE20E ' # + VCS_GIT_BITBUCKET_ICON '\uE20E ' # + VCS_GIT_GITLAB_ICON '\uE20E ' # + VCS_HG_ICON '\uE1C3 ' #  + VCS_SVN_ICON 'svn'$q + RUST_ICON 'R' + PYTHON_ICON '\uE63C'$s #  (doesn't always work) + SWIFT_ICON 'Swift' + GO_ICON 'Go' + GOLANG_ICON 'Go' + PUBLIC_IP_ICON 'IP' + LOCK_ICON '\UE138' #  + NORDVPN_ICON '\UE138' #  + EXECUTION_TIME_ICON '\UE89C'$s #  + SSH_ICON 'ssh' + VPN_ICON '\UE138' + KUBERNETES_ICON '\U2388'$s # ⎈ + DROPBOX_ICON '\UF16B'$s #  (doesn't always work) + DATE_ICON '\uE184'$s #  + TIME_ICON '\uE12E'$s #  + JAVA_ICON '\U2615' # ☕︎ + LARAVEL_ICON '' + RANGER_ICON '\u2B50' # ⭐ + MIDNIGHT_COMMANDER_ICON 'mc' + VIM_ICON 'vim' + TERRAFORM_ICON 'tf' + PROXY_ICON '\u2194' # ↔ + DOTNET_ICON '.NET' + DOTNET_CORE_ICON '.NET' + AZURE_ICON '\u2601' # ☁ + DIRENV_ICON '\u25BC' # ▼ + FLUTTER_ICON 'F' + GCLOUD_ICON 'G' + LUA_ICON 'lua' + PERL_ICON 'perl' + NNN_ICON 'nnn' + LF_ICON 'lf' + XPLR_ICON 'xplr' + TIMEWARRIOR_ICON 'tw' + TASKWARRIOR_ICON 'task' + NIX_SHELL_ICON 'nix' + WIFI_ICON 'WiFi' + ERLANG_ICON 'erl' + ELIXIR_ICON 'elixir' + POSTGRES_ICON 'postgres' + PHP_ICON 'php' + HASKELL_ICON 'hs' + PACKAGE_ICON 'pkg' + JULIA_ICON 'jl' + SCALA_ICON 'scala' + TOOLBOX_ICON '\u2B22' # ⬢ + ARCH_ICON 'arch' + ) + ;; + 'awesome-fontconfig') + # fontconfig with awesome-font required! See + # https://github.com/gabrielelana/awesome-terminal-fonts + icons=( + RULER_CHAR '\u2500' # ─ + LEFT_SEGMENT_SEPARATOR '\uE0B0' #  + RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  + LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace + LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  + RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  + CARRIAGE_RETURN_ICON '\u21B5' # ↵ + ROOT_ICON '\uF201'$s #  + SUDO_ICON '\uF09C'$s #  + RUBY_ICON '\uF219 ' #  + AWS_ICON '\uF270'$s #  + AWS_EB_ICON '\U1F331'$q # 🌱 + BACKGROUND_JOBS_ICON '\uF013 ' #  + TEST_ICON '\uF291'$s #  + TODO_ICON '\u2611' # ☑ + BATTERY_ICON '\U1F50B' # 🔋 + DISK_ICON '\uF0A0 ' #  + OK_ICON '\u2714' # ✔ + FAIL_ICON '\u2718' # ✘ + SYMFONY_ICON 'SF' + NODE_ICON '\u2B22' # ⬢ + NODEJS_ICON '\u2B22' # ⬢ + MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ + MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ + MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ + APPLE_ICON '\uF179'$s #  + WINDOWS_ICON '\uF17A'$s #  + FREEBSD_ICON '\U1F608'$q # 😈 + ANDROID_ICON '\uE17B'$s #  (doesn't always work) + LINUX_ICON '\uF17C'$s #  + LINUX_ARCH_ICON '\uF17C'$s #  + LINUX_DEBIAN_ICON '\uF17C'$s #  + LINUX_RASPBIAN_ICON '\uF17C'$s #  + LINUX_UBUNTU_ICON '\uF17C'$s #  + LINUX_CENTOS_ICON '\uF17C'$s #  + LINUX_COREOS_ICON '\uF17C'$s #  + LINUX_ELEMENTARY_ICON '\uF17C'$s #  + LINUX_MINT_ICON '\uF17C'$s #  + LINUX_FEDORA_ICON '\uF17C'$s #  + LINUX_GENTOO_ICON '\uF17C'$s #  + LINUX_MAGEIA_ICON '\uF17C'$s #  + LINUX_NIXOS_ICON '\uF17C'$s #  + LINUX_MANJARO_ICON '\uF17C'$s #  + LINUX_DEVUAN_ICON '\uF17C'$s #  + LINUX_ALPINE_ICON '\uF17C'$s #  + LINUX_AOSC_ICON '\uF17C'$s #  + LINUX_OPENSUSE_ICON '\uF17C'$s #  + LINUX_SABAYON_ICON '\uF17C'$s #  + LINUX_SLACKWARE_ICON '\uF17C'$s #  + LINUX_VOID_ICON '\uF17C'$s #  + LINUX_ARTIX_ICON '\uF17C'$s #  + LINUX_RHEL_ICON '\uF17C'$s #  + LINUX_AMZN_ICON '\uF17C'$s #  + LINUX_ENDEAVOUROS_ICON '\uF17C'$s #  + SUNOS_ICON '\uF185 ' #  + HOME_ICON '\uF015'$s #  + HOME_SUB_ICON '\uF07C'$s #  + FOLDER_ICON '\uF115'$s #  + ETC_ICON '\uF013 ' #  + NETWORK_ICON '\uF09E'$s #  + LOAD_ICON '\uF080 ' #  + SWAP_ICON '\uF0E4'$s #  + RAM_ICON '\uF0E4'$s #  + SERVER_ICON '\uF233'$s #  + VCS_UNTRACKED_ICON '\uF059'$s #  + VCS_UNSTAGED_ICON '\uF06A'$s #  + VCS_STAGED_ICON '\uF055'$s #  + VCS_STASH_ICON '\uF01C ' #  + VCS_INCOMING_CHANGES_ICON '\uF01A ' #  + VCS_OUTGOING_CHANGES_ICON '\uF01B ' #  + VCS_TAG_ICON '\uF217 ' #  + VCS_BOOKMARK_ICON '\uF27B ' #  + VCS_COMMIT_ICON '\uF221 ' #  + VCS_BRANCH_ICON '\uF126 ' #  + VCS_REMOTE_BRANCH_ICON '\u2192' # → + VCS_LOADING_ICON '' + VCS_GIT_ICON '\uF1D3 ' #  + VCS_GIT_GITHUB_ICON '\uF113 ' #  + VCS_GIT_BITBUCKET_ICON '\uF171 ' #  + VCS_GIT_GITLAB_ICON '\uF296 ' #  + VCS_HG_ICON '\uF0C3 ' #  + VCS_SVN_ICON 'svn'$q + RUST_ICON '\uE6A8' #  + PYTHON_ICON '\uE63C'$s #  + SWIFT_ICON 'Swift' + GO_ICON 'Go' + GOLANG_ICON 'Go' + PUBLIC_IP_ICON 'IP' + LOCK_ICON '\UF023' #  + NORDVPN_ICON '\UF023' #  + EXECUTION_TIME_ICON '\uF253'$s #  + SSH_ICON 'ssh' + VPN_ICON '\uF023' + KUBERNETES_ICON '\U2388' # ⎈ + DROPBOX_ICON '\UF16B'$s #  + DATE_ICON '\uF073 ' #  + TIME_ICON '\uF017 ' #  + JAVA_ICON '\U2615' # ☕︎ + LARAVEL_ICON '' + RANGER_ICON '\u2B50' # ⭐ + MIDNIGHT_COMMANDER_ICON 'mc' + VIM_ICON 'vim' + TERRAFORM_ICON 'tf' + PROXY_ICON '\u2194' # ↔ + DOTNET_ICON '.NET' + DOTNET_CORE_ICON '.NET' + AZURE_ICON '\u2601' # ☁ + DIRENV_ICON '\u25BC' # ▼ + FLUTTER_ICON 'F' + GCLOUD_ICON 'G' + LUA_ICON 'lua' + PERL_ICON 'perl' + NNN_ICON 'nnn' + LF_ICON 'lf' + XPLR_ICON 'xplr' + TIMEWARRIOR_ICON 'tw' + TASKWARRIOR_ICON 'task' + NIX_SHELL_ICON 'nix' + WIFI_ICON 'WiFi' + ERLANG_ICON 'erl' + ELIXIR_ICON 'elixir' + POSTGRES_ICON 'postgres' + PHP_ICON 'php' + HASKELL_ICON 'hs' + PACKAGE_ICON 'pkg' + JULIA_ICON 'jl' + SCALA_ICON 'scala' + TOOLBOX_ICON '\u2B22' # ⬢ + ARCH_ICON 'arch' + ) + ;; + 'awesome-mapped-fontconfig') + # mapped fontconfig with awesome-font required! See + # https://github.com/gabrielelana/awesome-terminal-fonts + # don't forget to source the font maps in your startup script + if [ -z "$AWESOME_GLYPHS_LOADED" ]; then + echo "Powerlevel9k warning: Awesome-Font mappings have not been loaded. + Source a font mapping in your shell config, per the Awesome-Font docs + (https://github.com/gabrielelana/awesome-terminal-fonts), + Or use a different Powerlevel9k font configuration."; + fi + icons=( + RULER_CHAR '\u2500' # ─ + LEFT_SEGMENT_SEPARATOR '\uE0B0' #  + RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  + LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace + LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  + RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  + CARRIAGE_RETURN_ICON '\u21B5' # ↵ + ROOT_ICON "${CODEPOINT_OF_OCTICONS_ZAP:+\\u$CODEPOINT_OF_OCTICONS_ZAP}" + SUDO_ICON "${CODEPOINT_OF_AWESOME_UNLOCK:+\\u$CODEPOINT_OF_AWESOME_UNLOCK$s}" + RUBY_ICON "${CODEPOINT_OF_OCTICONS_RUBY:+\\u$CODEPOINT_OF_OCTICONS_RUBY }" + AWS_ICON "${CODEPOINT_OF_AWESOME_SERVER:+\\u$CODEPOINT_OF_AWESOME_SERVER$s}" + AWS_EB_ICON '\U1F331'$q # 🌱 + BACKGROUND_JOBS_ICON "${CODEPOINT_OF_AWESOME_COG:+\\u$CODEPOINT_OF_AWESOME_COG }" + TEST_ICON "${CODEPOINT_OF_AWESOME_BUG:+\\u$CODEPOINT_OF_AWESOME_BUG$s}" + TODO_ICON "${CODEPOINT_OF_AWESOME_CHECK_SQUARE_O:+\\u$CODEPOINT_OF_AWESOME_CHECK_SQUARE_O$s}" + BATTERY_ICON "${CODEPOINT_OF_AWESOME_BATTERY_FULL:+\\U$CODEPOINT_OF_AWESOME_BATTERY_FULL$s}" + DISK_ICON "${CODEPOINT_OF_AWESOME_HDD_O:+\\u$CODEPOINT_OF_AWESOME_HDD_O }" + OK_ICON "${CODEPOINT_OF_AWESOME_CHECK:+\\u$CODEPOINT_OF_AWESOME_CHECK$s}" + FAIL_ICON "${CODEPOINT_OF_AWESOME_TIMES:+\\u$CODEPOINT_OF_AWESOME_TIMES}" + SYMFONY_ICON 'SF' + NODE_ICON '\u2B22' # ⬢ + NODEJS_ICON '\u2B22' # ⬢ + MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ + MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ + MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ + APPLE_ICON "${CODEPOINT_OF_AWESOME_APPLE:+\\u$CODEPOINT_OF_AWESOME_APPLE$s}" + FREEBSD_ICON '\U1F608'$q # 😈 + LINUX_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_ARCH_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_DEBIAN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_RASPBIAN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_UBUNTU_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_CENTOS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_COREOS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_ELEMENTARY_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_MINT_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_FEDORA_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_GENTOO_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_MAGEIA_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_NIXOS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_MANJARO_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_DEVUAN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_ALPINE_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_AOSC_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_OPENSUSE_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_SABAYON_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_SLACKWARE_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_VOID_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_ARTIX_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_RHEL_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_AMZN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + LINUX_ENDEAVOUROS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" + SUNOS_ICON "${CODEPOINT_OF_AWESOME_SUN_O:+\\u$CODEPOINT_OF_AWESOME_SUN_O }" + HOME_ICON "${CODEPOINT_OF_AWESOME_HOME:+\\u$CODEPOINT_OF_AWESOME_HOME$s}" + HOME_SUB_ICON "${CODEPOINT_OF_AWESOME_FOLDER_OPEN:+\\u$CODEPOINT_OF_AWESOME_FOLDER_OPEN$s}" + FOLDER_ICON "${CODEPOINT_OF_AWESOME_FOLDER_O:+\\u$CODEPOINT_OF_AWESOME_FOLDER_O$s}" + ETC_ICON "${CODEPOINT_OF_AWESOME_COG:+\\u$CODEPOINT_OF_AWESOME_COG }" + NETWORK_ICON "${CODEPOINT_OF_AWESOME_RSS:+\\u$CODEPOINT_OF_AWESOME_RSS$s}" + LOAD_ICON "${CODEPOINT_OF_AWESOME_BAR_CHART:+\\u$CODEPOINT_OF_AWESOME_BAR_CHART }" + SWAP_ICON "${CODEPOINT_OF_AWESOME_DASHBOARD:+\\u$CODEPOINT_OF_AWESOME_DASHBOARD$s}" + RAM_ICON "${CODEPOINT_OF_AWESOME_DASHBOARD:+\\u$CODEPOINT_OF_AWESOME_DASHBOARD$s}" + SERVER_ICON "${CODEPOINT_OF_AWESOME_SERVER:+\\u$CODEPOINT_OF_AWESOME_SERVER$s}" + VCS_UNTRACKED_ICON "${CODEPOINT_OF_AWESOME_QUESTION_CIRCLE:+\\u$CODEPOINT_OF_AWESOME_QUESTION_CIRCLE$s}" + VCS_UNSTAGED_ICON "${CODEPOINT_OF_AWESOME_EXCLAMATION_CIRCLE:+\\u$CODEPOINT_OF_AWESOME_EXCLAMATION_CIRCLE$s}" + VCS_STAGED_ICON "${CODEPOINT_OF_AWESOME_PLUS_CIRCLE:+\\u$CODEPOINT_OF_AWESOME_PLUS_CIRCLE$s}" + VCS_STASH_ICON "${CODEPOINT_OF_AWESOME_INBOX:+\\u$CODEPOINT_OF_AWESOME_INBOX }" + VCS_INCOMING_CHANGES_ICON "${CODEPOINT_OF_AWESOME_ARROW_CIRCLE_DOWN:+\\u$CODEPOINT_OF_AWESOME_ARROW_CIRCLE_DOWN }" + VCS_OUTGOING_CHANGES_ICON "${CODEPOINT_OF_AWESOME_ARROW_CIRCLE_UP:+\\u$CODEPOINT_OF_AWESOME_ARROW_CIRCLE_UP }" + VCS_TAG_ICON "${CODEPOINT_OF_AWESOME_TAG:+\\u$CODEPOINT_OF_AWESOME_TAG }" + VCS_BOOKMARK_ICON "${CODEPOINT_OF_OCTICONS_BOOKMARK:+\\u$CODEPOINT_OF_OCTICONS_BOOKMARK}" + VCS_COMMIT_ICON "${CODEPOINT_OF_OCTICONS_GIT_COMMIT:+\\u$CODEPOINT_OF_OCTICONS_GIT_COMMIT }" + VCS_BRANCH_ICON "${CODEPOINT_OF_OCTICONS_GIT_BRANCH:+\\u$CODEPOINT_OF_OCTICONS_GIT_BRANCH }" + VCS_REMOTE_BRANCH_ICON "${CODEPOINT_OF_OCTICONS_REPO_PUSH:+\\u$CODEPOINT_OF_OCTICONS_REPO_PUSH$s}" + VCS_LOADING_ICON '' + VCS_GIT_ICON "${CODEPOINT_OF_AWESOME_GIT:+\\u$CODEPOINT_OF_AWESOME_GIT }" + VCS_GIT_GITHUB_ICON "${CODEPOINT_OF_AWESOME_GITHUB_ALT:+\\u$CODEPOINT_OF_AWESOME_GITHUB_ALT }" + VCS_GIT_BITBUCKET_ICON "${CODEPOINT_OF_AWESOME_BITBUCKET:+\\u$CODEPOINT_OF_AWESOME_BITBUCKET }" + VCS_GIT_GITLAB_ICON "${CODEPOINT_OF_AWESOME_GITLAB:+\\u$CODEPOINT_OF_AWESOME_GITLAB }" + VCS_HG_ICON "${CODEPOINT_OF_AWESOME_FLASK:+\\u$CODEPOINT_OF_AWESOME_FLASK }" + VCS_SVN_ICON 'svn'$q + RUST_ICON '\uE6A8' #  + PYTHON_ICON '\U1F40D' # 🐍 + SWIFT_ICON '\uE655'$s #  + PUBLIC_IP_ICON "${CODEPOINT_OF_AWESOME_GLOBE:+\\u$CODEPOINT_OF_AWESOME_GLOBE$s}" + LOCK_ICON "${CODEPOINT_OF_AWESOME_LOCK:+\\u$CODEPOINT_OF_AWESOME_LOCK}" + NORDVPN_ICON "${CODEPOINT_OF_AWESOME_LOCK:+\\u$CODEPOINT_OF_AWESOME_LOCK}" + EXECUTION_TIME_ICON "${CODEPOINT_OF_AWESOME_HOURGLASS_END:+\\u$CODEPOINT_OF_AWESOME_HOURGLASS_END$s}" + SSH_ICON 'ssh' + VPN_ICON "${CODEPOINT_OF_AWESOME_LOCK:+\\u$CODEPOINT_OF_AWESOME_LOCK}" + KUBERNETES_ICON '\U2388' # ⎈ + DROPBOX_ICON "${CODEPOINT_OF_AWESOME_DROPBOX:+\\u$CODEPOINT_OF_AWESOME_DROPBOX$s}" + DATE_ICON '\uF073 ' #  + TIME_ICON '\uF017 ' #  + JAVA_ICON '\U2615' # ☕︎ + LARAVEL_ICON '' + RANGER_ICON '\u2B50' # ⭐ + MIDNIGHT_COMMANDER_ICON 'mc' + VIM_ICON 'vim' + TERRAFORM_ICON 'tf' + PROXY_ICON '\u2194' # ↔ + DOTNET_ICON '.NET' + DOTNET_CORE_ICON '.NET' + AZURE_ICON '\u2601' # ☁ + DIRENV_ICON '\u25BC' # ▼ + FLUTTER_ICON 'F' + GCLOUD_ICON 'G' + LUA_ICON 'lua' + PERL_ICON 'perl' + NNN_ICON 'nnn' + LF_ICON 'lf' + XPLR_ICON 'xplr' + TIMEWARRIOR_ICON 'tw' + TASKWARRIOR_ICON 'task' + NIX_SHELL_ICON 'nix' + WIFI_ICON 'WiFi' + ERLANG_ICON 'erl' + ELIXIR_ICON 'elixir' + POSTGRES_ICON 'postgres' + PHP_ICON 'php' + HASKELL_ICON 'hs' + PACKAGE_ICON 'pkg' + JULIA_ICON 'jl' + SCALA_ICON 'scala' + TOOLBOX_ICON '\u2B22' # ⬢ + ARCH_ICON 'arch' + ) + ;; + 'nerdfont-v3') + # In this version of Nerd Fonts the Material icons are mapped to U+F0001-U+F19C3. + # The font may also have Material icons in the old range of U+F500-U+FD46 but + # powerlevel10k won't rely on them. + icons=( + RULER_CHAR '\u2500' # ─ + LEFT_SEGMENT_SEPARATOR '\uE0B0' #  + RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  + LEFT_SEGMENT_END_SEPARATOR ' ' # + LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  + RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  + CARRIAGE_RETURN_ICON '\u21B5' # ↵ + ROOT_ICON '\uE614'$q #  + SUDO_ICON '\uF09C'$s #  + RUBY_ICON '\uF219 ' #  + AWS_ICON '\uF270'$s #  + AWS_EB_ICON '\UF1BD'$q$q #  + BACKGROUND_JOBS_ICON '\uF013 ' #  + TEST_ICON '\uF188'$s #  + TODO_ICON '\u2611' # ☑ + BATTERY_ICON '\UF240 ' #  + DISK_ICON '\uF0A0'$s #  + OK_ICON '\uF00C'$s #  + FAIL_ICON '\uF00D' #  + SYMFONY_ICON '\uE757' #  + NODE_ICON '\uE617 ' #  + NODEJS_ICON '\uE617 ' #  + MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ + MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ + MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ + APPLE_ICON '\uF179' #  + WINDOWS_ICON '\uF17A'$s #  + FREEBSD_ICON '\UF30C ' #  + ANDROID_ICON '\uF17B' #  + LINUX_ARCH_ICON '\uF303' #  + LINUX_CENTOS_ICON '\uF304'$s #  + LINUX_COREOS_ICON '\uF305'$s #  + LINUX_DEBIAN_ICON '\uF306' #  + LINUX_RASPBIAN_ICON '\uF315' #  + LINUX_ELEMENTARY_ICON '\uF309'$s #  + LINUX_FEDORA_ICON '\uF30a'$s #  + LINUX_GENTOO_ICON '\uF30d'$s #  + LINUX_MAGEIA_ICON '\uF310' #  + LINUX_MINT_ICON '\uF30e'$s #  + LINUX_NIXOS_ICON '\uF313'$s #  + LINUX_MANJARO_ICON '\uF312'$s #  + LINUX_DEVUAN_ICON '\uF307'$s #  + LINUX_ALPINE_ICON '\uF300'$s #  + LINUX_AOSC_ICON '\uF301'$s #  + LINUX_OPENSUSE_ICON '\uF314'$s #  + LINUX_SABAYON_ICON '\uF317'$s #  + LINUX_SLACKWARE_ICON '\uF319'$s #  + LINUX_VOID_ICON '\UF32E'$s #  + LINUX_ARTIX_ICON '\UF31F'$s #  + LINUX_UBUNTU_ICON '\uF31b'$s #  + LINUX_RHEL_ICON '\uF316'$s #  + LINUX_AMZN_ICON '\uF270'$s #  + LINUX_ENDEAVOUROS_ICON '\UF322'$s #  + LINUX_ICON '\uF17C' #  + SUNOS_ICON '\uF185 ' #  + HOME_ICON '\uF015'$s #  + HOME_SUB_ICON '\uF07C'$s #  + FOLDER_ICON '\uF115'$s #  + ETC_ICON '\uF013'$s #  + NETWORK_ICON '\UF0378'$s # 󰍸 + LOAD_ICON '\uF080 ' #  + SWAP_ICON '\uF464'$s #  + RAM_ICON '\uF0E4'$s #  + SERVER_ICON '\uF0AE'$s #  + VCS_UNTRACKED_ICON '\uF059'$s #  + VCS_UNSTAGED_ICON '\uF06A'$s #  + VCS_STAGED_ICON '\uF055'$s #  + VCS_STASH_ICON '\uF01C ' #  + VCS_INCOMING_CHANGES_ICON '\uF01A ' #  + VCS_OUTGOING_CHANGES_ICON '\uF01B ' #  + VCS_TAG_ICON '\uF02B ' #  + VCS_BOOKMARK_ICON '\uF461 ' #  + VCS_COMMIT_ICON '\uE729 ' #  + VCS_BRANCH_ICON '\uF126 ' #  + VCS_REMOTE_BRANCH_ICON '\uE728 ' #  + VCS_LOADING_ICON '' # + VCS_GIT_ICON '\uF1D3 ' #  + VCS_GIT_GITHUB_ICON '\uF113 ' #  + VCS_GIT_BITBUCKET_ICON '\uE703 ' #  + VCS_GIT_GITLAB_ICON '\uF296 ' #  + VCS_HG_ICON '\uF0C3 ' #  + VCS_SVN_ICON '\uE72D'$q #  + RUST_ICON '\uE7A8'$q #  + PYTHON_ICON '\UE73C ' #  + SWIFT_ICON '\uE755' #  + GO_ICON '\uE626' #  + GOLANG_ICON '\uE626' #  + PUBLIC_IP_ICON '\UF0AC'$s #  + LOCK_ICON '\UF023' #  + NORDVPN_ICON '\UF023' #  + EXECUTION_TIME_ICON '\uF252'$s #  + SSH_ICON '\uF489'$s #  + VPN_ICON '\UF023' #  + KUBERNETES_ICON '\UF10FE' # 󱃾 + DROPBOX_ICON '\UF16B'$s #  + DATE_ICON '\uF073 ' #  + TIME_ICON '\uF017 ' #  + JAVA_ICON '\uE738' #  + LARAVEL_ICON '\ue73f'$q #  + RANGER_ICON '\uF00b ' #  + MIDNIGHT_COMMANDER_ICON 'mc' # mc + VIM_ICON '\uE62B' #  + TERRAFORM_ICON '\uF1BB ' #  + PROXY_ICON '\u2194' # ↔ + DOTNET_ICON '\uE77F' #  + DOTNET_CORE_ICON '\uE77F' #  + AZURE_ICON '\UF0805' # 󰠅 + DIRENV_ICON '\u25BC' # ▼ + FLUTTER_ICON 'F' # F + GCLOUD_ICON '\UF02AD' # 󰊭 + LUA_ICON '\uE620' #  + PERL_ICON '\uE769' #  + NNN_ICON 'nnn' # nnn + LF_ICON 'lf' # lf + XPLR_ICON 'xplr' # xplr + TIMEWARRIOR_ICON '\uF49B' #  + TASKWARRIOR_ICON '\uF4A0 ' #  + NIX_SHELL_ICON '\uF313 ' #  + WIFI_ICON '\uF1EB ' #  + ERLANG_ICON '\uE7B1 ' #  + ELIXIR_ICON '\uE62D' #  + POSTGRES_ICON '\uE76E' #  + PHP_ICON '\uE608' #  + HASKELL_ICON '\uE61F' #  + PACKAGE_ICON '\UF03D7' # 󰏗 + JULIA_ICON '\uE624' #  + SCALA_ICON '\uE737' #  + TOOLBOX_ICON '\uE20F'$s #  + ARCH_ICON '\uE266' #  + ) + ;; + 'nerdfont-complete'|'nerdfont-fontconfig') + # nerd-font patched (complete) font required! See + # https://github.com/ryanoasis/nerd-fonts + # http://nerdfonts.com/#cheat-sheet + icons=( + RULER_CHAR '\u2500' # ─ + LEFT_SEGMENT_SEPARATOR '\uE0B0' #  + RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  + LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace + LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  + RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  + CARRIAGE_RETURN_ICON '\u21B5' # ↵ + ROOT_ICON '\uE614'$q #  + SUDO_ICON '\uF09C'$s #  + RUBY_ICON '\uF219 ' #  + AWS_ICON '\uF270'$s #  + AWS_EB_ICON '\UF1BD'$q$q #  + BACKGROUND_JOBS_ICON '\uF013 ' #  + TEST_ICON '\uF188'$s #  + TODO_ICON '\u2611' # ☑ + BATTERY_ICON '\UF240 ' #  + DISK_ICON '\uF0A0'$s #  + OK_ICON '\uF00C'$s #  + FAIL_ICON '\uF00D' #  + SYMFONY_ICON '\uE757' #  + NODE_ICON '\uE617 ' #  + NODEJS_ICON '\uE617 ' #  + MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ + MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ + MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ + APPLE_ICON '\uF179' #  + WINDOWS_ICON '\uF17A'$s #  + FREEBSD_ICON '\UF30C ' #  + ANDROID_ICON '\uF17B' #  + LINUX_ARCH_ICON '\uF303' #  + LINUX_CENTOS_ICON '\uF304'$s #  + LINUX_COREOS_ICON '\uF305'$s #  + LINUX_DEBIAN_ICON '\uF306' #  + LINUX_RASPBIAN_ICON '\uF315' #  + LINUX_ELEMENTARY_ICON '\uF309'$s #  + LINUX_FEDORA_ICON '\uF30a'$s #  + LINUX_GENTOO_ICON '\uF30d'$s #  + LINUX_MAGEIA_ICON '\uF310' #  + LINUX_MINT_ICON '\uF30e'$s #  + LINUX_NIXOS_ICON '\uF313'$s #  + LINUX_MANJARO_ICON '\uF312'$s #  + LINUX_DEVUAN_ICON '\uF307'$s #  + LINUX_ALPINE_ICON '\uF300'$s #  + LINUX_AOSC_ICON '\uF301'$s #  + LINUX_OPENSUSE_ICON '\uF314'$s #  + LINUX_SABAYON_ICON '\uF317'$s #  + LINUX_SLACKWARE_ICON '\uF319'$s #  + LINUX_VOID_ICON '\uF17C' #  + LINUX_ARTIX_ICON '\uF17C' #  + LINUX_UBUNTU_ICON '\uF31b'$s #  + LINUX_RHEL_ICON '\uF316'$s #  + LINUX_AMZN_ICON '\uF270'$s #  + LINUX_ENDEAVOUROS_ICON '\uF17C' #  + LINUX_ICON '\uF17C' #  + SUNOS_ICON '\uF185 ' #  + HOME_ICON '\uF015'$s #  + HOME_SUB_ICON '\uF07C'$s #  + FOLDER_ICON '\uF115'$s #  + ETC_ICON '\uF013'$s #  + NETWORK_ICON '\uF50D'$s #  + LOAD_ICON '\uF080 ' #  + SWAP_ICON '\uF464'$s #  + RAM_ICON '\uF0E4'$s #  + SERVER_ICON '\uF0AE'$s #  + VCS_UNTRACKED_ICON '\uF059'$s #  + VCS_UNSTAGED_ICON '\uF06A'$s #  + VCS_STAGED_ICON '\uF055'$s #  + VCS_STASH_ICON '\uF01C ' #  + VCS_INCOMING_CHANGES_ICON '\uF01A ' #  + VCS_OUTGOING_CHANGES_ICON '\uF01B ' #  + VCS_TAG_ICON '\uF02B ' #  + VCS_BOOKMARK_ICON '\uF461 ' #  + VCS_COMMIT_ICON '\uE729 ' #  + VCS_BRANCH_ICON '\uF126 ' #  + VCS_REMOTE_BRANCH_ICON '\uE728 ' #  + VCS_LOADING_ICON '' + VCS_GIT_ICON '\uF1D3 ' #  + VCS_GIT_GITHUB_ICON '\uF113 ' #  + VCS_GIT_BITBUCKET_ICON '\uE703 ' #  + VCS_GIT_GITLAB_ICON '\uF296 ' #  + VCS_HG_ICON '\uF0C3 ' #  + VCS_SVN_ICON '\uE72D'$q #  + RUST_ICON '\uE7A8'$q #  + PYTHON_ICON '\UE73C ' #  + SWIFT_ICON '\uE755' #  + GO_ICON '\uE626' #  + GOLANG_ICON '\uE626' #  + PUBLIC_IP_ICON '\UF0AC'$s #  + LOCK_ICON '\UF023' #  + NORDVPN_ICON '\UF023' #  + EXECUTION_TIME_ICON '\uF252'$s #  + SSH_ICON '\uF489'$s #  + VPN_ICON '\UF023' + KUBERNETES_ICON '\U2388' # ⎈ + DROPBOX_ICON '\UF16B'$s #  + DATE_ICON '\uF073 ' #  + TIME_ICON '\uF017 ' #  + JAVA_ICON '\uE738' #  + LARAVEL_ICON '\ue73f'$q #  + RANGER_ICON '\uF00b ' #  + MIDNIGHT_COMMANDER_ICON 'mc' + VIM_ICON '\uE62B' #  + TERRAFORM_ICON '\uF1BB ' #  + PROXY_ICON '\u2194' # ↔ + DOTNET_ICON '\uE77F' #  + DOTNET_CORE_ICON '\uE77F' #  + AZURE_ICON '\uFD03' # ﴃ + DIRENV_ICON '\u25BC' # ▼ + FLUTTER_ICON 'F' + GCLOUD_ICON '\uF7B7' #  + LUA_ICON '\uE620' #  + PERL_ICON '\uE769' #  + NNN_ICON 'nnn' + LF_ICON 'lf' + XPLR_ICON 'xplr' + TIMEWARRIOR_ICON '\uF49B' #  + TASKWARRIOR_ICON '\uF4A0 ' #  + NIX_SHELL_ICON '\uF313 ' #  + WIFI_ICON '\uF1EB ' #  + ERLANG_ICON '\uE7B1 ' #  + ELIXIR_ICON '\uE62D' #  + POSTGRES_ICON '\uE76E' #  + PHP_ICON '\uE608' #  + HASKELL_ICON '\uE61F' #  + PACKAGE_ICON '\uF8D6' #  + JULIA_ICON '\uE624' #  + SCALA_ICON '\uE737' #  + TOOLBOX_ICON '\uE20F'$s #  + ARCH_ICON '\uE266' #  + ) + ;; + ascii) + icons=( + RULER_CHAR '-' + LEFT_SEGMENT_SEPARATOR '' + RIGHT_SEGMENT_SEPARATOR '' + LEFT_SEGMENT_END_SEPARATOR ' ' + LEFT_SUBSEGMENT_SEPARATOR '|' + RIGHT_SUBSEGMENT_SEPARATOR '|' + CARRIAGE_RETURN_ICON '' + ROOT_ICON '#' + SUDO_ICON '' + RUBY_ICON 'rb' + AWS_ICON 'aws' + AWS_EB_ICON 'eb' + BACKGROUND_JOBS_ICON '%%' + TEST_ICON '' + TODO_ICON 'todo' + BATTERY_ICON 'battery' + DISK_ICON 'disk' + OK_ICON 'ok' + FAIL_ICON 'err' + SYMFONY_ICON 'symphony' + NODE_ICON 'node' + NODEJS_ICON 'node' + MULTILINE_FIRST_PROMPT_PREFIX '' + MULTILINE_NEWLINE_PROMPT_PREFIX '' + MULTILINE_LAST_PROMPT_PREFIX '' + APPLE_ICON 'mac' + WINDOWS_ICON 'win' + FREEBSD_ICON 'bsd' + ANDROID_ICON 'android' + LINUX_ICON 'linux' + LINUX_ARCH_ICON 'arch' + LINUX_DEBIAN_ICON 'debian' + LINUX_RASPBIAN_ICON 'pi' + LINUX_UBUNTU_ICON 'ubuntu' + LINUX_CENTOS_ICON 'centos' + LINUX_COREOS_ICON 'coreos' + LINUX_ELEMENTARY_ICON 'elementary' + LINUX_MINT_ICON 'mint' + LINUX_FEDORA_ICON 'fedora' + LINUX_GENTOO_ICON 'gentoo' + LINUX_MAGEIA_ICON 'mageia' + LINUX_NIXOS_ICON 'nixos' + LINUX_MANJARO_ICON 'manjaro' + LINUX_DEVUAN_ICON 'devuan' + LINUX_ALPINE_ICON 'alpine' + LINUX_AOSC_ICON 'aosc' + LINUX_OPENSUSE_ICON 'suse' + LINUX_SABAYON_ICON 'sabayon' + LINUX_SLACKWARE_ICON 'slack' + LINUX_VOID_ICON 'void' + LINUX_ARTIX_ICON 'artix' + LINUX_RHEL_ICON 'rhel' + LINUX_AMZN_ICON 'amzn' + LINUX_ENDEAVOUROS_ICON 'edvos' + SUNOS_ICON 'sunos' + HOME_ICON '' + HOME_SUB_ICON '' + FOLDER_ICON '' + ETC_ICON '' + NETWORK_ICON 'ip' + LOAD_ICON 'cpu' + SWAP_ICON 'swap' + RAM_ICON 'ram' + SERVER_ICON '' + VCS_UNTRACKED_ICON '?' + VCS_UNSTAGED_ICON '!' + VCS_STAGED_ICON '+' + VCS_STASH_ICON '#' + VCS_INCOMING_CHANGES_ICON '<' + VCS_OUTGOING_CHANGES_ICON '>' + VCS_TAG_ICON '' + VCS_BOOKMARK_ICON '^' + VCS_COMMIT_ICON '@' + VCS_BRANCH_ICON '' + VCS_REMOTE_BRANCH_ICON ':' + VCS_LOADING_ICON '' + VCS_GIT_ICON '' + VCS_GIT_GITHUB_ICON '' + VCS_GIT_BITBUCKET_ICON '' + VCS_GIT_GITLAB_ICON '' + VCS_HG_ICON '' + VCS_SVN_ICON '' + RUST_ICON 'rust' + PYTHON_ICON 'py' + SWIFT_ICON 'swift' + GO_ICON 'go' + GOLANG_ICON 'go' + PUBLIC_IP_ICON 'ip' + LOCK_ICON '!w' + NORDVPN_ICON 'nordvpn' + EXECUTION_TIME_ICON '' + SSH_ICON 'ssh' + VPN_ICON 'vpn' + KUBERNETES_ICON 'kube' + DROPBOX_ICON 'dropbox' + DATE_ICON '' + TIME_ICON '' + JAVA_ICON 'java' + LARAVEL_ICON '' + RANGER_ICON 'ranger' + MIDNIGHT_COMMANDER_ICON 'mc' + VIM_ICON 'vim' + TERRAFORM_ICON 'tf' + PROXY_ICON 'proxy' + DOTNET_ICON '.net' + DOTNET_CORE_ICON '.net' + AZURE_ICON 'az' + DIRENV_ICON 'direnv' + FLUTTER_ICON 'flutter' + GCLOUD_ICON 'gcloud' + LUA_ICON 'lua' + PERL_ICON 'perl' + NNN_ICON 'nnn' + LF_ICON 'lf' + XPLR_ICON 'xplr' + TIMEWARRIOR_ICON 'tw' + TASKWARRIOR_ICON 'task' + NIX_SHELL_ICON 'nix' + WIFI_ICON 'wifi' + ERLANG_ICON 'erlang' + ELIXIR_ICON 'elixir' + POSTGRES_ICON 'postgres' + PHP_ICON 'php' + HASKELL_ICON 'hs' + PACKAGE_ICON 'pkg' + JULIA_ICON 'jl' + SCALA_ICON 'scala' + TOOLBOX_ICON 'toolbox' + ARCH_ICON 'arch' + ) + ;; + *) + # Powerline-Patched Font required! + # See https://github.com/Lokaltog/powerline-fonts + icons=( + RULER_CHAR '\u2500' # ─ + LEFT_SEGMENT_SEPARATOR '\uE0B0' #  + RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  + LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace + LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  + RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  + CARRIAGE_RETURN_ICON '\u21B5' # ↵ + ROOT_ICON '\u26A1' # ⚡ + SUDO_ICON '' + RUBY_ICON 'Ruby' + AWS_ICON 'AWS' + AWS_EB_ICON '\U1F331'$q # 🌱 + BACKGROUND_JOBS_ICON '\u2699' # ⚙ + TEST_ICON '' + TODO_ICON '\u2206' # ∆ + BATTERY_ICON '\U1F50B' # 🔋 + DISK_ICON 'hdd' + OK_ICON '\u2714' # ✔ + FAIL_ICON '\u2718' # ✘ + SYMFONY_ICON 'SF' + NODE_ICON 'Node' + NODEJS_ICON 'Node' + MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ + MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ + MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ + APPLE_ICON 'OSX' + WINDOWS_ICON 'WIN' + FREEBSD_ICON 'BSD' + ANDROID_ICON 'And' + LINUX_ICON 'Lx' + LINUX_ARCH_ICON 'Arc' + LINUX_DEBIAN_ICON 'Deb' + LINUX_RASPBIAN_ICON 'RPi' + LINUX_UBUNTU_ICON 'Ubu' + LINUX_CENTOS_ICON 'Cen' + LINUX_COREOS_ICON 'Cor' + LINUX_ELEMENTARY_ICON 'Elm' + LINUX_MINT_ICON 'LMi' + LINUX_FEDORA_ICON 'Fed' + LINUX_GENTOO_ICON 'Gen' + LINUX_MAGEIA_ICON 'Mag' + LINUX_NIXOS_ICON 'Nix' + LINUX_MANJARO_ICON 'Man' + LINUX_DEVUAN_ICON 'Dev' + LINUX_ALPINE_ICON 'Alp' + LINUX_AOSC_ICON 'Aos' + LINUX_OPENSUSE_ICON 'OSu' + LINUX_SABAYON_ICON 'Sab' + LINUX_SLACKWARE_ICON 'Sla' + LINUX_VOID_ICON 'Vo' + LINUX_ARTIX_ICON 'Art' + LINUX_RHEL_ICON 'RH' + LINUX_AMZN_ICON 'Amzn' + LINUX_ENDEAVOUROS_ICON 'Edv' + SUNOS_ICON 'Sun' + HOME_ICON '' + HOME_SUB_ICON '' + FOLDER_ICON '' + ETC_ICON '\u2699' # ⚙ + NETWORK_ICON 'IP' + LOAD_ICON 'L' + SWAP_ICON 'SWP' + RAM_ICON 'RAM' + SERVER_ICON '' + VCS_UNTRACKED_ICON '?' + VCS_UNSTAGED_ICON '\u25CF' # ● + VCS_STAGED_ICON '\u271A' # ✚ + VCS_STASH_ICON '\u235F' # ⍟ + VCS_INCOMING_CHANGES_ICON '\u2193' # ↓ + VCS_OUTGOING_CHANGES_ICON '\u2191' # ↑ + VCS_TAG_ICON '' + VCS_BOOKMARK_ICON '\u263F' # ☿ + VCS_COMMIT_ICON '' + VCS_BRANCH_ICON '\uE0A0 ' #  + VCS_REMOTE_BRANCH_ICON '\u2192' # → + VCS_LOADING_ICON '' + VCS_GIT_ICON '' + VCS_GIT_GITHUB_ICON '' + VCS_GIT_BITBUCKET_ICON '' + VCS_GIT_GITLAB_ICON '' + VCS_HG_ICON '' + VCS_SVN_ICON '' + RUST_ICON 'R' + PYTHON_ICON 'Py' + SWIFT_ICON 'Swift' + GO_ICON 'Go' + GOLANG_ICON 'Go' + PUBLIC_IP_ICON 'IP' + LOCK_ICON '\UE0A2' + NORDVPN_ICON '\UE0A2' + EXECUTION_TIME_ICON '' + SSH_ICON 'ssh' + VPN_ICON 'vpn' + KUBERNETES_ICON '\U2388' # ⎈ + DROPBOX_ICON 'Dropbox' + DATE_ICON '' + TIME_ICON '' + JAVA_ICON '\U2615' # ☕︎ + LARAVEL_ICON '' + RANGER_ICON '\u2B50' # ⭐ + MIDNIGHT_COMMANDER_ICON 'mc' + VIM_ICON 'vim' + TERRAFORM_ICON 'tf' + PROXY_ICON '\u2194' # ↔ + DOTNET_ICON '.NET' + DOTNET_CORE_ICON '.NET' + AZURE_ICON '\u2601' # ☁ + DIRENV_ICON '\u25BC' # ▼ + FLUTTER_ICON 'F' + GCLOUD_ICON 'G' + LUA_ICON 'lua' + PERL_ICON 'perl' + NNN_ICON 'nnn' + LF_ICON 'lf' + XPLR_ICON 'xplr' + TIMEWARRIOR_ICON 'tw' + TASKWARRIOR_ICON 'task' + NIX_SHELL_ICON 'nix' + WIFI_ICON 'WiFi' + ERLANG_ICON 'erl' + ELIXIR_ICON 'elixir' + POSTGRES_ICON 'postgres' + PHP_ICON 'php' + HASKELL_ICON 'hs' + PACKAGE_ICON 'pkg' + JULIA_ICON 'jl' + SCALA_ICON 'scala' + TOOLBOX_ICON '\u2B22' # ⬢ + ARCH_ICON 'arch' + ) + ;; + esac + + # Override the above icon settings with any user-defined variables. + case $POWERLEVEL9K_MODE in + 'flat') + icons[LEFT_SEGMENT_SEPARATOR]='' + icons[RIGHT_SEGMENT_SEPARATOR]='' + icons[LEFT_SUBSEGMENT_SEPARATOR]='|' + icons[RIGHT_SUBSEGMENT_SEPARATOR]='|' + ;; + 'compatible') + icons[LEFT_SEGMENT_SEPARATOR]='\u2B80' # ⮀ + icons[RIGHT_SEGMENT_SEPARATOR]='\u2B82' # ⮂ + icons[VCS_BRANCH_ICON]='@' + ;; + esac + + if [[ $POWERLEVEL9K_ICON_PADDING == none && $POWERLEVEL9K_MODE != ascii ]]; then + icons=("${(@kv)icons%% #}") + icons[LEFT_SEGMENT_END_SEPARATOR]+=' ' + icons[MULTILINE_LAST_PROMPT_PREFIX]+=' ' + icons[VCS_TAG_ICON]+=' ' + icons[VCS_BOOKMARK_ICON]+=' ' + icons[VCS_COMMIT_ICON]+=' ' + icons[VCS_BRANCH_ICON]+=' ' + icons[VCS_REMOTE_BRANCH_ICON]+=' ' + fi +} + +# Sadly, this is a part of public API. Its use is emphatically discouraged. +function print_icon() { + eval "$__p9k_intro" + _p9k_init_icons + local var=POWERLEVEL9K_$1 + if (( $+parameters[$var] )); then + echo -n - ${(P)var} + else + echo -n - $icons[$1] + fi +} + +# Prints a list of configured icons. +# +# * $1 string - If "original", then the original icons are printed, +# otherwise "print_icon" is used, which takes the users +# overrides into account. +function get_icon_names() { + eval "$__p9k_intro" + _p9k_init_icons + local key + for key in ${(@kon)icons}; do + echo -n - "POWERLEVEL9K_$key: " + print -nP "%K{red} %k" + if [[ $1 == original ]]; then + echo -n - $icons[$key] + else + print_icon $key + fi + print -P "%K{red} %k" + done +} diff --git a/airootfs/etc/skel/powerlevel10k/internal/notes.md b/airootfs/etc/skel/powerlevel10k/internal/notes.md new file mode 100644 index 0000000..dea28d3 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/internal/notes.md @@ -0,0 +1,197 @@ +battery: use the same technique as in vpn_ip to avoid reset=2. + +--- + +implement fake gitstatus api on top of vcs_info (or plain git?) + worker and use it if there is no +gitstatus. + +--- + +- call vcs_info on worker. the tricky question is what to display while "loading". + +--- + +- add _SHOW_SYSTEM to all *env segments. + +--- + +- support states in SHOW_ON_COMMAND: POWERLEVEL9K_SEGMENT_STATE_SHOW_ON_COMMAND='...' + +--- + +add POWERLEVEL9K_${SEGMENT}_${STATE}_SHOW_IN_DIR='pwd_pattern'; implement the same way as +SHOW_ON_UPGLOB. how should it interact with POWERLEVEL9K_${SEGMENT}_DISABLED_DIR_PATTERN? + +--- + +add `p10k upglob`; returns 0 on match and sets REPLY to the directory where match was found. + +--- + +when directory cannot be shortened any further, start chopping off segments from the left and +replacing the chopped off part with `…`. e.g., `…/x/anchor/y/anchor`. the shortest dir +representation is thus `…/last` or `…/last` depending on whether the last segment is an anchor. +the replacement parameter's value is `…/` (with a slash) to allow for `x/anchor/y/anchor`. + +--- + +- add to faq: how do i display an environment variable in prompt? link it from "extensible" + +--- + +- add to faq: how do i display an icon in prompt? link it from "extensible" + +--- + +- add root_indicator to config templates + +--- + +- test chruby and add it to config templates + +--- + +- add ssh to config templates + +--- + +- add swift version to config templates; see if there is a good pattern for PROJECT_ONLY + +--- + +- add swiftenv + +--- + +- add faq: how to customize directory shortening? mention POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER, +POWERLEVEL9K_DIR_MAX_LENGTH and co., and truncate_to_last. + +--- + +fix a bug in zsh: https://github.com/romkatv/powerlevel10k/issues/502. to reproduce: + +```zsh +emulate zsh -o prompt_percent -c 'print -P "%F{#ff0000}red%F{green}%B bold green"' +``` + +--- + +add `p10k explain` that prints something like this: + +```text +segment icons meaning + +--- + +--- + +--- + +--- + +--- + +--- + +--- + +--- +-- +status ✔ ✘ exit code of the last command +``` + +implement it the hard way: for every enabled segment go over all its {state,icon} pairs, resolve +the icon (if not absolute), apply VISUAL_IDENTIFIER_EXPANSION, remove leading and trailing +whitespace and print without formatting (sort of like `print -P | cat`); print segment names in +green and icons in bold; battery can have an unlimited number of icons, so `...` would be needed +(based on total length of concatenated icons rather than the number of icons); user-defined +segments would have "unknown" icons by default (yellow and not bold); can allow them to +participate by defining `explainprompt_foo` that populates array `reply` with strings like this: +'-s STATE -i LOCK_ICON +r'; the first element must be segment description. + +--- + +add `docker_context` prompt segment; similar to `kubecontext`; the data should come from +`currentContext` field in `~/.docker/config.json` (according to +https://github.com/starship/starship/issues/995); there is also `DOCKER_CONTEXT`; more info: +https://docs.docker.com/engine/reference/commandline/context_use; also +https://github.com/starship/starship/pull/996. + +--- + +support `env`, `ionice` and `strace` precommands in `parser.zsh`. + +--- + +Add ruler to configuration wizard. Options: `─`, `·`, `╌`, `┄`, `▁`, `═`. + +--- + +Add frame styles to the wizard. + +```text +╭─ +╰─ + +┌─ +└─ + +┏━ +┗━ + +╔═ +╚═ + +▛▀ +▙▄ +``` + +Prompt connection should have matching options. + +--- + +Add `POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_MIRROR_SEPARATOR`. If set, left segments get separated with +`POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR` followed by `POWERLEVEL9K_LEFT_SEGMENT_MIRROR_SEPARATOR`. +Each is drawn without background. The first with the foreground of left segment, the second with +the background of right segment. To insert space in between, embed it in +`POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_MIRROR_SEPARATOR`. +`POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR` is unused. + +--- + +Add *Segment Connection* screen to configuration wizard with options *Fused*, *Touching* and +*Disjoint*. The last two differ by the absence/presence of space between `SEGMENT_SEPARATOR` and +`SEGMENT_MIRROR_SEPARATOR`. + +*Fused* requires line separator (there is already a screen for it) but the other two options require +two filled separators similar to heads and tail. Figure out how to present this choice. + +--- + +Optimize auto-wizard check. + +```text +time ( repeat 1000 [[ -z "${parameters[(I)POWERLEVEL9K_*~(POWERLEVEL9K_MODE|POWERLEVEL9K_CONFIG_FILE)]}" ]] ) +user=0.21s system=0.05s cpu=99% total=0.264 + +time ( repeat 1000 [[ -z "${parameters[(I)POWERLEVEL9K_*]}" ]] ) +user=0.17s system=0.00s cpu=99% total=0.175 +``` + +--- + +Add the equivalent of `P9K_PYTHON_VERSION` to all `*env` segments where it makes sense. + +--- + +Define `P9K_ICON` on initialization. Fill it with `$icon`. Duplicate every key that ends in `_ICON`. +Respect `POWERLEVEL9K_VCS_STASH_ICON` overrides but not anything with segment name or state. + +Define `POWERLEVEL9K_VCS_*` parameters in config templates for all symbols used in +`my_git_formatter`. Add missing entries to `icons`. Use `$P9K_ICON[...]` within `my_git_formatter`. +Add a screen to the wizard to choose between clear and circled icons. + +--- + +Add a screen to the wizard asking whether to set `POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~'`. +Show it only if there is `$HOME/.git`. By default this parameter should be commented out. diff --git a/airootfs/etc/skel/powerlevel10k/internal/p10k.zsh b/airootfs/etc/skel/powerlevel10k/internal/p10k.zsh new file mode 100644 index 0000000..ac4783e --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/internal/p10k.zsh @@ -0,0 +1,9334 @@ +if [[ $__p9k_sourced != 13 ]]; then + >&2 print -P "" + >&2 print -P "[%F{1}ERROR%f]: Corrupted powerlevel10k installation." + >&2 print -P "" + if (( ${+functions[antigen]} )); then + >&2 print -P "If using %Bantigen%b, run the following command to fix:" + >&2 print -P "" + >&2 print -P " %F{2}antigen%f reset" + if [[ -d ~/.antigen ]]; then + >&2 print -P "" + >&2 print -P "If it doesn't help, try this:" + >&2 print -P "" + >&2 print -P " %F{2}rm%f -rf %U~/.antigen%u" + fi + else + >&2 print -P "Try resetting cache in your plugin manager or" + >&2 print -P "reinstalling powerlevel10k from scratch." + fi + >&2 print -P "" + return 1 +fi + +if [[ $ZSH_VERSION != (5.<1->*|<6->.*) ]]; then + () { + >&2 echo -E "You are using ZSH version $ZSH_VERSION. The minimum required version for Powerlevel10k is 5.1." + >&2 echo -E "Type 'echo \$ZSH_VERSION' to see your current zsh version." + local def=${SHELL:c:A} + local cur=${${ZSH_ARGZERO#-}:c:A} + local cur_v="$($cur -c 'echo -E $ZSH_VERSION' 2>/dev/null)" + if [[ $cur_v == $ZSH_VERSION && $cur != $def ]]; then + >&2 echo -E "The shell you are currently running is likely $cur." + fi + local other=${${:-zsh}:c} + if [[ -n $other ]] && $other -fc '[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]]' &>/dev/null; then + local other_v="$($other -fc 'echo -E $ZSH_VERSION' 2>/dev/null)" + if [[ -n $other_v && $other_v != $ZSH_VERSION ]]; then + >&2 echo -E "You have $other with version $other_v but this is not what you are using." + if [[ -n $def && $def != ${other:A} ]]; then + >&2 echo -E "To change your user shell, type the following command:" + >&2 echo -E "" + if [[ "$(grep -F $other /etc/shells 2>/dev/null)" != $other ]]; then + >&2 echo -E " echo ${(q-)other} | sudo tee -a /etc/shells" + fi + >&2 echo -E " chsh -s ${(q-)other}" + fi + fi + fi + } + return 1 +fi + +builtin source "${__p9k_root_dir}/internal/configure.zsh" +builtin source "${__p9k_root_dir}/internal/worker.zsh" +builtin source "${__p9k_root_dir}/internal/parser.zsh" +builtin source "${__p9k_root_dir}/internal/icons.zsh" + +# For compatibility with Powerlevel9k. It's not recommended to use mnemonic color +# names in the configuration except for colors 0-7 as these are standard. +typeset -grA __p9k_colors=( + black 000 red 001 green 002 yellow 003 + blue 004 magenta 005 cyan 006 white 007 + grey 008 maroon 009 lime 010 olive 011 + navy 012 fuchsia 013 aqua 014 teal 014 + silver 015 grey0 016 navyblue 017 darkblue 018 + blue3 020 blue1 021 darkgreen 022 deepskyblue4 025 + dodgerblue3 026 dodgerblue2 027 green4 028 springgreen4 029 + turquoise4 030 deepskyblue3 032 dodgerblue1 033 darkcyan 036 + lightseagreen 037 deepskyblue2 038 deepskyblue1 039 green3 040 + springgreen3 041 cyan3 043 darkturquoise 044 turquoise2 045 + green1 046 springgreen2 047 springgreen1 048 mediumspringgreen 049 + cyan2 050 cyan1 051 purple4 055 purple3 056 + blueviolet 057 grey37 059 mediumpurple4 060 slateblue3 062 + royalblue1 063 chartreuse4 064 paleturquoise4 066 steelblue 067 + steelblue3 068 cornflowerblue 069 darkseagreen4 071 cadetblue 073 + skyblue3 074 chartreuse3 076 seagreen3 078 aquamarine3 079 + mediumturquoise 080 steelblue1 081 seagreen2 083 seagreen1 085 + darkslategray2 087 darkred 088 darkmagenta 091 orange4 094 + lightpink4 095 plum4 096 mediumpurple3 098 slateblue1 099 + wheat4 101 grey53 102 lightslategrey 103 mediumpurple 104 + lightslateblue 105 yellow4 106 darkseagreen 108 lightskyblue3 110 + skyblue2 111 chartreuse2 112 palegreen3 114 darkslategray3 116 + skyblue1 117 chartreuse1 118 lightgreen 120 aquamarine1 122 + darkslategray1 123 deeppink4 125 mediumvioletred 126 darkviolet 128 + purple 129 mediumorchid3 133 mediumorchid 134 darkgoldenrod 136 + rosybrown 138 grey63 139 mediumpurple2 140 mediumpurple1 141 + darkkhaki 143 navajowhite3 144 grey69 145 lightsteelblue3 146 + lightsteelblue 147 darkolivegreen3 149 darkseagreen3 150 lightcyan3 152 + lightskyblue1 153 greenyellow 154 darkolivegreen2 155 palegreen1 156 + darkseagreen2 157 paleturquoise1 159 red3 160 deeppink3 162 + magenta3 164 darkorange3 166 indianred 167 hotpink3 168 + hotpink2 169 orchid 170 orange3 172 lightsalmon3 173 + lightpink3 174 pink3 175 plum3 176 violet 177 + gold3 178 lightgoldenrod3 179 tan 180 mistyrose3 181 + thistle3 182 plum2 183 yellow3 184 khaki3 185 + lightyellow3 187 grey84 188 lightsteelblue1 189 yellow2 190 + darkolivegreen1 192 darkseagreen1 193 honeydew2 194 lightcyan1 195 + red1 196 deeppink2 197 deeppink1 199 magenta2 200 + magenta1 201 orangered1 202 indianred1 204 hotpink 206 + mediumorchid1 207 darkorange 208 salmon1 209 lightcoral 210 + palevioletred1 211 orchid2 212 orchid1 213 orange1 214 + sandybrown 215 lightsalmon1 216 lightpink1 217 pink1 218 + plum1 219 gold1 220 lightgoldenrod2 222 navajowhite1 223 + mistyrose1 224 thistle1 225 yellow1 226 lightgoldenrod1 227 + khaki1 228 wheat1 229 cornsilk1 230 grey100 231 + grey3 232 grey7 233 grey11 234 grey15 235 + grey19 236 grey23 237 grey27 238 grey30 239 + grey35 240 grey39 241 grey42 242 grey46 243 + grey50 244 grey54 245 grey58 246 grey62 247 + grey66 248 grey70 249 grey74 250 grey78 251 + grey82 252 grey85 253 grey89 254 grey93 255) + +# For compatibility with Powerlevel9k. +# +# Type `getColorCode background` or `getColorCode foreground` to see the list of predefined colors. +function getColorCode() { + eval "$__p9k_intro" + if (( ARGC == 1 )); then + case $1 in + foreground) + local k + for k in "${(k@)__p9k_colors}"; do + local v=${__p9k_colors[$k]} + print -rP -- "%F{$v}$v - $k%f" + done + return 0 + ;; + background) + local k + for k in "${(k@)__p9k_colors}"; do + local v=${__p9k_colors[$k]} + print -rP -- "%K{$v}$v - $k%k" + done + return 0 + ;; + esac + fi + echo "Usage: getColorCode background|foreground" >&2 + return 1 +} + +# _p9k_declare [default]... +function _p9k_declare() { + local -i set=$+parameters[$2] + (( ARGC > 2 || set )) || return 0 + case $1 in + -b) + if (( set )); then + [[ ${(P)2} == true ]] && typeset -gi _$2=1 || typeset -gi _$2=0 + else + typeset -gi _$2=$3 + fi + ;; + -a) + local -a v=("${(@P)2}") + if (( set )); then + eval "typeset -ga _${(q)2}=(${(@qq)v})"; + else + if [[ $3 != '--' ]]; then + echo "internal error in _p9k_declare " "${(qqq)@}" >&2 + fi + eval "typeset -ga _${(q)2}=(${(@qq)*[4,-1]})" + fi + ;; + -i) + (( set )) && typeset -gi _$2=$2 || typeset -gi _$2=$3 + ;; + -F) + (( set )) && typeset -gF _$2=$2 || typeset -gF _$2=$3 + ;; + -s) + (( set )) && typeset -g _$2=${(P)2} || typeset -g _$2=$3 + ;; + -e) + if (( set )); then + local v=${(P)2} + typeset -g _$2=${(g::)v} + else + typeset -g _$2=${(g::)3} + fi + ;; + *) + echo "internal error in _p9k_declare " "${(qqq)@}" >&2 + esac +} + +function _p9k_read_word() { + local -a stat + zstat -A stat +mtime -- $1 2>/dev/null || stat=(-1) + local cached=$_p9k__read_word_cache[$1] + if [[ $cached == $stat[1]:* ]]; then + _p9k__ret=${cached#*:} + else + local rest + _p9k__ret= + { read _p9k__ret rest <$1 } 2>/dev/null + _p9k__ret=${_p9k__ret%$'\r'} + _p9k__read_word_cache[$1]=$stat[1]:$_p9k__ret + fi + [[ -n $_p9k__ret ]] +} + +function _p9k_fetch_cwd() { + if [[ $PWD == /* && $PWD -ef . ]]; then + _p9k__cwd=$PWD + else + _p9k__cwd=${${${:-.}:a}:-.} + fi + _p9k__cwd_a=${${_p9k__cwd:A}:-.} + + case $_p9k__cwd in + /|.) + _p9k__parent_dirs=() + _p9k__parent_mtimes=() + _p9k__parent_mtimes_i=() + _p9k__parent_mtimes_s= + return + ;; + ~|~/*) + local parent=${${${:-~/..}:a}%/}/ + local parts=(${(s./.)_p9k__cwd#$parent}) + ;; + *) + local parent=/ + local parts=(${(s./.)_p9k__cwd}) + ;; + esac + local MATCH + _p9k__parent_dirs=(${(@)${:-{$#parts..1}}/(#m)*/$parent${(pj./.)parts[1,MATCH]}}) + if ! zstat -A _p9k__parent_mtimes +mtime -- $_p9k__parent_dirs 2>/dev/null; then + _p9k__parent_mtimes=(${(@)parts/*/-1}) + fi + _p9k__parent_mtimes_i=(${(@)${:-{1..$#parts}}/(#m)*/$MATCH:$_p9k__parent_mtimes[MATCH]}) + _p9k__parent_mtimes_s="$_p9k__parent_mtimes_i" +} + +# Usage: _p9k_glob parent_dir_index pattern [glob_qual] +# +# parent_dir_index indexes _p9k__parent_dirs. +# +# Returns the number of matches. +# +# Pattern cannot have slashes. +# +# Example: _p9k_glob 3 '*.csproj' +function _p9k_glob() { + local dir=$_p9k__parent_dirs[$1] + local cached=$_p9k__glob_cache[$dir/$2] + if [[ $cached == $_p9k__parent_mtimes[$1]:* ]]; then + return ${cached##*:} + fi + local -a stat + zstat -A stat +mtime -- $dir 2>/dev/null || stat=(-1) + eval 'local files=($dir/$~2('$3'N:t))' + _p9k__glob_cache[$dir/$2]="$stat[1]:$#files" + return $#files +} + +# Usage: _p9k_upglob pattern [glob_qual] +# +# Returns index within _p9k__parent_dirs or 0 if there is no match. +# +# Search stops before reaching ~/../ or / and never matches in those directories. +# +# Example: _p9k_upglob '*.csproj' +function _p9k_upglob() { + local cached=$_p9k__upsearch_cache[$_p9k__cwd/$1] + if [[ -n $cached ]]; then + if [[ $_p9k__parent_mtimes_s == ${cached% *}(| *) ]]; then + return ${cached##* } + fi + cached=(${(s: :)cached}) + local last_idx=$cached[-1] + cached[-1]=() + local -i i + for i in ${(@)${cached:|_p9k__parent_mtimes_i}%:*}; do + _p9k_glob $i "$@" && continue + _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i" + return i + done + if (( i != last_idx )); then + _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,$#cached]} $last_idx" + return last_idx + fi + i=$(($#cached + 1)) + else + local -i i=1 + fi + for ((; i <= $#_p9k__parent_mtimes; ++i)); do + _p9k_glob $i "$@" && continue + _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i" + return i + done + _p9k__upsearch_cache[$_p9k__cwd/$1]="$_p9k__parent_mtimes_s 0" + return 0 +} + +# If we execute `print -P $1`, how many characters will be printed on the last line? +# Assumes that `%{%}` and `%G` don't lie. +# +# _p9k_prompt_length '' => 0 +# _p9k_prompt_length 'abc' => 3 +# _p9k_prompt_length $'abc\nxy' => 2 +# _p9k_prompt_length $'\t' => 8 +# _p9k_prompt_length '%F{red}abc' => 3 +# _p9k_prompt_length $'%{a\b%Gb%}' => 1 +function _p9k_prompt_length() { + local -i COLUMNS=1024 + local -i x y=${#1} m + if (( y )); then + while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do + x=y + (( y *= 2 )) + done + while (( y > x + 1 )); do + (( m = x + (y - x) / 2 )) + (( ${${(%):-$1%$m(l.x.y)}[-1]} = m )) + done + fi + typeset -g _p9k__ret=$x +} + +typeset -gr __p9k_byte_suffix=('B' 'K' 'M' 'G' 'T' 'P' 'E' 'Z' 'Y') + +# 512 => 512B +# 1800 => 1.76K +# 18000 => 17.6K +function _p9k_human_readable_bytes() { + typeset -F n=$1 + local suf + for suf in $__p9k_byte_suffix; do + (( n < 1024 )) && break + (( n /= 1024 )) + done + if (( n >= 100 )); then + printf -v _p9k__ret '%.0f.' $n + elif (( n >= 10 )); then + printf -v _p9k__ret '%.1f' $n + else + printf -v _p9k__ret '%.2f' $n + fi + _p9k__ret=${${_p9k__ret%%0#}%.}$suf +} + +if [[ $ZSH_VERSION == (5.<4->*|<6->.*) ]]; then + function _p9k_print_params() { typeset -p -- "$@" } +else + # Cannot use `typeset -p` unconditionally because of bugs in zsh. + function _p9k_print_params() { + local name + for name; do + case $parameters[$name] in + array*) + print -r -- "$name=(" "${(@q)${(@P)name}}" ")" + ;; + association*) + # Cannot use "${(@q)${(@kvP)name}}" because of bugs in zsh. + local kv=("${(@kvP)name}") + print -r -- "$name=(" "${(@q)kv}" ")" + ;; + *) + print -r -- "$name=${(q)${(P)name}}" + ;; + esac + done + } +fi + +# Determine if the passed segment is used in the prompt +# +# Pass the name of the segment to this function to test for its presence in +# either the LEFT or RIGHT prompt arrays. +# * $1: The segment to be tested. +_p9k_segment_in_use() { + (( $_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(I)$1(|_joined)] || + $_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(I)$1(|_joined)] )) +} + +# Caching allows storing array-to-array associations. It should be used like this: +# +# if ! _p9k_cache_get "$key1" "$key2"; then +# # Compute val1 and val2 and then store them in the cache. +# _p9k_cache_set "$val1" "$val2" +# fi +# # Here ${_p9k__cache_val[1]} and ${_p9k__cache_val[2]} are $val1 and $val2 respectively. +# +# Limitations: +# +# * Calling _p9k_cache_set without arguments clears the cache entry. Subsequent calls to +# _p9k_cache_get for the same key will return an error. +# * There must be no intervening _p9k_cache_get calls between the associated _p9k_cache_get +# and _p9k_cache_set. +_p9k_cache_set() { + # Uncomment to see cache misses. + # echo "caching: ${(@0q)_p9k__cache_key} => (${(q)@})" >&2 + _p9k_cache[$_p9k__cache_key]="${(pj:\0:)*}0" + _p9k__cache_val=("$@") + _p9k__state_dump_scheduled=1 +} + +_p9k_cache_get() { + _p9k__cache_key="${(pj:\0:)*}" + local v=$_p9k_cache[$_p9k__cache_key] + [[ -n $v ]] && _p9k__cache_val=("${(@0)${v[1,-2]}}") +} + +_p9k_cache_ephemeral_set() { + # Uncomment to see cache misses. + # echo "caching: ${(@0q)_p9k__cache_key} => (${(q)@})" >&2 + _p9k__cache_ephemeral[$_p9k__cache_key]="${(pj:\0:)*}0" + _p9k__cache_val=("$@") +} + +_p9k_cache_ephemeral_get() { + _p9k__cache_key="${(pj:\0:)*}" + local v=$_p9k__cache_ephemeral[$_p9k__cache_key] + [[ -n $v ]] && _p9k__cache_val=("${(@0)${v[1,-2]}}") +} + +_p9k_cache_stat_get() { + local -H stat + local label=$1 f + shift + + _p9k__cache_stat_meta= + _p9k__cache_stat_fprint= + + for f; do + if zstat -H stat -- $f 2>/dev/null; then + _p9k__cache_stat_meta+="${(q)f} $stat[inode] $stat[mtime] $stat[size] $stat[mode]; " + fi + done + + if _p9k_cache_get $0 $label meta "$@"; then + if [[ $_p9k__cache_val[1] == $_p9k__cache_stat_meta ]]; then + _p9k__cache_stat_fprint=$_p9k__cache_val[2] + local -a key=($0 $label fprint "$@" "$_p9k__cache_stat_fprint") + _p9k__cache_fprint_key="${(pj:\0:)key}" + shift 2 _p9k__cache_val + return 0 + else + local -a key=($0 $label fprint "$@" "$_p9k__cache_val[2]") + _p9k__cache_ephemeral[${(pj:\0:)key}]="${(pj:\0:)_p9k__cache_val[3,-1]}0" + fi + fi + + if (( $+commands[md5] )); then + _p9k__cache_stat_fprint="$(md5 -- $* 2>&1)" + elif (( $+commands[md5sum] )); then + _p9k__cache_stat_fprint="$(md5sum -b -- $* 2>&1)" + else + return 1 + fi + + local meta_key=$_p9k__cache_key + if _p9k_cache_ephemeral_get $0 $label fprint "$@" "$_p9k__cache_stat_fprint"; then + _p9k__cache_fprint_key=$_p9k__cache_key + _p9k__cache_key=$meta_key + _p9k_cache_set "$_p9k__cache_stat_meta" "$_p9k__cache_stat_fprint" "$_p9k__cache_val[@]" + shift 2 _p9k__cache_val + return 0 + fi + + _p9k__cache_fprint_key=$_p9k__cache_key + _p9k__cache_key=$meta_key + return 1 +} + +_p9k_cache_stat_set() { + _p9k_cache_set "$_p9k__cache_stat_meta" "$_p9k__cache_stat_fprint" "$@" + _p9k__cache_key=$_p9k__cache_fprint_key + _p9k_cache_ephemeral_set "$@" +} + +# _p9k_param prompt_foo_BAR BACKGROUND red +_p9k_param() { + local key="_p9k_param ${(pj:\0:)*}" + _p9k__ret=$_p9k_cache[$key] + if [[ -n $_p9k__ret ]]; then + _p9k__ret[-1,-1]='' + else + if [[ ${1//-/_} == (#b)prompt_([a-z0-9_]#)(*) ]]; then + local var=_POWERLEVEL9K_${${(U)match[1]}//İ/I}$match[2]_$2 + if (( $+parameters[$var] )); then + _p9k__ret=${(P)var} + else + var=_POWERLEVEL9K_${${(U)match[1]%_}//İ/I}_$2 + if (( $+parameters[$var] )); then + _p9k__ret=${(P)var} + else + var=_POWERLEVEL9K_$2 + if (( $+parameters[$var] )); then + _p9k__ret=${(P)var} + else + _p9k__ret=$3 + fi + fi + fi + else + local var=_POWERLEVEL9K_$2 + if (( $+parameters[$var] )); then + _p9k__ret=${(P)var} + else + _p9k__ret=$3 + fi + fi + _p9k_cache[$key]=${_p9k__ret}. + fi +} + +# _p9k_get_icon prompt_foo_BAR BAZ_ICON quix +_p9k_get_icon() { + local key="_p9k_get_icon ${(pj:\0:)*}" + _p9k__ret=$_p9k_cache[$key] + if [[ -n $_p9k__ret ]]; then + _p9k__ret[-1,-1]='' + else + if [[ $2 == $'\1'* ]]; then + _p9k__ret=${2[2,-1]} + else + _p9k_param "$1" "$2" ${icons[$2]-$'\1'$3} + if [[ $_p9k__ret == $'\1'* ]]; then + _p9k__ret=${_p9k__ret[2,-1]} + else + _p9k__ret=${(g::)_p9k__ret} + [[ $_p9k__ret != $'\b'? ]] || _p9k__ret="%{$_p9k__ret%}" # penance for past sins + fi + fi + _p9k_cache[$key]=${_p9k__ret}. + fi +} + +_p9k_translate_color() { + if [[ $1 == <-> ]]; then # decimal color code: 255 + _p9k__ret=${(l.3..0.)1} + elif [[ $1 == '#'[[:xdigit:]]## ]]; then # hexademical color code: #ffffff + _p9k__ret=${${(L)1}//ı/i} + else # named color: red + # Strip prifixes if there are any. + _p9k__ret=$__p9k_colors[${${${1#bg-}#fg-}#br}] + fi +} + +# _p9k_color prompt_foo_BAR BACKGROUND red +_p9k_color() { + local key="_p9k_color ${(pj:\0:)*}" + _p9k__ret=$_p9k_cache[$key] + if [[ -n $_p9k__ret ]]; then + _p9k__ret[-1,-1]='' + else + _p9k_param "$@" + _p9k_translate_color $_p9k__ret + _p9k_cache[$key]=${_p9k__ret}. + fi +} + +# _p9k_vcs_style CLEAN REMOTE_BRANCH +_p9k_vcs_style() { + local key="$0 ${(pj:\0:)*}" + _p9k__ret=$_p9k_cache[$key] + if [[ -n $_p9k__ret ]]; then + _p9k__ret[-1,-1]='' + else + local style=%b # TODO: support bold + _p9k_color prompt_vcs_$1 BACKGROUND "${__p9k_vcs_states[$1]}" + _p9k_background $_p9k__ret + style+=$_p9k__ret + + local var=_POWERLEVEL9K_VCS_${1}_${2}FORMAT_FOREGROUND + if (( $+parameters[$var] )); then + _p9k_translate_color "${(P)var}" + else + var=_POWERLEVEL9K_VCS_${2}FORMAT_FOREGROUND + if (( $+parameters[$var] )); then + _p9k_translate_color "${(P)var}" + else + _p9k_color prompt_vcs_$1 FOREGROUND "$_p9k_color1" + fi + fi + + _p9k_foreground $_p9k__ret + _p9k__ret=$style$_p9k__ret + _p9k_cache[$key]=${_p9k__ret}. + fi +} + +_p9k_background() { + [[ -n $1 ]] && _p9k__ret="%K{$1}" || _p9k__ret="%k" +} + +_p9k_foreground() { + # Note: This code used to produce `%1F` instead of `%F{1}` because it's more efficient. + # Unfortunately, this triggers a bug in zsh. Namely, `%1F{2}` gets percent-expanded as if + # it was `%F{2}`. + [[ -n $1 ]] && _p9k__ret="%F{$1}" || _p9k__ret="%f" +} + +_p9k_escape_style() { + [[ $1 == *'}'* ]] && _p9k__ret='${:-"'$1'"}' || _p9k__ret=$1 +} + +_p9k_escape() { + [[ $1 == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] && _p9k__ret="\${(Q)\${:-${(qqq)${(q)1}}}}" || _p9k__ret=$1 +} + +# * $1: Name of the function that was originally invoked. +# Necessary, to make the dynamic color-overwrite mechanism work. +# * $2: Background color. +# * $3: Foreground color. +# * $4: An identifying icon. +# * $5: 1 to to perform parameter expansion and process substitution. +# * $6: If not empty but becomes empty after parameter expansion and process substitution, +# the segment isn't rendered. +# * $7: Content. +_p9k_left_prompt_segment() { + if ! _p9k_cache_get "$0" "$1" "$2" "$3" "$4" "$_p9k__segment_index"; then + _p9k_color $1 BACKGROUND $2 + local bg_color=$_p9k__ret + _p9k_background $bg_color + local bg=$_p9k__ret + + _p9k_color $1 FOREGROUND $3 + local fg_color=$_p9k__ret + _p9k_foreground $fg_color + local fg=$_p9k__ret + + local style=%b$bg$fg + local style_=${style//\}/\\\}} + + _p9k_get_icon $1 LEFT_SEGMENT_SEPARATOR + local sep=$_p9k__ret + _p9k_escape $_p9k__ret + local sep_=$_p9k__ret + + _p9k_get_icon $1 LEFT_SUBSEGMENT_SEPARATOR + _p9k_escape $_p9k__ret + local subsep_=$_p9k__ret + + local icon_ + if [[ -n $4 ]]; then + _p9k_get_icon $1 $4 + _p9k_escape $_p9k__ret + icon_=$_p9k__ret + fi + + _p9k_get_icon $1 LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL + local start_sep=$_p9k__ret + [[ -n $start_sep ]] && start_sep="%b%k%F{$bg_color}$start_sep" + + _p9k_get_icon $1 LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL $sep + _p9k_escape $_p9k__ret + local end_sep_=$_p9k__ret + + _p9k_get_icon $1 WHITESPACE_BETWEEN_LEFT_SEGMENTS ' ' + local space=$_p9k__ret + + _p9k_get_icon $1 LEFT_LEFT_WHITESPACE $space + local left_space=$_p9k__ret + [[ $left_space == *%* ]] && left_space+=$style + + _p9k_get_icon $1 LEFT_RIGHT_WHITESPACE $space + _p9k_escape $_p9k__ret + local right_space_=$_p9k__ret + [[ $right_space_ == *%* ]] && right_space_+=$style_ + + local s='<_p9k__s>' ss='<_p9k__ss>' + + local -i non_hermetic=0 + + # Segment separator logic: + # + # if [[ $_p9k__bg == NONE ]]; then + # 1 + # elif (( joined )); then + # 2 + # elif [[ $bg_color == (${_p9k__bg}|${_p9k__bg:-0}) ]]; then + # 3 + # else + # 4 + # fi + + local t=$(($#_p9k_t - __p9k_ksh_arrays)) + _p9k_t+=$start_sep$style$left_space # 1 + _p9k_t+=$style # 2 + if [[ -n $fg_color && $fg_color == $bg_color ]]; then + if [[ $fg_color == $_p9k_color1 ]]; then + _p9k_foreground $_p9k_color2 + else + _p9k_foreground $_p9k_color1 + fi + _p9k_t+=%b$bg$_p9k__ret$ss$style$left_space # 3 + else + _p9k_t+=%b$bg$ss$style$left_space # 3 + fi + _p9k_t+=%b$bg$s$style$left_space # 4 + + local join="_p9k__i>=$_p9k_left_join[$_p9k__segment_index]" + _p9k_param $1 SELF_JOINED false + if [[ $_p9k__ret == false ]]; then + if (( _p9k__segment_index > $_p9k_left_join[$_p9k__segment_index] )); then + join+="&&_p9k__i<$_p9k__segment_index" + else + join= + fi + fi + + local p= + p+="\${_p9k__n::=}" + p+="\${\${\${_p9k__bg:-0}:#NONE}:-\${_p9k__n::=$((t+1))}}" # 1 + if [[ -n $join ]]; then + p+="\${_p9k__n:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2 + fi + if (( __p9k_sh_glob )); then + p+="\${_p9k__n:=\${\${(M)\${:-x$bg_color}:#x\$_p9k__bg}:+$((t+3))}}" # 3 + p+="\${_p9k__n:=\${\${(M)\${:-x$bg_color}:#x\$${_p9k__bg:-0}}:+$((t+3))}}" # 3 + else + p+="\${_p9k__n:=\${\${(M)\${:-x$bg_color}:#x(\$_p9k__bg|\${_p9k__bg:-0})}:+$((t+3))}}" # 3 + fi + p+="\${_p9k__n:=$((t+4))}" # 4 + + _p9k_param $1 VISUAL_IDENTIFIER_EXPANSION '${P9K_VISUAL_IDENTIFIER}' + [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 + local icon_exp_=${_p9k__ret:+\"$_p9k__ret\"} + + _p9k_param $1 CONTENT_EXPANSION '${P9K_CONTENT}' + [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 + local content_exp_=${_p9k__ret:+\"$_p9k__ret\"} + + if [[ ( $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ) || + ( $content_exp_ != '"${P9K_CONTENT}"' && $content_exp_ == *'$'* ) ]]; then + p+="\${P9K_VISUAL_IDENTIFIER::=$icon_}" + fi + + local -i has_icon=-1 # maybe + + if [[ $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ]]; then + p+='${_p9k__v::='$icon_exp_$style_'}' + else + [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _p9k__ret=$icon_ || _p9k__ret=$icon_exp_ + if [[ -n $_p9k__ret ]]; then + p+="\${_p9k__v::=$_p9k__ret" + [[ $_p9k__ret == *%* ]] && p+=$style_ + p+="}" + has_icon=1 # definitely yes + else + has_icon=0 # definitely no + fi + fi + + p+='${_p9k__c::='$content_exp_'}${_p9k__c::=${_p9k__c//'$'\r''}}' + p+='${_p9k__e::=${${_p9k__'${_p9k__line_index}l${${1#prompt_}%%[A-Z0-9_]#}'+00}:-' + if (( has_icon == -1 )); then + p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}${${(%):-$_p9k__v%1(l.1.0)}[-1]}}' + else + p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}'$has_icon'}' + fi + + p+='}}+}' + + p+='${${_p9k__e:#00}:+${${_p9k_t[$_p9k__n]/'$ss'/$_p9k__ss}/'$s'/$_p9k__s}' + + _p9k_param $1 ICON_BEFORE_CONTENT '' + if [[ $_p9k__ret != false ]]; then + _p9k_param $1 PREFIX '' + _p9k__ret=${(g::)_p9k__ret} + _p9k_escape $_p9k__ret + p+=$_p9k__ret + [[ $_p9k__ret == *%* ]] && local -i need_style=1 || local -i need_style=0 + + if (( has_icon != 0 )); then + _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color + _p9k_foreground $_p9k__ret + _p9k__ret=%b$bg$_p9k__ret + _p9k__ret=${_p9k__ret//\}/\\\}} + if [[ $_p9k__ret != $style_ ]]; then + p+=$_p9k__ret'${_p9k__v}'$style_ + else + (( need_style )) && p+=$style_ + p+='${_p9k__v}' + fi + + _p9k_get_icon $1 LEFT_MIDDLE_WHITESPACE ' ' + if [[ -n $_p9k__ret ]]; then + _p9k_escape $_p9k__ret + [[ _p9k__ret == *%* ]] && _p9k__ret+=$style_ + p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' + fi + elif (( need_style )); then + p+=$style_ + fi + + p+='${_p9k__c}'$style_ + else + _p9k_param $1 PREFIX '' + _p9k__ret=${(g::)_p9k__ret} + _p9k_escape $_p9k__ret + p+=$_p9k__ret + [[ $_p9k__ret == *%* ]] && p+=$style_ + + p+='${_p9k__c}'$style_ + + if (( has_icon != 0 )); then + local -i need_style=0 + _p9k_get_icon $1 LEFT_MIDDLE_WHITESPACE ' ' + if [[ -n $_p9k__ret ]]; then + _p9k_escape $_p9k__ret + [[ $_p9k__ret == *%* ]] && need_style=1 + p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' + fi + + _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color + _p9k_foreground $_p9k__ret + _p9k__ret=%b$bg$_p9k__ret + _p9k__ret=${_p9k__ret//\}/\\\}} + [[ $_p9k__ret != $style_ || $need_style == 1 ]] && p+=$_p9k__ret + p+='$_p9k__v' + fi + fi + + _p9k_param $1 SUFFIX '' + _p9k__ret=${(g::)_p9k__ret} + _p9k_escape $_p9k__ret + p+=$_p9k__ret + [[ $_p9k__ret == *%* && -n $right_space_ ]] && p+=$style_ + p+=$right_space_ + + p+='${${:-' + p+="\${_p9k__s::=%F{$bg_color\}$sep_}\${_p9k__ss::=$subsep_}\${_p9k__sss::=%F{$bg_color\}$end_sep_}" + p+="\${_p9k__i::=$_p9k__segment_index}\${_p9k__bg::=$bg_color}" + p+='}+}' + + p+='}' + + _p9k_param $1 SHOW_ON_UPGLOB '' + _p9k_cache_set "$p" $non_hermetic $_p9k__ret + fi + + if [[ -n $_p9k__cache_val[3] ]]; then + _p9k__has_upglob=1 + _p9k_upglob $_p9k__cache_val[3] && return + fi + + _p9k__non_hermetic_expansion=$_p9k__cache_val[2] + + (( $5 )) && _p9k__ret=\"$7\" || _p9k_escape $7 + if [[ -z $6 ]]; then + _p9k__prompt+="\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]" + else + _p9k__prompt+="\${\${:-\"$6\"}:+\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]}" + fi +} + +# The same as _p9k_left_prompt_segment above but for the right prompt. +_p9k_right_prompt_segment() { + if ! _p9k_cache_get "$0" "$1" "$2" "$3" "$4" "$_p9k__segment_index"; then + _p9k_color $1 BACKGROUND $2 + local bg_color=$_p9k__ret + _p9k_background $bg_color + local bg=$_p9k__ret + local bg_=${_p9k__ret//\}/\\\}} + + _p9k_color $1 FOREGROUND $3 + local fg_color=$_p9k__ret + _p9k_foreground $fg_color + local fg=$_p9k__ret + + local style=%b$bg$fg + local style_=${style//\}/\\\}} + + _p9k_get_icon $1 RIGHT_SEGMENT_SEPARATOR + local sep=$_p9k__ret + _p9k_escape $_p9k__ret + local sep_=$_p9k__ret + + _p9k_get_icon $1 RIGHT_SUBSEGMENT_SEPARATOR + local subsep=$_p9k__ret + [[ $subsep == *%* ]] && subsep+=$style + + local icon_ + if [[ -n $4 ]]; then + _p9k_get_icon $1 $4 + _p9k_escape $_p9k__ret + icon_=$_p9k__ret + fi + + _p9k_get_icon $1 RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL $sep + local start_sep=$_p9k__ret + [[ -n $start_sep ]] && start_sep="%b%k%F{$bg_color}$start_sep" + + _p9k_get_icon $1 RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL + _p9k_escape $_p9k__ret + local end_sep_=$_p9k__ret + + _p9k_get_icon $1 WHITESPACE_BETWEEN_RIGHT_SEGMENTS ' ' + local space=$_p9k__ret + + _p9k_get_icon $1 RIGHT_LEFT_WHITESPACE $space + local left_space=$_p9k__ret + [[ $left_space == *%* ]] && left_space+=$style + + _p9k_get_icon $1 RIGHT_RIGHT_WHITESPACE $space + _p9k_escape $_p9k__ret + local right_space_=$_p9k__ret + [[ $right_space_ == *%* ]] && right_space_+=$style_ + + local w='<_p9k__w>' s='<_p9k__s>' + + local -i non_hermetic=0 + + # Segment separator logic: + # + # if [[ $_p9k__bg == NONE ]]; then + # 1 + # elif (( joined )); then + # 2 + # elif [[ $_p9k__bg == (${bg_color}|${bg_color:-0}) ]]; then + # 3 + # else + # 4 + # fi + + local t=$(($#_p9k_t - __p9k_ksh_arrays)) + _p9k_t+=$start_sep$style$left_space # 1 + _p9k_t+=$w$style # 2 + _p9k_t+=$w$style$subsep$left_space # 3 + _p9k_t+=$w%F{$bg_color}$sep$style$left_space # 4 + + local join="_p9k__i>=$_p9k_right_join[$_p9k__segment_index]" + _p9k_param $1 SELF_JOINED false + if [[ $_p9k__ret == false ]]; then + if (( _p9k__segment_index > $_p9k_right_join[$_p9k__segment_index] )); then + join+="&&_p9k__i<$_p9k__segment_index" + else + join= + fi + fi + + local p= + p+="\${_p9k__n::=}" + p+="\${\${\${_p9k__bg:-0}:#NONE}:-\${_p9k__n::=$((t+1))}}" # 1 + if [[ -n $join ]]; then + p+="\${_p9k__n:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2 + fi + if (( __p9k_sh_glob )); then + p+="\${_p9k__n:=\${\${(M)\${:-x\$_p9k__bg}:#x${(b)bg_color}}:+$((t+3))}}" # 3 + p+="\${_p9k__n:=\${\${(M)\${:-x\$_p9k__bg}:#x${(b)bg_color:-0}}:+$((t+3))}}" # 3 + else + p+="\${_p9k__n:=\${\${(M)\${:-x\$_p9k__bg}:#x(${(b)bg_color}|${(b)bg_color:-0})}:+$((t+3))}}" # 3 + fi + p+="\${_p9k__n:=$((t+4))}" # 4 + + _p9k_param $1 VISUAL_IDENTIFIER_EXPANSION '${P9K_VISUAL_IDENTIFIER}' + [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 + local icon_exp_=${_p9k__ret:+\"$_p9k__ret\"} + + _p9k_param $1 CONTENT_EXPANSION '${P9K_CONTENT}' + [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 + local content_exp_=${_p9k__ret:+\"$_p9k__ret\"} + + if [[ ( $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ) || + ( $content_exp_ != '"${P9K_CONTENT}"' && $content_exp_ == *'$'* ) ]]; then + p+="\${P9K_VISUAL_IDENTIFIER::=$icon_}" + fi + + local -i has_icon=-1 # maybe + + if [[ $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ]]; then + p+="\${_p9k__v::=$icon_exp_$style_}" + else + [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _p9k__ret=$icon_ || _p9k__ret=$icon_exp_ + if [[ -n $_p9k__ret ]]; then + p+="\${_p9k__v::=$_p9k__ret" + [[ $_p9k__ret == *%* ]] && p+=$style_ + p+="}" + has_icon=1 # definitely yes + else + has_icon=0 # definitely no + fi + fi + + p+='${_p9k__c::='$content_exp_'}${_p9k__c::=${_p9k__c//'$'\r''}}' + p+='${_p9k__e::=${${_p9k__'${_p9k__line_index}r${${1#prompt_}%%[A-Z0-9_]#}'+00}:-' + if (( has_icon == -1 )); then + p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}${${(%):-$_p9k__v%1(l.1.0)}[-1]}}' + else + p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}'$has_icon'}' + fi + + p+='}}+}' + + p+='${${_p9k__e:#00}:+${_p9k_t[$_p9k__n]/'$w'/$_p9k__w}' + + _p9k_param $1 ICON_BEFORE_CONTENT '' + if [[ $_p9k__ret != true ]]; then + _p9k_param $1 PREFIX '' + _p9k__ret=${(g::)_p9k__ret} + _p9k_escape $_p9k__ret + p+=$_p9k__ret + [[ $_p9k__ret == *%* ]] && p+=$style_ + + p+='${_p9k__c}'$style_ + + if (( has_icon != 0 )); then + local -i need_style=0 + _p9k_get_icon $1 RIGHT_MIDDLE_WHITESPACE ' ' + if [[ -n $_p9k__ret ]]; then + _p9k_escape $_p9k__ret + [[ $_p9k__ret == *%* ]] && need_style=1 + p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' + fi + + _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color + _p9k_foreground $_p9k__ret + _p9k__ret=%b$bg$_p9k__ret + _p9k__ret=${_p9k__ret//\}/\\\}} + [[ $_p9k__ret != $style_ || $need_style == 1 ]] && p+=$_p9k__ret + p+='$_p9k__v' + fi + else + _p9k_param $1 PREFIX '' + _p9k__ret=${(g::)_p9k__ret} + _p9k_escape $_p9k__ret + p+=$_p9k__ret + [[ $_p9k__ret == *%* ]] && local -i need_style=1 || local -i need_style=0 + + if (( has_icon != 0 )); then + _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color + _p9k_foreground $_p9k__ret + _p9k__ret=%b$bg$_p9k__ret + _p9k__ret=${_p9k__ret//\}/\\\}} + if [[ $_p9k__ret != $style_ ]]; then + p+=$_p9k__ret'${_p9k__v}'$style_ + else + (( need_style )) && p+=$style_ + p+='${_p9k__v}' + fi + + _p9k_get_icon $1 RIGHT_MIDDLE_WHITESPACE ' ' + if [[ -n $_p9k__ret ]]; then + _p9k_escape $_p9k__ret + [[ _p9k__ret == *%* ]] && _p9k__ret+=$style_ + p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' + fi + elif (( need_style )); then + p+=$style_ + fi + + p+='${_p9k__c}'$style_ + fi + + _p9k_param $1 SUFFIX '' + _p9k__ret=${(g::)_p9k__ret} + _p9k_escape $_p9k__ret + p+=$_p9k__ret + + p+='${${:-' + + if [[ -n $fg_color && $fg_color == $bg_color ]]; then + if [[ $fg_color == $_p9k_color1 ]]; then + _p9k_foreground $_p9k_color2 + else + _p9k_foreground $_p9k_color1 + fi + else + _p9k__ret=$fg + fi + _p9k__ret=${_p9k__ret//\}/\\\}} + p+="\${_p9k__w::=${right_space_:+$style_}$right_space_%b$bg_$_p9k__ret}" + + p+='${_p9k__sss::=' + p+=$style_$right_space_ + [[ $right_space_ == *%* ]] && p+=$style_ + if [[ -n $end_sep_ ]]; then + p+="%k%F{$bg_color\}$end_sep_$style_" + fi + p+='}' + + p+="\${_p9k__i::=$_p9k__segment_index}\${_p9k__bg::=$bg_color}" + + p+='}+}' + p+='}' + + _p9k_param $1 SHOW_ON_UPGLOB '' + _p9k_cache_set "$p" $non_hermetic $_p9k__ret + fi + + if [[ -n $_p9k__cache_val[3] ]]; then + _p9k__has_upglob=1 + _p9k_upglob $_p9k__cache_val[3] && return + fi + + _p9k__non_hermetic_expansion=$_p9k__cache_val[2] + + (( $5 )) && _p9k__ret=\"$7\" || _p9k_escape $7 + if [[ -z $6 ]]; then + _p9k__prompt+="\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]" + else + _p9k__prompt+="\${\${:-\"$6\"}:+\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]}" + fi +} + +function _p9k_prompt_segment() { "_p9k_${_p9k__prompt_side}_prompt_segment" "$@" } +function p9k_prompt_segment() { p10k segment "$@" } + +function _p9k_python_version() { + case $commands[python] in + "") + return 1 + ;; + ${PYENV_ROOT:-~/.pyenv}/shims/python) + local P9K_PYENV_PYTHON_VERSION _p9k__pyenv_version + local -i _POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=1 _POWERLEVEL9K_PYENV_SHOW_SYSTEM=1 + local _POWERLEVEL9K_PYENV_SOURCES=(shell local global) + if _p9k_pyenv_compute && [[ $P9K_PYENV_PYTHON_VERSION == ([[:digit:].]##)* ]]; then + _p9k__ret=$P9K_PYENV_PYTHON_VERSION + return 0 + fi + ;& # fall through + *) + _p9k_cached_cmd 1 '' python --version || return + [[ $_p9k__ret == (#b)Python\ ([[:digit:].]##)* ]] && _p9k__ret=$match[1] + ;; + esac +} + +################################################################ +# Prompt Segment Definitions +################################################################ + +################################################################ +# Anaconda Environment +prompt_anaconda() { + local msg + if _p9k_python_version; then + P9K_ANACONDA_PYTHON_VERSION=$_p9k__ret + if (( _POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION )); then + msg="${P9K_ANACONDA_PYTHON_VERSION//\%/%%} " + fi + else + unset P9K_ANACONDA_PYTHON_VERSION + fi + local p=${CONDA_PREFIX:-$CONDA_ENV_PATH} + msg+="$_POWERLEVEL9K_ANACONDA_LEFT_DELIMITER${${p:t}//\%/%%}$_POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER" + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg" +} + +_p9k_prompt_anaconda_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${CONDA_PREFIX:-$CONDA_ENV_PATH}' +} + +# Populates array `reply` with "$#profile:$profile:$region" where $profile and $region +# come from the AWS config (~/.aws/config). +function _p9k_parse_aws_config() { + local cfg=$1 + typeset -ga reply=() + [[ -f $cfg && -r $cfg ]] || return + + local -a lines + lines=(${(f)"$(<$cfg)"}) || return + + local line profile + local -a match mbegin mend + for line in $lines; do + if [[ $line == [[:space:]]#'[default]'[[:space:]]#(|'#'*) ]]; then + # example: [default] + profile=default + elif [[ $line == (#b)'[profile'[[:space:]]##([^[:space:]]|[^[:space:]]*[^[:space:]])[[:space:]]#']'[[:space:]]#(|'#'*) ]]; then + # example: [profile prod] + profile=${(Q)match[1]} + elif [[ $line == (#b)[[:space:]]#region[[:space:]]#=[[:space:]]#([^[:space:]]|[^[:space:]]*[^[:space:]])[[:space:]]# ]]; then + # example: region = eu-west-1 + if [[ -n $profile ]]; then + reply+=$#profile:$profile:$match[1] + profile= + fi + fi + done +} + +################################################################ +# AWS Profile +prompt_aws() { + typeset -g P9K_AWS_PROFILE="${AWS_VAULT:-${AWSUME_PROFILE:-${AWS_PROFILE:-$AWS_DEFAULT_PROFILE}}}" + local pat class state + for pat class in "${_POWERLEVEL9K_AWS_CLASSES[@]}"; do + if [[ $P9K_AWS_PROFILE == ${~pat} ]]; then + [[ -n $class ]] && state=_${${(U)class}//İ/I} + break + fi + done + + if [[ -n ${AWS_REGION:-$AWS_DEFAULT_REGION} ]]; then + typeset -g P9K_AWS_REGION=${AWS_REGION:-$AWS_DEFAULT_REGION} + else + local cfg=${AWS_CONFIG_FILE:-~/.aws/config} + if ! _p9k_cache_stat_get $0 $cfg; then + local -a reply + _p9k_parse_aws_config $cfg + _p9k_cache_stat_set $reply + fi + local prefix=$#P9K_AWS_PROFILE:$P9K_AWS_PROFILE: + local kv=$_p9k__cache_val[(r)${(b)prefix}*] + typeset -g P9K_AWS_REGION=${kv#$prefix} + fi + + _p9k_prompt_segment "$0$state" red white 'AWS_ICON' 0 '' "${P9K_AWS_PROFILE//\%/%%}" +} + +_p9k_prompt_aws_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${AWS_VAULT:-${AWSUME_PROFILE:-${AWS_PROFILE:-$AWS_DEFAULT_PROFILE}}}' +} + +################################################################ +# Current Elastic Beanstalk environment +prompt_aws_eb_env() { + _p9k_upglob .elasticbeanstalk -/ && return + local dir=$_p9k__parent_dirs[$?] + + if ! _p9k_cache_stat_get $0 $dir/.elasticbeanstalk/config.yml; then + local env + env="$(command eb list 2>/dev/null)" || env= + env="${${(@M)${(@f)env}:#\* *}#\* }" + _p9k_cache_stat_set "$env" + fi + [[ -n $_p9k__cache_val[1] ]] || return + _p9k_prompt_segment "$0" black green 'AWS_EB_ICON' 0 '' "${_p9k__cache_val[1]//\%/%%}" +} + +_p9k_prompt_aws_eb_env_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[eb]' +} + +################################################################ +# Segment to indicate background jobs with an icon. +prompt_background_jobs() { + local -i len=$#_p9k__prompt _p9k__has_upglob + local msg + if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE )); then + if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS )); then + msg='${(%):-%j}' + else + msg='${${(%):-%j}:#1}' + fi + fi + _p9k_prompt_segment $0 "$_p9k_color1" cyan BACKGROUND_JOBS_ICON 1 '${${(%):-%j}:#0}' "$msg" + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +################################################################ +# Segment that indicates usage level of current partition. +prompt_disk_usage() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0_CRITICAL red white DISK_ICON 1 '$_p9k__disk_usage_critical' '$_p9k__disk_usage_pct%%' + _p9k_prompt_segment $0_WARNING yellow $_p9k_color1 DISK_ICON 1 '$_p9k__disk_usage_warning' '$_p9k__disk_usage_pct%%' + if (( ! _POWERLEVEL9K_DISK_USAGE_ONLY_WARNING )); then + _p9k_prompt_segment $0_NORMAL $_p9k_color1 yellow DISK_ICON 1 '$_p9k__disk_usage_normal' '$_p9k__disk_usage_pct%%' + fi + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_disk_usage_init() { + typeset -g _p9k__disk_usage_pct= + typeset -g _p9k__disk_usage_normal= + typeset -g _p9k__disk_usage_warning= + typeset -g _p9k__disk_usage_critical= + _p9k__async_segments_compute+='_p9k_worker_invoke disk_usage "_p9k_prompt_disk_usage_compute ${(q)_p9k__cwd_a}"' +} + +_p9k_prompt_disk_usage_compute() { + (( $+commands[df] )) || return + _p9k_worker_async "_p9k_prompt_disk_usage_async ${(q)1}" _p9k_prompt_disk_usage_sync +} + +_p9k_prompt_disk_usage_async() { + local pct=${${=${(f)"$(df -P $1 2>/dev/null)"}[2]}[5]%%%} + [[ $pct == <0-100> && $pct != $_p9k__disk_usage_pct ]] || return + _p9k__disk_usage_pct=$pct + _p9k__disk_usage_normal= + _p9k__disk_usage_warning= + _p9k__disk_usage_critical= + if (( _p9k__disk_usage_pct >= _POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL )); then + _p9k__disk_usage_critical=1 + elif (( _p9k__disk_usage_pct >= _POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL )); then + _p9k__disk_usage_warning=1 + elif (( ! _POWERLEVEL9K_DISK_USAGE_ONLY_WARNING )); then + _p9k__disk_usage_normal=1 + fi + _p9k_print_params \ + _p9k__disk_usage_pct \ + _p9k__disk_usage_normal \ + _p9k__disk_usage_warning \ + _p9k__disk_usage_critical + echo -E - 'reset=1' +} + +_p9k_prompt_disk_usage_sync() { + eval $REPLY + _p9k_worker_reply $REPLY +} + +function _p9k_read_file() { + _p9k__ret='' + [[ -n $1 ]] && IFS='' read -r _p9k__ret <$1 + [[ -n $_p9k__ret ]] +} + +function _p9k_fvm_old() { + _p9k_upglob fvm @ && return 1 + local fvm=$_p9k__parent_dirs[$?]/fvm + if [[ ${fvm:A} == (#b)*/versions/([^/]##)/bin/flutter ]]; then + _p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%} + return 0 + fi + return 1 +} + +function _p9k_fvm_new() { + _p9k_upglob .fvm @ && return 1 + local sdk=$_p9k__parent_dirs[$?]/.fvm/flutter_sdk + if [[ ${sdk:A} == (#b)*/versions/([^/]##) ]]; then + _p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%} + return 0 + fi + return 1 +} + +prompt_fvm() { + _p9k_fvm_new || _p9k_fvm_old +} + +_p9k_prompt_fvm_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[fvm]' +} + +################################################################ +# Segment that displays the battery status in levels and colors +prompt_battery() { + [[ $_p9k_os == (Linux|Android) ]] && _p9k_prompt_battery_set_args + (( $#_p9k__battery_args )) && _p9k_prompt_segment "${_p9k__battery_args[@]}" +} + +_p9k_prompt_battery_init() { + typeset -ga _p9k__battery_args=() + if [[ $_p9k_os == OSX && $+commands[pmset] == 1 ]]; then + _p9k__async_segments_compute+='_p9k_worker_invoke battery _p9k_prompt_battery_compute' + return + fi + if [[ $_p9k_os != (Linux|Android) || + -z /sys/class/power_supply/(CMB*|BAT*|*battery)/(energy_full|charge_full|charge_counter)(#qN) ]]; then + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + fi +} + +_p9k_prompt_battery_compute() { + _p9k_worker_async _p9k_prompt_battery_async _p9k_prompt_battery_sync +} + +_p9k_prompt_battery_async() { + local prev="${(pj:\0:)_p9k__battery_args}" + _p9k_prompt_battery_set_args + [[ "${(pj:\0:)_p9k__battery_args}" == $prev ]] && return 1 + _p9k_print_params _p9k__battery_args + echo -E - 'reset=2' +} + +_p9k_prompt_battery_sync() { + eval $REPLY + _p9k_worker_reply $REPLY +} + +_p9k_prompt_battery_set_args() { + _p9k__battery_args=() + + local state remain + local -i bat_percent + + case $_p9k_os in + OSX) + (( $+commands[pmset] )) || return + local raw_data=${${(Af)"$(pmset -g batt 2>/dev/null)"}[2]} + [[ $raw_data == *InternalBattery* ]] || return + remain=${${(s: :)${${(s:; :)raw_data}[3]}}[1]} + [[ $remain == *no* ]] && remain="..." + [[ $raw_data =~ '([0-9]+)%' ]] && bat_percent=$match[1] + + case "${${(s:; :)raw_data}[2]}" in + 'charging'|'finishing charge'|'AC attached') + if (( bat_percent == 100 )); then + state=CHARGED + remain='' + else + state=CHARGING + fi + ;; + 'discharging') + (( bat_percent < _POWERLEVEL9K_BATTERY_LOW_THRESHOLD )) && state=LOW || state=DISCONNECTED + ;; + *) + state=CHARGED + remain='' + ;; + esac + ;; + + Linux|Android) + # See https://sourceforge.net/projects/acpiclient. + local -a bats=( /sys/class/power_supply/(CMB*|BAT*|*battery)/(FN) ) + (( $#bats )) || return + + local -i energy_now energy_full power_now + local -i is_full=1 is_calculating is_charching + local dir + for dir in $bats; do + local -i pow=0 full=0 + if _p9k_read_file $dir/(energy_full|charge_full|charge_counter)(N); then + (( energy_full += ${full::=_p9k__ret} )) + fi + if _p9k_read_file $dir/(power|current)_now(N) && (( $#_p9k__ret < 9 )); then + (( power_now += ${pow::=$_p9k__ret} )) + fi + if _p9k_read_file $dir/capacity(N); then + (( energy_now += _p9k__ret * full / 100. + 0.5 )) + elif _p9k_read_file $dir/(energy|charge)_now(N); then + (( energy_now += _p9k__ret )) + fi + _p9k_read_file $dir/status(N) && local bat_status=$_p9k__ret || continue + [[ $bat_status != Full ]] && is_full=0 + [[ $bat_status == Charging ]] && is_charching=1 + [[ $bat_status == (Charging|Discharging) && $pow == 0 ]] && is_calculating=1 + done + + (( energy_full )) || return + + bat_percent=$(( 100. * energy_now / energy_full + 0.5 )) + (( bat_percent > 100 )) && bat_percent=100 + + if (( is_full || (bat_percent == 100 && is_charching) )); then + state=CHARGED + else + if (( is_charching )); then + state=CHARGING + elif (( bat_percent < _POWERLEVEL9K_BATTERY_LOW_THRESHOLD )); then + state=LOW + else + state=DISCONNECTED + fi + + if (( power_now > 0 )); then + (( is_charching )) && local -i e=$((energy_full - energy_now)) || local -i e=energy_now + local -i minutes=$(( 60 * e / power_now )) + (( minutes > 0 )) && remain=$((minutes/60)):${(l#2##0#)$((minutes%60))} + elif (( is_calculating )); then + remain="..." + fi + fi + ;; + + *) + return 0 + ;; + esac + + (( bat_percent >= _POWERLEVEL9K_BATTERY_${state}_HIDE_ABOVE_THRESHOLD )) && return + + local msg="$bat_percent%%" + [[ $_POWERLEVEL9K_BATTERY_VERBOSE == 1 && -n $remain ]] && msg+=" ($remain)" + + local icon=BATTERY_ICON + local var=_POWERLEVEL9K_BATTERY_${state}_STAGES + local -i idx="${#${(@P)var}}" + if (( idx )); then + (( bat_percent < 100 )) && idx=$((bat_percent * idx / 100 + 1)) + icon=$'\1'"${${(@P)var}[idx]}" + fi + + local bg=$_p9k_color1 + local var=_POWERLEVEL9K_BATTERY_${state}_LEVEL_BACKGROUND + local -i idx="${#${(@P)var}}" + if (( idx )); then + (( bat_percent < 100 )) && idx=$((bat_percent * idx / 100 + 1)) + bg="${${(@P)var}[idx]}" + fi + + local fg=$_p9k_battery_states[$state] + local var=_POWERLEVEL9K_BATTERY_${state}_LEVEL_FOREGROUND + local -i idx="${#${(@P)var}}" + if (( idx )); then + (( bat_percent < 100 )) && idx=$((bat_percent * idx / 100 + 1)) + fg="${${(@P)var}[idx]}" + fi + + _p9k__battery_args=(prompt_battery_$state "$bg" "$fg" $icon 0 '' $msg) +} + +################################################################ +# Public IP segment +prompt_public_ip() { + local -i len=$#_p9k__prompt _p9k__has_upglob + local ip='${_p9k__public_ip:-$_POWERLEVEL9K_PUBLIC_IP_NONE}' + if [[ -n $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]]; then + _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" PUBLIC_IP_ICON 1 '${_p9k__public_ip_not_vpn:+'$ip'}' $ip + _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" VPN_ICON 1 '${_p9k__public_ip_vpn:+'$ip'}' $ip + else + _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" PUBLIC_IP_ICON 1 $ip $ip + fi + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_public_ip_init() { + typeset -g _p9k__public_ip= + typeset -gF _p9k__public_ip_next_time=0 + _p9k__async_segments_compute+='_p9k_worker_invoke public_ip _p9k_prompt_public_ip_compute' +} + +_p9k_prompt_public_ip_compute() { + (( EPOCHREALTIME >= _p9k__public_ip_next_time )) || return + _p9k_worker_async _p9k_prompt_public_ip_async _p9k_prompt_public_ip_sync +} + +_p9k_prompt_public_ip_async() { + local ip method + local -F start=EPOCHREALTIME + local -F next='start + 5' + for method in $_POWERLEVEL9K_PUBLIC_IP_METHODS $_POWERLEVEL9K_PUBLIC_IP_METHODS; do + case $method in + dig) + if (( $+commands[dig] )); then + ip="$(dig +tries=1 +short -4 A myip.opendns.com @resolver1.opendns.com 2>/dev/null)" + [[ $ip == ';'* ]] && ip= + if [[ -z $ip ]]; then + ip="$(dig +tries=1 +short -6 AAAA myip.opendns.com @resolver1.opendns.com 2>/dev/null)" + [[ $ip == ';'* ]] && ip= + fi + fi + ;; + curl) + if (( $+commands[curl] )); then + ip="$(curl --max-time 5 -w '\n' "$_POWERLEVEL9K_PUBLIC_IP_HOST" 2>/dev/null)" + fi + ;; + wget) + if (( $+commands[wget] )); then + ip="$(wget -T 5 -qO- "$_POWERLEVEL9K_PUBLIC_IP_HOST" 2>/dev/null)" + fi + ;; + esac + [[ $ip =~ '^[0-9a-f.:]+$' ]] || ip='' + if [[ -n $ip ]]; then + next=$((start + _POWERLEVEL9K_PUBLIC_IP_TIMEOUT)) + break + fi + done + _p9k__public_ip_next_time=$next + _p9k_print_params _p9k__public_ip_next_time + [[ $_p9k__public_ip == $ip ]] && return + _p9k__public_ip=$ip + _p9k_print_params _p9k__public_ip + echo -E - 'reset=1' +} + +_p9k_prompt_public_ip_sync() { + eval $REPLY + _p9k_worker_reply $REPLY +} + +################################################################ +# Context: user@hostname (who am I and where am I) +prompt_context() { + local -i len=$#_p9k__prompt _p9k__has_upglob + + local content + if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 0 && -n $DEFAULT_USER && $P9K_SSH == 0 ]]; then + local user="${(%):-%n}" + if [[ $user == $DEFAULT_USER ]]; then + content="${user//\%/%%}" + fi + fi + + local state + if (( P9K_SSH )); then + if [[ -n "$SUDO_COMMAND" ]]; then + state="REMOTE_SUDO" + else + state="REMOTE" + fi + elif [[ -n "$SUDO_COMMAND" ]]; then + state="SUDO" + else + state="DEFAULT" + fi + + local cond + for state cond in $state '${${(%):-%#}:#\#}' ROOT '${${(%):-%#}:#\%}'; do + local text=$content + if [[ -z $text ]]; then + local var=_POWERLEVEL9K_CONTEXT_${state}_TEMPLATE + if (( $+parameters[$var] )); then + text=${(P)var} + text=${(g::)text} + else + text=$_POWERLEVEL9K_CONTEXT_TEMPLATE + fi + fi + _p9k_prompt_segment "$0_$state" "$_p9k_color1" yellow '' 0 "$cond" "$text" + done + + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +instant_prompt_context() { + if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 0 && -n $DEFAULT_USER && $P9K_SSH == 0 ]]; then + if [[ ${(%):-%n} == $DEFAULT_USER ]]; then + if (( ! _POWERLEVEL9K_ALWAYS_SHOW_USER )); then + return + fi + fi + fi + prompt_context +} + +_p9k_prompt_context_init() { + if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 0 && -n $DEFAULT_USER && $P9K_SSH == 0 ]]; then + if [[ ${(%):-%n} == $DEFAULT_USER ]]; then + if (( ! _POWERLEVEL9K_ALWAYS_SHOW_USER )); then + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + fi + fi + fi +} + +################################################################ +# User: user (who am I) +prompt_user() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment "${0}_ROOT" "${_p9k_color1}" yellow ROOT_ICON 0 '${${(%):-%#}:#\%}' "$_POWERLEVEL9K_USER_TEMPLATE" + if [[ -n "$SUDO_COMMAND" ]]; then + _p9k_prompt_segment "${0}_SUDO" "${_p9k_color1}" yellow SUDO_ICON 0 '${${(%):-%#}:#\#}' "$_POWERLEVEL9K_USER_TEMPLATE" + else + _p9k_prompt_segment "${0}_DEFAULT" "${_p9k_color1}" yellow USER_ICON 0 '${${(%):-%#}:#\#}' "%n" + fi + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +instant_prompt_user() { + if [[ $_POWERLEVEL9K_ALWAYS_SHOW_USER == 0 && "${(%):-%n}" == $DEFAULT_USER ]]; then + return + fi + prompt_user +} + +_p9k_prompt_user_init() { + if [[ $_POWERLEVEL9K_ALWAYS_SHOW_USER == 0 && "${(%):-%n}" == $DEFAULT_USER ]]; then + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + fi +} + +################################################################ +# Host: machine (where am I) +prompt_host() { + local -i len=$#_p9k__prompt _p9k__has_upglob + if (( P9K_SSH )); then + _p9k_prompt_segment "$0_REMOTE" "${_p9k_color1}" yellow SSH_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE" + else + _p9k_prompt_segment "$0_LOCAL" "${_p9k_color1}" yellow HOST_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE" + fi + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +instant_prompt_host() { prompt_host; } + +################################################################ +# Toolbox: https://github.com/containers/toolbox +function prompt_toolbox() { + _p9k_prompt_segment $0 $_p9k_color1 yellow TOOLBOX_ICON 0 '' $P9K_TOOLBOX_NAME +} + +_p9k_prompt_toolbox_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$P9K_TOOLBOX_NAME' +} + +function instant_prompt_toolbox() { + _p9k_prompt_segment prompt_toolbox $_p9k_color1 yellow TOOLBOX_ICON 1 '$P9K_TOOLBOX_NAME' '$P9K_TOOLBOX_NAME' +} + +################################################################ +# The 'custom` prompt provides a way for users to invoke commands and display +# the output in a segment. +_p9k_custom_prompt() { + local segment_name=${1:u} + local command=_POWERLEVEL9K_CUSTOM_${segment_name} + command=${(P)command} + local parts=("${(@z)command}") + local cmd="${(Q)parts[1]}" + (( $+functions[$cmd] || $+commands[$cmd] )) || return + local content="$(eval $command)" + [[ -n $content ]] || return + _p9k_prompt_segment "prompt_custom_$1" $_p9k_color2 $_p9k_color1 "CUSTOM_${segment_name}_ICON" 0 '' "$content" +} + +################################################################ +# Display the duration the command needed to run. +prompt_command_execution_time() { + (( $+P9K_COMMAND_DURATION_SECONDS )) || return + (( P9K_COMMAND_DURATION_SECONDS >= _POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )) || return + + if (( P9K_COMMAND_DURATION_SECONDS < 60 )); then + if (( !_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION )); then + local -i sec=$((P9K_COMMAND_DURATION_SECONDS + 0.5)) + else + local -F $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION sec=P9K_COMMAND_DURATION_SECONDS + fi + local text=${sec}s + else + local -i d=$((P9K_COMMAND_DURATION_SECONDS + 0.5)) + if [[ $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT == "H:M:S" ]]; then + local text=${(l.2..0.)$((d % 60))} + if (( d >= 60 )); then + text=${(l.2..0.)$((d / 60 % 60))}:$text + if (( d >= 36000 )); then + text=$((d / 3600)):$text + elif (( d >= 3600 )); then + text=0$((d / 3600)):$text + fi + fi + else + local text="$((d % 60))s" + if (( d >= 60 )); then + text="$((d / 60 % 60))m $text" + if (( d >= 3600 )); then + text="$((d / 3600 % 24))h $text" + if (( d >= 86400 )); then + text="$((d / 86400))d $text" + fi + fi + fi + fi + fi + + _p9k_prompt_segment "$0" "red" "yellow1" 'EXECUTION_TIME_ICON' 0 '' $text +} + +function _p9k_shorten_delim_len() { + local def=$1 + _p9k__ret=${_POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1} + (( _p9k__ret >= 0 )) || _p9k_prompt_length $1 +} + +# Percents are duplicated because this function is currently used only +# where the result is going to be percent-expanded. +function _p9k_url_escape() { + emulate -L zsh -o no_multi_byte -o extended_glob + local MATCH MBEGIN MEND + _p9k__ret=${1//(#m)[^a-zA-Z0-9"\/:_.-!'()~"]/%%${(l:2::0:)$(([##16]#MATCH))}} +} + +################################################################ +# Dir: current working directory +prompt_dir() { + if (( _POWERLEVEL9K_DIR_PATH_ABSOLUTE )); then + local p=${(V)_p9k__cwd} + local -a parts=("${(s:/:)p}") + elif [[ -o auto_name_dirs ]]; then + local p=${(V)${_p9k__cwd/#(#b)$HOME(|\/*)/'~'$match[1]}} + local -a parts=("${(s:/:)p}") + else + local p=${(%):-%~} + if [[ $p == '~['* ]]; then + # If "${(%):-%~}" expands to "~[a]/]/b", is the first component "~[a]" or "~[a]/]"? + # One would expect "${(%):-%-1~}" to give the right answer but alas it always simply + # gives the segment before the first slash, which would be "~[a]" in this case. Worse, + # for "~[a/b]" it'll give the nonsensical "~[a". To solve this problem we have to + # repeat what "${(%):-%~}" does and hope that it produces the same result. + local func='' + local -a parts=() + for func in zsh_directory_name $zsh_directory_name_functions; do + local reply=() + if (( $+functions[$func] )) && $func d $_p9k__cwd && [[ $p == '~['${(V)reply[1]}']'* ]]; then + parts+='~['${(V)reply[1]}']' + break + fi + done + if (( $#parts )); then + parts+=(${(s:/:)${p#$parts[1]}}) + else + p=${(V)_p9k__cwd} + parts=("${(s:/:)p}") + fi + else + local -a parts=("${(s:/:)p}") + fi + fi + + local -i fake_first=0 expand=0 shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:--1} + + if (( $+_POWERLEVEL9K_SHORTEN_DELIMITER )); then + local delim=$_POWERLEVEL9K_SHORTEN_DELIMITER + else + if [[ $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then + local delim=$'\u2026' + else + local delim='..' + fi + fi + + case $_POWERLEVEL9K_SHORTEN_STRATEGY in + truncate_absolute|truncate_absolute_chars) + if (( shortenlen > 0 && $#p > shortenlen )); then + _p9k_shorten_delim_len $delim + if (( $#p > shortenlen + $_p9k__ret )); then + local -i n=shortenlen + local -i i=$#parts + while true; do + local dir=$parts[i] + local -i len=$(( $#dir + (i > 1) )) + if (( len <= n )); then + (( n -= len )) + (( --i )) + else + parts[i]=$'\1'$dir[-n,-1] + parts[1,i-1]=() + break + fi + done + fi + fi + ;; + truncate_with_package_name|truncate_middle|truncate_from_right) + () { + [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name && + $+commands[jq] == 1 && $#_POWERLEVEL9K_DIR_PACKAGE_FILES > 0 ]] || return + local pats="(${(j:|:)_POWERLEVEL9K_DIR_PACKAGE_FILES})" + local -i i=$#parts + local dir=$_p9k__cwd + for (( ; i > 0; --i )); do + local markers=($dir/${~pats}(N)) + if (( $#markers )); then + local pat= pkg_file= + for pat in $_POWERLEVEL9K_DIR_PACKAGE_FILES; do + for pkg_file in $markers; do + [[ $pkg_file == $dir/${~pat} ]] || continue + if ! _p9k_cache_stat_get $0_pkg $pkg_file; then + local pkg_name='' + pkg_name="$(jq -j '.name | select(. != null)' <$pkg_file 2>/dev/null)" || pkg_name='' + _p9k_cache_stat_set "$pkg_name" + fi + [[ -n $_p9k__cache_val[1] ]] || continue + parts[1,i]=($_p9k__cache_val[1]) + fake_first=1 + return 0 + done + done + fi + dir=${dir:h} + done + } + if (( shortenlen > 0 )); then + _p9k_shorten_delim_len $delim + local -i d=_p9k__ret pref=shortenlen suf=0 i=2 + [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_middle ]] && suf=pref + for (( ; i < $#parts; ++i )); do + local dir=$parts[i] + if (( $#dir > pref + suf + d )); then + dir[pref+1,-suf-1]=$'\1' + parts[i]=$dir + fi + done + fi + ;; + truncate_to_last) + shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1} + (( shortenlen > 0 )) || shortenlen=1 + local -i i='shortenlen+1' + if [[ $#parts -gt i || $p[1] != / && $#parts -gt shortenlen ]]; then + fake_first=1 + parts[1,-i]=() + fi + ;; + truncate_to_first_and_last) + if (( shortenlen > 0 )); then + local -i i=$(( shortenlen + 1 )) + [[ $p == /* ]] && (( ++i )) + for (( ; i <= $#parts - shortenlen; ++i )); do + parts[i]=$'\1' + done + fi + ;; + truncate_to_unique) + expand=1 + delim=${_POWERLEVEL9K_SHORTEN_DELIMITER-'*'} + shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1} + (( shortenlen >= 0 )) || shortenlen=1 + local rp=${(g:oce:)p} + local rparts=("${(@s:/:)rp}") + + local -i i=2 e=$(($#parts - shortenlen)) + if [[ -n $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER ]]; then + (( e += shortenlen )) + local orig=("$parts[2]" "${(@)parts[$((shortenlen > $#parts ? -$#parts : -shortenlen)),-1]}") + elif [[ $p[1] == / ]]; then + (( ++i )) + fi + if (( i <= e )); then + local mtimes=(${(Oa)_p9k__parent_mtimes:$(($#parts-e)):$((e-i+1))}) + local key="${(pj.:.)mtimes}" + else + local key= + fi + if ! _p9k_cache_ephemeral_get $0 $e $i $_p9k__cwd || [[ $key != $_p9k__cache_val[1] ]]; then + local rtail=${(j./.)rparts[i,-1]} + local parent=$_p9k__cwd[1,-2-$#rtail] + _p9k_prompt_length $delim + local -i real_delim_len=_p9k__ret + [[ -n $parts[i-1] ]] && parts[i-1]="\${(Q)\${:-${(qqq)${(q)parts[i-1]}}}}"$'\2' + local -i d=${_POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1} + (( d >= 0 )) || d=real_delim_len + local -i m=1 + for (( ; i <= e; ++i, ++m )); do + local sub=$parts[i] + local rsub=$rparts[i] + local dir=$parent/$rsub mtime=$mtimes[m] + local pair=$_p9k__dir_stat_cache[$dir] + if [[ $pair == ${mtime:-x}:* ]]; then + parts[i]=${pair#*:} + else + [[ $sub != *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] + local -i q=$? + if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER && + -n $dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]]; then + (( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)sub}}}}" + parts[i]+=$'\2' + else + local -i j=$rsub[(i)[^.]] + for (( ; j + d < $#rsub; ++j )); do + local -a matching=($parent/$rsub[1,j]*/(N)) + (( $#matching == 1 )) && break + done + local -i saved=$((${(m)#${(V)${rsub:$j}}} - d)) + if (( saved > 0 )); then + if (( q )); then + parts[i]='${${${_p9k__d:#-*}:+${(Q)${:-'${(qqq)${(q)sub}}'}}}:-${(Q)${:-' + parts[i]+=$'\3'${(qqq)${(q)${(V)${rsub[1,j]}}}}$'}}\1\3''${$((_p9k__d+='$saved'))+}}' + else + parts[i]='${${${_p9k__d:#-*}:+'$sub$'}:-\3'${(V)${rsub[1,j]}}$'\1\3''${$((_p9k__d+='$saved'))+}}' + fi + else + (( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)sub}}}}" + fi + fi + [[ -n $mtime ]] && _p9k__dir_stat_cache[$dir]="$mtime:$parts[i]" + fi + parent+=/$rsub + done + if [[ -n $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER ]]; then + local _2=$'\2' + if [[ $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER == last* ]]; then + (( e = ${parts[(I)*$_2]} + ${_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER#*:} )) + else + (( e = ${parts[(ib:2:)*$_2]} + ${_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER#*:} )) + fi + if (( e > 1 && e <= $#parts )); then + parts[1,e-1]=() + fake_first=1 + elif [[ $p == /?* ]]; then + parts[2]="\${(Q)\${:-${(qqq)${(q)orig[1]}}}}"$'\2' + fi + for ((i = $#parts < shortenlen ? $#parts : shortenlen; i > 0; --i)); do + [[ $#parts[-i] == *$'\2' ]] && continue + if [[ $orig[-i] == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]]; then + parts[-i]='${(Q)${:-'${(qqq)${(q)orig[-i]}}'}}'$'\2' + else + parts[-i]=${orig[-i]}$'\2' + fi + done + else + for ((; i <= $#parts; ++i)); do + [[ $parts[i] == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] && parts[i]='${(Q)${:-'${(qqq)${(q)parts[i]}}'}}' + parts[i]+=$'\2' + done + fi + _p9k_cache_ephemeral_set "$key" "${parts[@]}" + fi + parts=("${(@)_p9k__cache_val[2,-1]}") + ;; + truncate_with_folder_marker) + if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER ]]; then + local dir=$_p9k__cwd + local -a m=() + local -i i=$(($#parts - 1)) + for (( ; i > 1; --i )); do + dir=${dir:h} + [[ -n $dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]] && m+=$i + done + m+=1 + for (( i=1; i < $#m; ++i )); do + (( m[i] - m[i+1] > 2 )) && parts[m[i+1]+1,m[i]-1]=($'\1') + done + fi + ;; + *) + if (( shortenlen > 0 )); then + local -i len=$#parts + [[ -z $parts[1] ]] && (( --len )) + if (( len > shortenlen )); then + parts[1,-shortenlen-1]=($'\1') + fi + fi + ;; + esac + + # w=0: writable + # w=1: not writable + # w=2: does not exist + (( !_POWERLEVEL9K_DIR_SHOW_WRITABLE )) || [[ -w $_p9k__cwd ]] + local -i w=$? + (( w && _POWERLEVEL9K_DIR_SHOW_WRITABLE > 2 )) && [[ ! -e $_p9k__cwd ]] && w=2 + if ! _p9k_cache_ephemeral_get $0 $_p9k__cwd $p $w $fake_first "${parts[@]}"; then + local state=$0 + local icon='' + local a='' b='' c='' + for a b c in "${_POWERLEVEL9K_DIR_CLASSES[@]}"; do + if [[ $_p9k__cwd == ${~a} ]]; then + [[ -n $b ]] && state+=_${${(U)b}//İ/I} + icon=$'\1'$c + break + fi + done + if (( w )); then + if (( _POWERLEVEL9K_DIR_SHOW_WRITABLE == 1 )); then + state=${0}_NOT_WRITABLE + elif (( w == 2 )); then + state+=_NON_EXISTENT + else + state+=_NOT_WRITABLE + fi + icon=LOCK_ICON + fi + + local state_u=${${(U)state}//İ/I} + + local style=%b + _p9k_color $state BACKGROUND blue + _p9k_background $_p9k__ret + style+=$_p9k__ret + _p9k_color $state FOREGROUND "$_p9k_color1" + _p9k_foreground $_p9k__ret + style+=$_p9k__ret + if (( expand )); then + _p9k_escape_style $style + style=$_p9k__ret + fi + + parts=("${(@)parts//\%/%%}") + if [[ $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION != '~' && $fake_first == 0 && $p == ('~'|'~/'*) ]]; then + (( expand )) && _p9k_escape $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION || _p9k__ret=$_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION + parts[1]=$_p9k__ret + [[ $_p9k__ret == *%* ]] && parts[1]+=$style + elif [[ $_POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == 1 && $fake_first == 0 && $#parts > 1 && -z $parts[1] && -n $parts[2] ]]; then + parts[1]=() + fi + + local last_style= + _p9k_param $state PATH_HIGHLIGHT_BOLD '' + [[ $_p9k__ret == true ]] && last_style+=%B + if (( $+parameters[_POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND] || + $+parameters[_POWERLEVEL9K_${state_u}_PATH_HIGHLIGHT_FOREGROUND] )); then + _p9k_color $state PATH_HIGHLIGHT_FOREGROUND '' + _p9k_foreground $_p9k__ret + last_style+=$_p9k__ret + fi + if [[ -n $last_style ]]; then + (( expand )) && _p9k_escape_style $last_style || _p9k__ret=$last_style + parts[-1]=$_p9k__ret${parts[-1]//$'\1'/$'\1'$_p9k__ret}$style + fi + + local anchor_style= + _p9k_param $state ANCHOR_BOLD '' + [[ $_p9k__ret == true ]] && anchor_style+=%B + if (( $+parameters[_POWERLEVEL9K_DIR_ANCHOR_FOREGROUND] || + $+parameters[_POWERLEVEL9K_${state_u}_ANCHOR_FOREGROUND] )); then + _p9k_color $state ANCHOR_FOREGROUND '' + _p9k_foreground $_p9k__ret + anchor_style+=$_p9k__ret + fi + if [[ -n $anchor_style ]]; then + (( expand )) && _p9k_escape_style $anchor_style || _p9k__ret=$anchor_style + if [[ -z $last_style ]]; then + parts=("${(@)parts/%(#b)(*)$'\2'/$_p9k__ret$match[1]$style}") + else + (( $#parts > 1 )) && parts[1,-2]=("${(@)parts[1,-2]/%(#b)(*)$'\2'/$_p9k__ret$match[1]$style}") + parts[-1]=${parts[-1]/$'\2'} + fi + else + parts=("${(@)parts/$'\2'}") + fi + + if (( $+parameters[_POWERLEVEL9K_DIR_SHORTENED_FOREGROUND] || + $+parameters[_POWERLEVEL9K_${state_u}_SHORTENED_FOREGROUND] )); then + _p9k_color $state SHORTENED_FOREGROUND '' + _p9k_foreground $_p9k__ret + (( expand )) && _p9k_escape_style $_p9k__ret + local shortened_fg=$_p9k__ret + (( expand )) && _p9k_escape $delim || _p9k__ret=$delim + [[ $_p9k__ret == *%* ]] && _p9k__ret+=$style$shortened_fg + parts=("${(@)parts/(#b)$'\3'(*)$'\1'(*)$'\3'/$shortened_fg$match[1]$_p9k__ret$match[2]$style}") + parts=("${(@)parts/(#b)(*)$'\1'(*)/$shortened_fg$match[1]$_p9k__ret$match[2]$style}") + else + (( expand )) && _p9k_escape $delim || _p9k__ret=$delim + [[ $_p9k__ret == *%* ]] && _p9k__ret+=$style + parts=("${(@)parts/$'\1'/$_p9k__ret}") + parts=("${(@)parts//$'\3'}") + fi + + if [[ $_p9k__cwd == / && $_POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == 1 ]]; then + local sep='/' + else + local sep='' + if (( $+parameters[_POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND] || + $+parameters[_POWERLEVEL9K_${state_u}_PATH_SEPARATOR_FOREGROUND] )); then + _p9k_color $state PATH_SEPARATOR_FOREGROUND '' + _p9k_foreground $_p9k__ret + (( expand )) && _p9k_escape_style $_p9k__ret + sep=$_p9k__ret + fi + _p9k_param $state PATH_SEPARATOR / + _p9k__ret=${(g::)_p9k__ret} + (( expand )) && _p9k_escape $_p9k__ret + sep+=$_p9k__ret + [[ $sep == *%* ]] && sep+=$style + fi + + local content="${(pj.$sep.)parts}" + if (( _POWERLEVEL9K_DIR_HYPERLINK && _p9k_term_has_href )) && [[ $_p9k__cwd == /* ]]; then + _p9k_url_escape $_p9k__cwd + local header=$'%{\e]8;;file://'$_p9k__ret$'\a%}' + local footer=$'%{\e]8;;\a%}' + if (( expand )); then + _p9k_escape $header + header=$_p9k__ret + _p9k_escape $footer + footer=$_p9k__ret + fi + content=$header$content$footer + fi + + (( expand )) && _p9k_prompt_length "${(e):-"\${\${_p9k__d::=0}+}$content"}" || _p9k__ret= + _p9k_cache_ephemeral_set "$state" "$icon" "$expand" "$content" $_p9k__ret + fi + + if (( _p9k__cache_val[3] )); then + if (( $+_p9k__dir )); then + _p9k__cache_val[4]='${${_p9k__d::=-1024}+}'$_p9k__cache_val[4] + else + _p9k__dir=$_p9k__cache_val[4] + _p9k__dir_len=$_p9k__cache_val[5] + _p9k__cache_val[4]='%{d%}'$_p9k__cache_val[4]'%{d%}' + fi + fi + _p9k_prompt_segment "$_p9k__cache_val[1]" "blue" "$_p9k_color1" "$_p9k__cache_val[2]" "$_p9k__cache_val[3]" "" "$_p9k__cache_val[4]" +} + +instant_prompt_dir() { prompt_dir; } + +################################################################ +# Docker machine +prompt_docker_machine() { + _p9k_prompt_segment "$0" "magenta" "$_p9k_color1" 'SERVER_ICON' 0 '' "${DOCKER_MACHINE_NAME//\%/%%}" +} + +_p9k_prompt_docker_machine_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$DOCKER_MACHINE_NAME' +} + +################################################################ +# GO prompt +prompt_go_version() { + _p9k_cached_cmd 0 '' go version || return + [[ $_p9k__ret == (#b)*go([[:digit:].]##)* ]] || return + local v=$match[1] + if (( _POWERLEVEL9K_GO_VERSION_PROJECT_ONLY )); then + local p=$GOPATH + if [[ -z $p ]]; then + if [[ -d $HOME/go ]]; then + p=$HOME/go + else + p="$(go env GOPATH 2>/dev/null)" && [[ -n $p ]] || return + fi + fi + if [[ $_p9k__cwd/ != $p/* && $_p9k__cwd_a/ != $p/* ]]; then + _p9k_upglob go.mod -. && return + fi + fi + _p9k_prompt_segment "$0" "green" "grey93" "GO_ICON" 0 '' "${v//\%/%%}" +} + +_p9k_prompt_go_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[go]' +} + +################################################################ +# Command number (in local history) +prompt_history() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment "$0" "grey50" "$_p9k_color1" '' 0 '' '%h' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +prompt_package() { + unset P9K_PACKAGE_NAME P9K_PACKAGE_VERSION + _p9k_upglob package.json -. && return + + local file=$_p9k__parent_dirs[$?]/package.json + if ! _p9k_cache_stat_get $0 $file; then + () { + local data field + local -A found + # Redneck json parsing. Yields correct results for any well-formed json document. + # Produces random garbage for invalid json. + { data="$(<$file)" || return } 2>/dev/null + data=${${data//$'\r'}##[[:space:]]#} + [[ $data == '{'* ]] || return + data[1]= + local -i depth=1 + while true; do + data=${data##[[:space:]]#} + [[ -n $data ]] || return + case $data[1] in + '{'|'[') data[1]=; (( ++depth ));; + '}'|']') data[1]=; (( --depth > 0 )) || return;; + ':') data[1]=;; + ',') data[1]=; field=;; + [[:alnum:].]) data=${data##[[:alnum:].]#};; + '"') + local tail=${data##\"([^\"\\]|\\?)#} + [[ $tail == '"'* ]] || return + local s=${data:1:-$#tail} + data=${tail:1} + (( depth == 1 )) || continue + if [[ -z $field ]]; then + field=${s:-x} + elif [[ $field == (name|version) ]]; then + (( ! $+found[$field] )) || return + [[ -n $s ]] || return + [[ $s != *($'\n'|'\')* ]] || return + found[$field]=$s + (( $#found == 2 )) && break + fi + ;; + *) return 1;; + esac + done + _p9k_cache_stat_set 1 $found[name] $found[version] + return 0 + } || _p9k_cache_stat_set 0 + fi + (( _p9k__cache_val[1] )) || return + + P9K_PACKAGE_NAME=$_p9k__cache_val[2] + P9K_PACKAGE_VERSION=$_p9k__cache_val[3] + _p9k_prompt_segment "$0" "cyan" "$_p9k_color1" PACKAGE_ICON 0 '' ${P9K_PACKAGE_VERSION//\%/%%} +} + +################################################################ +# Detection for virtualization (systemd based systems only) +prompt_detect_virt() { + local virt="$(systemd-detect-virt 2>/dev/null)" + if [[ "$virt" == "none" ]]; then + local -a inode + if zstat -A inode +inode / 2>/dev/null && [[ $inode[1] != 2 ]]; then + virt="chroot" + fi + fi + if [[ -n "${virt}" ]]; then + _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" '' 0 '' "${virt//\%/%%}" + fi +} + +_p9k_prompt_detect_virt_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[systemd-detect-virt]' +} + +################################################################ +# Segment to display the current IP address +prompt_ip() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment "$0" "cyan" "$_p9k_color1" 'NETWORK_ICON' 1 '$P9K_IP_IP' '$P9K_IP_IP' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +################################################################ +# Segment to display if VPN is active +prompt_vpn_ip() { + typeset -ga _p9k__vpn_ip_segments + _p9k__vpn_ip_segments+=($_p9k__prompt_side $_p9k__line_index $_p9k__segment_index) + local p='${(e)_p9k__vpn_ip_'$_p9k__prompt_side$_p9k__segment_index'}' + _p9k__prompt+=$p + typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$p +} + +_p9k_vpn_ip_render() { + local _p9k__segment_name=vpn_ip _p9k__prompt_side ip + local -i _p9k__has_upglob _p9k__segment_index + for _p9k__prompt_side _p9k__line_index _p9k__segment_index in $_p9k__vpn_ip_segments; do + local _p9k__prompt= + for ip in $_p9k__vpn_ip_ips; do + _p9k_prompt_segment prompt_vpn_ip "cyan" "$_p9k_color1" 'VPN_ICON' 0 '' $ip + done + typeset -g _p9k__vpn_ip_$_p9k__prompt_side$_p9k__segment_index=$_p9k__prompt + done +} + +################################################################ +# Segment to display laravel version +prompt_laravel_version() { + # TODO: add a '-/' or '-.' here depending on whether artisan is a directory or a file. + _p9k_upglob artisan && return + local dir=$_p9k__parent_dirs[$?] + local app=$dir/vendor/laravel/framework/src/Illuminate/Foundation/Application.php + [[ -r $app ]] || return + if ! _p9k_cache_stat_get $0 $dir/artisan $app; then + local v="$(php $dir/artisan --version 2> /dev/null)" + _p9k_cache_stat_set "${${(M)v:#Laravel Framework *}#Laravel Framework }" + fi + [[ -n $_p9k__cache_val[1] ]] || return + _p9k_prompt_segment "$0" "maroon" "white" 'LARAVEL_ICON' 0 '' "${_p9k__cache_val[1]//\%/%%}" +} + +_p9k_prompt_laravel_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[php]' +} + +################################################################ +# Segment to display load +prompt_load() { + if [[ $_p9k_os == (OSX|BSD) ]]; then + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0_CRITICAL red "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_critical' '$_p9k__load_value' + _p9k_prompt_segment $0_WARNING yellow "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_warning' '$_p9k__load_value' + _p9k_prompt_segment $0_NORMAL green "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_normal' '$_p9k__load_value' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] + return + fi + + [[ -r /proc/loadavg ]] || return + _p9k_read_file /proc/loadavg || return + local load=${${(A)=_p9k__ret}[_POWERLEVEL9K_LOAD_WHICH]//,/.} + local -F pct='100. * load / _p9k_num_cpus' + if (( pct > _POWERLEVEL9K_LOAD_CRITICAL_PCT )); then + _p9k_prompt_segment $0_CRITICAL red "$_p9k_color1" LOAD_ICON 0 '' $load + elif (( pct > _POWERLEVEL9K_LOAD_WARNING_PCT )); then + _p9k_prompt_segment $0_WARNING yellow "$_p9k_color1" LOAD_ICON 0 '' $load + else + _p9k_prompt_segment $0_NORMAL green "$_p9k_color1" LOAD_ICON 0 '' $load + fi +} + +_p9k_prompt_load_init() { + if [[ $_p9k_os == (OSX|BSD) ]]; then + typeset -g _p9k__load_value= + typeset -g _p9k__load_normal= + typeset -g _p9k__load_warning= + typeset -g _p9k__load_critical= + _p9k__async_segments_compute+='_p9k_worker_invoke load _p9k_prompt_load_compute' + elif [[ ! -r /proc/loadavg ]]; then + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + fi +} + +_p9k_prompt_load_compute() { + (( $+commands[sysctl] )) || return + _p9k_worker_async _p9k_prompt_load_async _p9k_prompt_load_sync +} + +_p9k_prompt_load_async() { + local load="$(sysctl -n vm.loadavg 2>/dev/null)" || return + load=${${(A)=load}[_POWERLEVEL9K_LOAD_WHICH+1]//,/.} + [[ $load == <->(|.<->) && $load != $_p9k__load_value ]] || return + _p9k__load_value=$load + _p9k__load_normal= + _p9k__load_warning= + _p9k__load_critical= + local -F pct='100. * _p9k__load_value / _p9k_num_cpus' + if (( pct > _POWERLEVEL9K_LOAD_CRITICAL_PCT )); then + _p9k__load_critical=1 + elif (( pct > _POWERLEVEL9K_LOAD_WARNING_PCT )); then + _p9k__load_warning=1 + else + _p9k__load_normal=1 + fi + _p9k_print_params \ + _p9k__load_value \ + _p9k__load_normal \ + _p9k__load_warning \ + _p9k__load_critical + echo -E - 'reset=1' +} + +_p9k_prompt_load_sync() { + eval $REPLY + _p9k_worker_reply $REPLY +} + +# Usage: _p9k_cached_cmd <0|1> [args...] +# +# The first argument says whether to capture stderr (1) or ignore it (0). +# The second argument can be empty or a file. If it's a file, the +# output of the command is presumed to potentially depend on it. +function _p9k_cached_cmd() { + local cmd=$commands[$3] + [[ -n $cmd ]] || return + if ! _p9k_cache_stat_get $0" ${(q)*}" $2 $cmd; then + local out + if (( $1 )); then + out="$($cmd "${@:4}" 2>&1)" + else + out="$($cmd "${@:4}" 2>/dev/null)" + fi + _p9k_cache_stat_set $(( ! $? )) "$out" + fi + (( $_p9k__cache_val[1] )) || return + _p9k__ret=$_p9k__cache_val[2] +} + +################################################################ +# Segment to diplay Node version +prompt_node_version() { + _p9k_upglob package.json -. + local -i idx=$? + (( idx || ! _POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY )) || return + + local node=$commands[node] + local -a file_deps env_deps + if [[ $node == ${NODENV_ROOT:-$HOME/.nodenv}/shims/node ]]; then + env_deps+=("$NODENV_VERSION") + file_deps+=(${NODENV_ROOT:-$HOME/.nodenv}/version) + if [[ $NODENV_DIR != (|.) ]]; then + [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$_p9k__cwd_a/$NODENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if [[ -e $dir/.node-version ]]; then + file_deps+=($dir/.node-version) + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + _p9k_upglob .node-version -. || file_deps+=($_p9k__parent_dirs[idx]/.node-version) + elif (( idx )); then + file_deps+=($_p9k__parent_dirs[idx]/package.json) + fi + + if ! _p9k_cache_stat_get "$0 $#env_deps ${(j: :)${(@q)env_deps}} ${(j: :)${(@q)file_deps}}" $file_deps $node; then + local out + out=$($node --version 2>/dev/null) + _p9k_cache_stat_set $(( ! $? )) "$out" + fi + (( $_p9k__cache_val[1] )) || return + local v=$_p9k__cache_val[2] + [[ $v == v?* ]] || return + _p9k_prompt_segment "$0" "green" "white" 'NODE_ICON' 0 '' "${${v#v}//\%/%%}" +} + +_p9k_prompt_node_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[node]' +} + +# Almost the same as `nvm_version default` but faster. The differences shouldn't affect +# the observable behavior of Powerlevel10k. +function _p9k_nvm_ls_default() { + local v=default + local -a seen=($v) + while [[ -r $NVM_DIR/alias/$v ]]; do + local target= + IFS='' read -r target <$NVM_DIR/alias/$v + target=${target%$'\r'} + [[ -z $target ]] && break + (( $seen[(I)$target] )) && return + seen+=$target + v=$target + done + + case $v in + default|N/A) + return 1 + ;; + system|v) + _p9k__ret=system + return 0 + ;; + iojs-[0-9]*) + v=iojs-v${v#iojs-} + ;; + [0-9]*) + v=v$v + ;; + esac + + if [[ $v == v*.*.* ]]; then + if [[ -x $NVM_DIR/versions/node/$v/bin/node || -x $NVM_DIR/$v/bin/node ]]; then + _p9k__ret=$v + return 0 + elif [[ -x $NVM_DIR/versions/io.js/$v/bin/node ]]; then + _p9k__ret=iojs-$v + return 0 + else + return 1 + fi + fi + + local -a dirs=() + case $v in + node|node-|stable) + dirs=($NVM_DIR/versions/node $NVM_DIR) + v='(v[1-9]*|v0.*[02468].*)' + ;; + unstable) + dirs=($NVM_DIR/versions/node $NVM_DIR) + v='v0.*[13579].*' + ;; + iojs*) + dirs=($NVM_DIR/versions/io.js) + v=v${${${v#iojs}#-}#v}'*' + ;; + *) + dirs=($NVM_DIR/versions/node $NVM_DIR $NVM_DIR/versions/io.js) + v=v${v#v}'*' + ;; + esac + + local -a matches=(${^dirs}/${~v}(/N)) + (( $#matches )) || return + + local max path + for path in ${(Oa)matches}; do + [[ ${path:t} == (#b)v(*).(*).(*) ]] || continue + v=${(j::)${(@l:6::0:)match}} + [[ $v > $max ]] || continue + max=$v + _p9k__ret=${path:t} + [[ ${path:h:t} != io.js ]] || _p9k__ret=iojs-$_p9k__ret + done + + [[ -n $max ]] +} + +# The same as `nvm_version current` but faster. +_p9k_nvm_ls_current() { + local node_path=${commands[node]:A} + [[ -n $node_path ]] || return + + local nvm_dir=${NVM_DIR:A} + if [[ -n $nvm_dir && $node_path == $nvm_dir/versions/io.js/* ]]; then + _p9k_cached_cmd 0 '' iojs --version || return + _p9k__ret=iojs-v${_p9k__ret#v} + elif [[ -n $nvm_dir && $node_path == $nvm_dir/* ]]; then + _p9k_cached_cmd 0 '' node --version || return + _p9k__ret=v${_p9k__ret#v} + else + _p9k__ret=system + fi +} + +################################################################ +# Segment to display Node version from NVM +# Only prints the segment if different than the default value +prompt_nvm() { + [[ -n $NVM_DIR ]] && _p9k_nvm_ls_current || return + local current=$_p9k__ret + ! _p9k_nvm_ls_default || [[ $_p9k__ret != $current ]] || return + _p9k_prompt_segment "$0" "magenta" "black" 'NODE_ICON' 0 '' "${${current#v}//\%/%%}" +} + +_p9k_prompt_nvm_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[nvm]:-${${+functions[nvm]}:#0}}' +} + +################################################################ +# Segment to display NodeEnv +prompt_nodeenv() { + local msg + if (( _POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION )) && _p9k_cached_cmd 0 '' node --version; then + msg="${_p9k__ret//\%/%%} " + fi + msg+="$_POWERLEVEL9K_NODEENV_LEFT_DELIMITER${${NODE_VIRTUAL_ENV:t}//\%/%%}$_POWERLEVEL9K_NODEENV_RIGHT_DELIMITER" + _p9k_prompt_segment "$0" "black" "green" 'NODE_ICON' 0 '' "$msg" +} + +_p9k_prompt_nodeenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$NODE_VIRTUAL_ENV' +} + +function _p9k_nodeenv_version_transform() { + local dir=${NODENV_ROOT:-$HOME/.nodenv}/versions + [[ -z $1 || $1 == system ]] && _p9k__ret=$1 && return + [[ -d $dir/$1 ]] && _p9k__ret=$1 && return + [[ -d $dir/${1/v} ]] && _p9k__ret=${1/v} && return + [[ -d $dir/${1#node-} ]] && _p9k__ret=${1#node-} && return + [[ -d $dir/${1#node-v} ]] && _p9k__ret=${1#node-v} && return + return 1 +} + +function _p9k_nodenv_global_version() { + _p9k_read_word ${NODENV_ROOT:-$HOME/.nodenv}/version || _p9k__ret=system +} + +################################################################ +# Segment to display nodenv information +# https://github.com/nodenv/nodenv +prompt_nodenv() { + if [[ -n $NODENV_VERSION ]]; then + (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)shell]} )) || return + local v=$NODENV_VERSION + else + (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $NODENV_DIR != (|.) ]]; then + [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$_p9k__cwd_a/$NODENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_word $dir/.node-version; then + (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .node-version -. + local -i idx=$? + if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.node-version; then + (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)global]} )) || return + _p9k_nodenv_global_version + fi + + _p9k_nodeenv_version_transform $_p9k__ret || return + local v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )); then + _p9k_nodenv_global_version + _p9k_nodeenv_version_transform $_p9k__ret && [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_NODENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" "black" "green" 'NODE_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_nodenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[nodenv]:-${${+functions[nodenv]}:#0}}' +} + +prompt_dotnet_version() { + if (( _POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY )); then + _p9k_upglob 'project.json|global.json|packet.dependencies|*.csproj|*.fsproj|*.xproj|*.sln' -. && return + fi + + local cfg + _p9k_upglob global.json -. || cfg=$_p9k__parent_dirs[$?]/global.json + _p9k_cached_cmd 0 "$cfg" dotnet --version || return + _p9k_prompt_segment "$0" "magenta" "white" 'DOTNET_ICON' 0 '' "$_p9k__ret" +} + +_p9k_prompt_dotnet_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[dotnet]' +} + +################################################################ +# Segment to print a little OS icon +prompt_os_icon() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment "$0" "black" "white" '' 0 '' "$_p9k_os_icon" + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +instant_prompt_os_icon() { prompt_os_icon; } + +################################################################ +# Segment to display PHP version number +prompt_php_version() { + if (( _POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY )); then + _p9k_upglob 'composer.json|*.php' -. && return + fi + _p9k_cached_cmd 0 '' php --version || return + [[ $_p9k__ret == (#b)(*$'\n')#'PHP '([[:digit:].]##)* ]] || return + local v=$match[2] + _p9k_prompt_segment "$0" "fuchsia" "grey93" 'PHP_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_php_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[php]' +} + +################################################################ +# Segment to display free RAM and used Swap +prompt_ram() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0 yellow "$_p9k_color1" RAM_ICON 1 '$_p9k__ram_free' '$_p9k__ram_free' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +function _p9k_prompt_ram_init() { + if [[ $_p9k_os == OSX && $+commands[vm_stat] == 0 || + $_p9k_os == BSD && ! -r /var/run/dmesg.boot || + $_p9k_os != (OSX|BSD) && ! -r /proc/meminfo ]]; then + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + return + fi + typeset -g _p9k__ram_free= + _p9k__async_segments_compute+='_p9k_worker_invoke ram _p9k_prompt_ram_compute' +} + +_p9k_prompt_ram_compute() { + _p9k_worker_async _p9k_prompt_ram_async _p9k_prompt_ram_sync +} + +_p9k_prompt_ram_async() { + local -F free_bytes + + case $_p9k_os in + OSX) + (( $+commands[vm_stat] )) || return + local stat && stat="$(vm_stat 2>/dev/null)" || return + [[ $stat =~ 'Pages free:[[:space:]]+([0-9]+)' ]] || return + (( free_bytes += match[1] )) + [[ $stat =~ 'Pages inactive:[[:space:]]+([0-9]+)' ]] || return + (( free_bytes += match[1] )) + if (( ! $+_p9k__ram_pagesize )); then + local p + (( $+commands[pagesize] )) && p=$(pagesize 2>/dev/null) && [[ $p == <1-> ]] || p=4096 + typeset -gi _p9k__ram_pagesize=p + _p9k_print_params _p9k__ram_pagesize + fi + (( free_bytes *= _p9k__ram_pagesize )) + ;; + BSD) + local stat && stat="$(grep -F 'avail memory' /var/run/dmesg.boot 2>/dev/null)" || return + free_bytes=${${(A)=stat}[4]} + ;; + *) + [[ -r /proc/meminfo ]] || return + local stat && stat="$()* ]] || return + free_bytes=$(( $match[2] * 1024 )) + ;; + esac + + _p9k_human_readable_bytes $free_bytes + [[ $_p9k__ret != $_p9k__ram_free ]] || return + _p9k__ram_free=$_p9k__ret + _p9k_print_params _p9k__ram_free + echo -E - 'reset=1' +} + +_p9k_prompt_ram_sync() { + eval $REPLY + _p9k_worker_reply $REPLY +} + +function _p9k_rbenv_global_version() { + _p9k_read_word ${RBENV_ROOT:-$HOME/.rbenv}/version || _p9k__ret=system +} + +################################################################ +# Segment to display rbenv information +# https://github.com/rbenv/rbenv#choosing-the-ruby-version +prompt_rbenv() { + if [[ -n $RBENV_VERSION ]]; then + (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)shell]} )) || return + local v=$RBENV_VERSION + else + (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $RBENV_DIR != (|.) ]]; then + [[ $RBENV_DIR == /* ]] && local dir=$RBENV_DIR || local dir="$_p9k__cwd_a/$RBENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_word $dir/.ruby-version; then + (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .ruby-version -. + local -i idx=$? + if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.ruby-version; then + (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)global]} )) || return + _p9k_rbenv_global_version + fi + local v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )); then + _p9k_rbenv_global_version + [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_RBENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_rbenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[rbenv]:-${${+functions[rbenv]}:#0}}' +} + +function _p9k_phpenv_global_version() { + _p9k_read_word ${PHPENV_ROOT:-$HOME/.phpenv}/version || _p9k__ret=system +} + +function _p9k_scalaenv_global_version() { + _p9k_read_word ${SCALAENV_ROOT:-$HOME/.scalaenv}/version || _p9k__ret=system +} + +# https://github.com/scalaenv/scalaenv +prompt_scalaenv() { + if [[ -n $SCALAENV_VERSION ]]; then + (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)shell]} )) || return + local v=$SCALAENV_VERSION + else + (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $SCALAENV_DIR != (|.) ]]; then + [[ $SCALAENV_DIR == /* ]] && local dir=$SCALAENV_DIR || local dir="$_p9k__cwd_a/$SCALAENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_word $dir/.scala-version; then + (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .scala-version -. + local -i idx=$? + if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.scala-version; then + (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)global]} )) || return + _p9k_scalaenv_global_version + fi + local v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW )); then + _p9k_scalaenv_global_version + [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_SCALAENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'SCALA_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_scalaenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[scalaenv]:-${${+functions[scalaenv]}:#0}}' +} + +function _p9k_phpenv_global_version() { + _p9k_read_word ${PHPENV_ROOT:-$HOME/.phpenv}/version || _p9k__ret=system +} + +prompt_phpenv() { + if [[ -n $PHPENV_VERSION ]]; then + (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)shell]} )) || return + local v=$PHPENV_VERSION + else + (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $PHPENV_DIR != (|.) ]]; then + [[ $PHPENV_DIR == /* ]] && local dir=$PHPENV_DIR || local dir="$_p9k__cwd_a/$PHPENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_word $dir/.php-version; then + (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .php-version -. + local -i idx=$? + if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.php-version; then + (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)global]} )) || return + _p9k_phpenv_global_version + fi + local v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW )); then + _p9k_phpenv_global_version + [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_PHPENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" "magenta" "$_p9k_color1" 'PHP_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_phpenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[phpenv]:-${${+functions[phpenv]}:#0}}' +} + +function _p9k_luaenv_global_version() { + _p9k_read_word ${LUAENV_ROOT:-$HOME/.luaenv}/version || _p9k__ret=system +} + +################################################################ +# Segment to display luaenv information +# https://github.com/cehoffman/luaenv +prompt_luaenv() { + if [[ -n $LUAENV_VERSION ]]; then + (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)shell]} )) || return + local v=$LUAENV_VERSION + else + (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $LUAENV_DIR != (|.) ]]; then + [[ $LUAENV_DIR == /* ]] && local dir=$LUAENV_DIR || local dir="$_p9k__cwd_a/$LUAENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_word $dir/.lua-version; then + (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .lua-version -. + local -i idx=$? + if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.lua-version; then + (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)global]} )) || return + _p9k_luaenv_global_version + fi + local v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW )); then + _p9k_luaenv_global_version + [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_LUAENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" blue "$_p9k_color1" 'LUA_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_luaenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[luaenv]:-${${+functions[luaenv]}:#0}}' +} + +function _p9k_jenv_global_version() { + _p9k_read_word ${JENV_ROOT:-$HOME/.jenv}/version || _p9k__ret=system +} + +################################################################ +# Segment to display jenv information +# https://github.com/jenv/jenv +prompt_jenv() { + if [[ -n $JENV_VERSION ]]; then + (( ${_POWERLEVEL9K_JENV_SOURCES[(I)shell]} )) || return + local v=$JENV_VERSION + else + (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $JENV_DIR != (|.) ]]; then + [[ $JENV_DIR == /* ]] && local dir=$JENV_DIR || local dir="$_p9k__cwd_a/$JENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_word $dir/.java-version; then + (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .java-version -. + local -i idx=$? + if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.java-version; then + (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_JENV_SOURCES[(I)global]} )) || return + _p9k_jenv_global_version + fi + local v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW )); then + _p9k_jenv_global_version + [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_JENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" white red 'JAVA_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_jenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[jenv]:-${${+functions[jenv]}:#0}}' +} + +function _p9k_plenv_global_version() { + _p9k_read_word ${PLENV_ROOT:-$HOME/.plenv}/version || _p9k__ret=system +} + +################################################################ +# Segment to display plenv information +# https://github.com/plenv/plenv#choosing-the-perl-version +prompt_plenv() { + if [[ -n $PLENV_VERSION ]]; then + (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)shell]} )) || return + local v=$PLENV_VERSION + else + (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $PLENV_DIR != (|.) ]]; then + [[ $PLENV_DIR == /* ]] && local dir=$PLENV_DIR || local dir="$_p9k__cwd_a/$PLENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_word $dir/.perl-version; then + (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .perl-version -. + local -i idx=$? + if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.perl-version; then + (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)global]} )) || return + _p9k_plenv_global_version + fi + local v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW )); then + _p9k_plenv_global_version + [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_PLENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PERL_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_plenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[plenv]:-${${+functions[plenv]}:#0}}' +} + +################################################################ +# Segment to display perlbrew information +# https://github.com/gugod/App-perlbrew + +prompt_perlbrew() { + if (( _POWERLEVEL9K_PERLBREW_PROJECT_ONLY )); then + _p9k_upglob 'cpanfile|.perltidyrc|(|MY)META.(yml|json)|(Makefile|Build).PL|*.(pl|pm|t|pod)' -. && return + fi + + local v=$PERLBREW_PERL + (( _POWERLEVEL9K_PERLBREW_SHOW_PREFIX )) || v=${v#*-} + [[ -n $v ]] || return + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PERL_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_perlbrew_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$PERLBREW_PERL' +} + +################################################################ +# Segment to display chruby information +# see https://github.com/postmodern/chruby/issues/245 for chruby_auto issue with ZSH +prompt_chruby() { + local v=${(M)RUBY_ENGINE:#$~_POWERLEVEL9K_CHRUBY_SHOW_ENGINE_PATTERN} + [[ $_POWERLEVEL9K_CHRUBY_SHOW_VERSION == 1 && -n $RUBY_VERSION ]] && v+=${v:+ }$RUBY_VERSION + _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_chruby_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$RUBY_ENGINE' +} + +################################################################ +# Segment to print an icon if user is root. +prompt_root_indicator() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" 'ROOT_ICON' 0 '${${(%):-%#}:#\%}' '' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +instant_prompt_root_indicator() { prompt_root_indicator; } + +################################################################ +# Segment to display Rust version number +prompt_rust_version() { + unset P9K_RUST_VERSION + if (( _POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY )); then + _p9k_upglob Cargo.toml -. && return + fi + local rustc=$commands[rustc] toolchain deps=() + if (( $+commands[ldd] )); then + if ! _p9k_cache_stat_get $0_so $rustc; then + local line so + for line in "${(@f)$(ldd $rustc 2>/dev/null)}"; do + [[ $line == (#b)[[:space:]]#librustc_driver[^[:space:]]#.so' => '(*)' (0x'[[:xdigit:]]#')' ]] || continue + so=$match[1] + break + done + _p9k_cache_stat_set "$so" + fi + deps+=$_p9k__cache_val[1] + fi + if (( $+commands[rustup] )); then + local rustup=$commands[rustup] + local rustup_home=${RUSTUP_HOME:-~/.rustup} + local cfg=($rustup_home/settings.toml(.N)) + deps+=($cfg $rustup_home/update-hashes/*(.N)) + if [[ -z ${toolchain::=$RUSTUP_TOOLCHAIN} ]]; then + if ! _p9k_cache_stat_get $0_overrides $rustup $cfg; then + local lines=(${(f)"$(rustup override list 2>/dev/null)"}) + if [[ $lines[1] == "no overrides" ]]; then + _p9k_cache_stat_set + else + local MATCH + local keys=(${(@)${lines%%[[:space:]]#[^[:space:]]#}/(#m)*/${(b)MATCH}/}) + local vals=(${(@)lines/(#m)*/$MATCH[(I)/] ${MATCH##*[[:space:]]}}) + _p9k_cache_stat_set ${keys:^vals} + fi + fi + local -A overrides=($_p9k__cache_val) + _p9k_upglob rust-toolchain -. + local dir=$_p9k__parent_dirs[$?] + local -i n m=${dir[(I)/]} + local pair + for pair in ${overrides[(K)$_p9k__cwd/]}; do + n=${pair%% *} + (( n <= m )) && continue + m=n + toolchain=${pair#* } + done + if [[ -z $toolchain && -n $dir ]]; then + _p9k_read_word $dir/rust-toolchain + toolchain=$_p9k__ret + fi + fi + fi + if ! _p9k_cache_stat_get $0_v$toolchain $rustc $deps; then + _p9k_cache_stat_set "$($rustc --version 2>/dev/null)" + fi + local v=${${_p9k__cache_val[1]#rustc }%% *} + [[ -n $v ]] || return + typeset -g P9K_RUST_VERSION=$_p9k__cache_val[1] + _p9k_prompt_segment "$0" "darkorange" "$_p9k_color1" 'RUST_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_rust_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[rustc]' +} + +# RSpec test ratio +prompt_rspec_stats() { + if [[ -d app && -d spec ]]; then + local -a code=(app/**/*.rb(N)) + (( $#code )) || return + local tests=(spec/**/*.rb(N)) + _p9k_build_test_stats "$0" "$#code" "$#tests" "RSpec" 'TEST_ICON' + fi +} + +################################################################ +# Segment to display Ruby Version Manager information +prompt_rvm() { + [[ $GEM_HOME == *rvm* && $ruby_string != $rvm_path/bin/ruby ]] || return + local v=${GEM_HOME:t} + (( _POWERLEVEL9K_RVM_SHOW_GEMSET )) || v=${v%%${rvm_gemset_separator:-@}*} + (( _POWERLEVEL9K_RVM_SHOW_PREFIX )) || v=${v#*-} + [[ -n $v ]] || return + _p9k_prompt_segment "$0" "240" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_rvm_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[rvm-prompt]:-${${+functions[rvm-prompt]}:#0}}' +} + +################################################################ +# Segment to display SSH icon when connected +prompt_ssh() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" 'SSH_ICON' 0 '' '' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_ssh_init() { + if (( ! P9K_SSH )); then + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + fi +} + +instant_prompt_ssh() { + if (( ! P9K_SSH )); then + return + fi + prompt_ssh +} + +################################################################ +# Status: When an error occur, return the error code, or a cross icon if option is set +# Display an ok icon when no error occur, or hide the segment if option is set to false +prompt_status() { + if ! _p9k_cache_get $0 $_p9k__status $_p9k__pipestatus; then + (( _p9k__status )) && local state=ERROR || local state=OK + if (( _POWERLEVEL9K_STATUS_EXTENDED_STATES )); then + if (( _p9k__status )); then + if (( $#_p9k__pipestatus > 1 )); then + state+=_PIPE + elif (( _p9k__status > 128 )); then + state+=_SIGNAL + fi + elif [[ "$_p9k__pipestatus" == *[1-9]* ]]; then + state+=_PIPE + fi + fi + _p9k__cache_val=(:) + if (( _POWERLEVEL9K_STATUS_$state )); then + if (( _POWERLEVEL9K_STATUS_SHOW_PIPESTATUS )); then + local text=${(j:|:)${(@)_p9k__pipestatus:/(#b)(*)/$_p9k_exitcode2str[$match[1]+1]}} + else + local text=$_p9k_exitcode2str[_p9k__status+1] + fi + if (( _p9k__status )); then + if (( !_POWERLEVEL9K_STATUS_CROSS && _POWERLEVEL9K_STATUS_VERBOSE )); then + _p9k__cache_val=($0_$state red yellow1 CARRIAGE_RETURN_ICON 0 '' "$text") + else + _p9k__cache_val=($0_$state $_p9k_color1 red FAIL_ICON 0 '' '') + fi + elif (( _POWERLEVEL9K_STATUS_VERBOSE || _POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE )); then + [[ $state == OK ]] && text='' + _p9k__cache_val=($0_$state "$_p9k_color1" green OK_ICON 0 '' "$text") + fi + fi + if (( $#_p9k__pipestatus < 3 )); then + _p9k_cache_set "${(@)_p9k__cache_val}" + fi + fi + _p9k_prompt_segment "${(@)_p9k__cache_val}" +} + +instant_prompt_status() { + if (( _POWERLEVEL9K_STATUS_OK )); then + _p9k_prompt_segment prompt_status_OK "$_p9k_color1" green OK_ICON 0 '' '' + fi +} + +prompt_prompt_char() { + local saved=$_p9k__prompt_char_saved[$_p9k__prompt_side$_p9k__segment_index$((!_p9k__status))] + if [[ -n $saved ]]; then + _p9k__prompt+=$saved + return + fi + local -i len=$#_p9k__prompt _p9k__has_upglob + if (( __p9k_sh_glob )); then + if (( _p9k__status )); then + if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then + _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' '❯' + _p9k_prompt_segment $0_ERROR_VIOWR "$_p9k_color1" 196 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' '▶' + else + _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' '❯' + fi + _p9k_prompt_segment $0_ERROR_VICMD "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' + _p9k_prompt_segment $0_ERROR_VIVIS "$_p9k_color1" 196 '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' 'Ⅴ' + else + if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then + _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' '❯' + _p9k_prompt_segment $0_OK_VIOWR "$_p9k_color1" 76 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' '▶' + else + _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' '❯' + fi + _p9k_prompt_segment $0_OK_VICMD "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' + _p9k_prompt_segment $0_OK_VIVIS "$_p9k_color1" 76 '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' 'Ⅴ' + fi + else + if (( _p9k__status )); then + if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then + _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' '❯' + _p9k_prompt_segment $0_ERROR_VIOWR "$_p9k_color1" 196 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' '▶' + else + _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' '❯' + fi + _p9k_prompt_segment $0_ERROR_VICMD "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' + _p9k_prompt_segment $0_ERROR_VIVIS "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' 'Ⅴ' + else + if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then + _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' '❯' + _p9k_prompt_segment $0_OK_VIOWR "$_p9k_color1" 76 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' '▶' + else + _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' '❯' + fi + _p9k_prompt_segment $0_OK_VICMD "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' + _p9k_prompt_segment $0_OK_VIVIS "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' 'Ⅴ' + fi + fi + (( _p9k__has_upglob )) || _p9k__prompt_char_saved[$_p9k__prompt_side$_p9k__segment_index$((!_p9k__status))]=$_p9k__prompt[len+1,-1] +} + +instant_prompt_prompt_char() { + _p9k_prompt_segment prompt_prompt_char_OK_VIINS "$_p9k_color1" 76 '' 0 '' '❯' +} + +################################################################ +# Segment to display Swap information +prompt_swap() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0 yellow "$_p9k_color1" SWAP_ICON 1 '$_p9k__swap_used' '$_p9k__swap_used' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +function _p9k_prompt_swap_init() { + if [[ $_p9k_os == OSX && $+commands[sysctl] == 0 || $_p9k_os != OSX && ! -r /proc/meminfo ]]; then + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + return + fi + typeset -g _p9k__swap_used= + _p9k__async_segments_compute+='_p9k_worker_invoke swap _p9k_prompt_swap_compute' +} + +_p9k_prompt_swap_compute() { + _p9k_worker_async _p9k_prompt_swap_async _p9k_prompt_swap_sync +} + +_p9k_prompt_swap_async() { + local -F used_bytes + + if [[ "$_p9k_os" == "OSX" ]]; then + (( $+commands[sysctl] )) || return + [[ "$(sysctl vm.swapusage 2>/dev/null)" =~ "used = ([0-9,.]+)([A-Z]+)" ]] || return + used_bytes=${match[1]//,/.} + case ${match[2]} in + 'K') (( used_bytes *= 1024 ));; + 'M') (( used_bytes *= 1048576 ));; + 'G') (( used_bytes *= 1073741824 ));; + 'T') (( used_bytes *= 1099511627776 ));; + *) return 0;; + esac + else + local meminfo && meminfo="$(grep -F 'Swap' /proc/meminfo 2>/dev/null)" || return + [[ $meminfo =~ 'SwapTotal:[[:space:]]+([0-9]+)' ]] || return + (( used_bytes+=match[1] )) + [[ $meminfo =~ 'SwapFree:[[:space:]]+([0-9]+)' ]] || return + (( used_bytes-=match[1] )) + (( used_bytes *= 1024 )) + fi + + (( used_bytes >= 0 || (used_bytes = 0) )) + + _p9k_human_readable_bytes $used_bytes + [[ $_p9k__ret != $_p9k__swap_used ]] || return + _p9k__swap_used=$_p9k__ret + _p9k_print_params _p9k__swap_used + echo -E - 'reset=1' +} + +_p9k_prompt_swap_sync() { + eval $REPLY + _p9k_worker_reply $REPLY +} + +################################################################ +# Symfony2-PHPUnit test ratio +prompt_symfony2_tests() { + if [[ -d src && -d app && -f app/AppKernel.php ]]; then + local -a all=(src/**/*.php(N)) + local -a code=(${(@)all##*Tests*}) + (( $#code )) || return + _p9k_build_test_stats "$0" "$#code" "$(($#all - $#code))" "SF2" 'TEST_ICON' + fi +} + +################################################################ +# Segment to display Symfony2-Version +prompt_symfony2_version() { + if [[ -r app/bootstrap.php.cache ]]; then + local v="${$(grep -F " VERSION " app/bootstrap.php.cache 2>/dev/null)//[![:digit:].]}" + _p9k_prompt_segment "$0" "grey35" "$_p9k_color1" 'SYMFONY_ICON' 0 '' "${v//\%/%%}" + fi +} + +################################################################ +# Show a ratio of tests vs code +_p9k_build_test_stats() { + local code_amount="$2" + local tests_amount="$3" + local headline="$4" + + (( code_amount > 0 )) || return + local -F 2 ratio=$(( 100. * tests_amount / code_amount )) + + (( ratio >= 75 )) && _p9k_prompt_segment "${1}_GOOD" "cyan" "$_p9k_color1" "$5" 0 '' "$headline: $ratio%%" + (( ratio >= 50 && ratio < 75 )) && _p9k_prompt_segment "$1_AVG" "yellow" "$_p9k_color1" "$5" 0 '' "$headline: $ratio%%" + (( ratio < 50 )) && _p9k_prompt_segment "$1_BAD" "red" "$_p9k_color1" "$5" 0 '' "$headline: $ratio%%" +} + +################################################################ +# System time +prompt_time() { + if (( _POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME )); then + _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' "$_POWERLEVEL9K_TIME_FORMAT" + else + if [[ $_p9k__refresh_reason == precmd ]]; then + if [[ $+__p9k_instant_prompt_active == 1 && $__p9k_instant_prompt_time_format == $_POWERLEVEL9K_TIME_FORMAT ]]; then + _p9k__time=${__p9k_instant_prompt_time//\%/%%} + else + _p9k__time=${${(%)_POWERLEVEL9K_TIME_FORMAT}//\%/%%} + fi + fi + if (( _POWERLEVEL9K_TIME_UPDATE_ON_COMMAND )); then + _p9k_escape $_p9k__time + local t=$_p9k__ret + _p9k_escape $_POWERLEVEL9K_TIME_FORMAT + _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 1 '' \ + "\${_p9k__line_finished-$t}\${_p9k__line_finished+$_p9k__ret}" + else + _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' $_p9k__time + fi + fi +} + +instant_prompt_time() { + _p9k_escape $_POWERLEVEL9K_TIME_FORMAT + local stash='${${__p9k_instant_prompt_time::=${(%)${__p9k_instant_prompt_time_format::='$_p9k__ret'}}}+}' + _p9k_escape $_POWERLEVEL9K_TIME_FORMAT + _p9k_prompt_segment prompt_time "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 1 '' $stash$_p9k__ret +} + +_p9k_prompt_time_init() { + (( _POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME )) || return + _p9k__async_segments_compute+='_p9k_worker_invoke time _p9k_prompt_time_compute' +} + +_p9k_prompt_time_compute() { + _p9k_worker_async _p9k_prompt_time_async _p9k_prompt_time_sync +} + +_p9k_prompt_time_async() { + sleep 1 || true +} + +_p9k_prompt_time_sync() { + _p9k_worker_reply '_p9k_worker_invoke _p9k_prompt_time_compute _p9k_prompt_time_compute; reset=1' +} + +################################################################ +# System date +prompt_date() { + if [[ $_p9k__refresh_reason == precmd ]]; then + if [[ $+__p9k_instant_prompt_active == 1 && $__p9k_instant_prompt_date_format == $_POWERLEVEL9K_DATE_FORMAT ]]; then + _p9k__date=${__p9k_instant_prompt_date//\%/%%} + else + _p9k__date=${${(%)_POWERLEVEL9K_DATE_FORMAT}//\%/%%} + fi + fi + _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "DATE_ICON" 0 '' "$_p9k__date" +} + +instant_prompt_date() { + _p9k_escape $_POWERLEVEL9K_DATE_FORMAT + local stash='${${__p9k_instant_prompt_date::=${(%)${__p9k_instant_prompt_date_format::='$_p9k__ret'}}}+}' + _p9k_escape $_POWERLEVEL9K_DATE_FORMAT + _p9k_prompt_segment prompt_date "$_p9k_color2" "$_p9k_color1" "DATE_ICON" 1 '' $stash$_p9k__ret +} + +################################################################ +# todo.sh: shows the number of tasks in your todo.sh file +prompt_todo() { + unset P9K_TODO_TOTAL_TASK_COUNT P9K_TODO_FILTERED_TASK_COUNT + [[ -r $_p9k__todo_file && -x $_p9k__todo_command ]] || return + if ! _p9k_cache_stat_get $0 $_p9k__todo_file; then + local count="$($_p9k__todo_command -p ls | command tail -1)" + if [[ $count == (#b)'TODO: '([[:digit:]]##)' of '([[:digit:]]##)' '* ]]; then + _p9k_cache_stat_set 1 $match[1] $match[2] + else + _p9k_cache_stat_set 0 + fi + fi + (( $_p9k__cache_val[1] )) || return + typeset -gi P9K_TODO_FILTERED_TASK_COUNT=$_p9k__cache_val[2] + typeset -gi P9K_TODO_TOTAL_TASK_COUNT=$_p9k__cache_val[3] + if (( (P9K_TODO_TOTAL_TASK_COUNT || !_POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL) && + (P9K_TODO_FILTERED_TASK_COUNT || !_POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED) )); then + if (( P9K_TODO_TOTAL_TASK_COUNT == P9K_TODO_FILTERED_TASK_COUNT )); then + local text=$P9K_TODO_TOTAL_TASK_COUNT + else + local text="$P9K_TODO_FILTERED_TASK_COUNT/$P9K_TODO_TOTAL_TASK_COUNT" + fi + _p9k_prompt_segment "$0" "grey50" "$_p9k_color1" 'TODO_ICON' 0 '' "$text" + fi +} + +_p9k_prompt_todo_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$_p9k__todo_file' +} + +################################################################ +# VCS segment: shows the state of your repository, if you are in a folder under +# version control + +# The vcs segment can have 4 different states - defaults to 'CLEAN'. +typeset -gA __p9k_vcs_states=( + 'CLEAN' '2' + 'MODIFIED' '3' + 'UNTRACKED' '2' + 'LOADING' '8' + 'CONFLICTED' '3' +) + +function +vi-git-untracked() { + [[ -z "${vcs_comm[gitdir]}" || "${vcs_comm[gitdir]}" == "." ]] && return + + # get the root for the current repo or submodule + local repoTopLevel="$(git rev-parse --show-toplevel 2> /dev/null)" + # dump out if we're outside a git repository (which includes being in the .git folder) + [[ $? != 0 || -z $repoTopLevel ]] && return + + local untrackedFiles="$(git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)" + + if [[ -z $untrackedFiles && $_POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY == 1 ]]; then + untrackedFiles+="$(git submodule foreach --quiet --recursive 'git ls-files --others --exclude-standard' 2> /dev/null)" + fi + + [[ -z $untrackedFiles ]] && return + + hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')" + VCS_WORKDIR_HALF_DIRTY=true +} + +function +vi-git-aheadbehind() { + local ahead behind + local -a gitstatus + + # for git prior to 1.7 + # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l) + ahead="$(git rev-list --count "${hook_com[branch]}"@{upstream}..HEAD 2>/dev/null)" + (( ahead )) && gitstatus+=( " $(print_icon 'VCS_OUTGOING_CHANGES_ICON')${ahead// /}" ) + + # for git prior to 1.7 + # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l) + behind="$(git rev-list --count HEAD.."${hook_com[branch]}"@{upstream} 2>/dev/null)" + (( behind )) && gitstatus+=( " $(print_icon 'VCS_INCOMING_CHANGES_ICON')${behind// /}" ) + + hook_com[misc]+=${(j::)gitstatus} +} + +function +vi-git-remotebranch() { + local remote + local branch_name="${hook_com[branch]}" + + # Are we on a remote-tracking branch? + remote="$(git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)" + remote=${remote/refs\/(remotes|heads)\/} + + if (( $+_POWERLEVEL9K_VCS_SHORTEN_LENGTH && $+_POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH )); then + if (( ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_LENGTH )); then + case $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY in + truncate_middle) + hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}${branch_name: -$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}" + ;; + truncate_from_right) + hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}" + ;; + esac + fi + fi + + if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then + hook_com[branch]="${hook_com[branch]}" + else + hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}" + fi + # Always show the remote + #if [[ -n ${remote} ]] ; then + # Only show the remote if it differs from the local + if [[ -n ${remote} ]] && [[ "${remote#*/}" != "${branch_name}" ]] ; then + hook_com[branch]+="$(print_icon 'VCS_REMOTE_BRANCH_ICON')${remote// /}" + fi +} + +function +vi-git-tagname() { + if (( !_POWERLEVEL9K_VCS_HIDE_TAGS )); then + # If we are on a tag, append the tagname to the current branch string. + local tag + tag="$(git describe --tags --exact-match HEAD 2>/dev/null)" + + if [[ -n "${tag}" ]] ; then + # There is a tag that points to our current commit. Need to determine if we + # are also on a branch, or are in a DETACHED_HEAD state. + if [[ -z "$(git symbolic-ref HEAD 2>/dev/null)" ]]; then + # DETACHED_HEAD state. We want to append the tag name to the commit hash + # and print it. Unfortunately, `vcs_info` blows away the hash when a tag + # exists, so we have to manually retrieve it and clobber the branch + # string. + local revision + revision="$(git rev-list -n 1 --abbrev-commit --abbrev=${_POWERLEVEL9K_CHANGESET_HASH_LENGTH} HEAD)" + if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then + hook_com[branch]="${revision} $(print_icon 'VCS_TAG_ICON')${tag}" + else + hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${revision} $(print_icon 'VCS_TAG_ICON')${tag}" + fi + else + # We are on both a tag and a branch; print both by appending the tag name. + hook_com[branch]+=" $(print_icon 'VCS_TAG_ICON')${tag}" + fi + fi + fi +} + +# Show count of stashed changes +# Port from https://github.com/whiteinge/dotfiles/blob/5dfd08d30f7f2749cfc60bc55564c6ea239624d9/.zsh_shouse_prompt#L268 +function +vi-git-stash() { + if [[ -s "${vcs_comm[gitdir]}/logs/refs/stash" ]] ; then + local -a stashes=( "${(@f)"$(<${vcs_comm[gitdir]}/logs/refs/stash)"}" ) + hook_com[misc]+=" $(print_icon 'VCS_STASH_ICON')${#stashes}" + fi +} + +function +vi-hg-bookmarks() { + if [[ -n "${hgbmarks[@]}" ]]; then + hook_com[hg-bookmark-string]=" $(print_icon 'VCS_BOOKMARK_ICON')${hgbmarks[@]}" + + # To signal that we want to use the sting we just generated, set the special + # variable `ret' to something other than the default zero: + ret=1 + return 0 + fi +} + +function +vi-vcs-detect-changes() { + if [[ "${hook_com[vcs]}" == "git" ]]; then + + local remote="$(git ls-remote --get-url 2> /dev/null)" + if [[ "$remote" =~ "github" ]] then + vcs_visual_identifier='VCS_GIT_GITHUB_ICON' + elif [[ "$remote" =~ "bitbucket" ]] then + vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON' + elif [[ "$remote" =~ "stash" ]] then + vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON' + elif [[ "$remote" =~ "gitlab" ]] then + vcs_visual_identifier='VCS_GIT_GITLAB_ICON' + else + vcs_visual_identifier='VCS_GIT_ICON' + fi + + elif [[ "${hook_com[vcs]}" == "hg" ]]; then + vcs_visual_identifier='VCS_HG_ICON' + elif [[ "${hook_com[vcs]}" == "svn" ]]; then + vcs_visual_identifier='VCS_SVN_ICON' + fi + + if [[ -n "${hook_com[staged]}" ]] || [[ -n "${hook_com[unstaged]}" ]]; then + VCS_WORKDIR_DIRTY=true + else + VCS_WORKDIR_DIRTY=false + fi +} + +function +vi-svn-detect-changes() { + local svn_status="$(svn status)" + if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then + hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')" + VCS_WORKDIR_HALF_DIRTY=true + fi + if [[ -n "$(echo "$svn_status" | \grep \^\M)" ]]; then + hook_com[unstaged]+=" $(print_icon 'VCS_UNSTAGED_ICON')" + VCS_WORKDIR_DIRTY=true + fi + if [[ -n "$(echo "$svn_status" | \grep \^\A)" ]]; then + hook_com[staged]+=" $(print_icon 'VCS_STAGED_ICON')" + VCS_WORKDIR_DIRTY=true + fi +} + +_p9k_vcs_info_init() { + autoload -Uz vcs_info + + local prefix='' + if (( _POWERLEVEL9K_SHOW_CHANGESET )); then + _p9k_get_icon '' VCS_COMMIT_ICON + prefix="$_p9k__ret%0.${_POWERLEVEL9K_CHANGESET_HASH_LENGTH}i " + fi + + zstyle ':vcs_info:*' check-for-changes true + + zstyle ':vcs_info:*' formats "$prefix%b%c%u%m" + zstyle ':vcs_info:*' actionformats "%b %F{$_POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}| %a%f" + _p9k_get_icon '' VCS_STAGED_ICON + zstyle ':vcs_info:*' stagedstr " $_p9k__ret" + _p9k_get_icon '' VCS_UNSTAGED_ICON + zstyle ':vcs_info:*' unstagedstr " $_p9k__ret" + zstyle ':vcs_info:git*+set-message:*' hooks $_POWERLEVEL9K_VCS_GIT_HOOKS + zstyle ':vcs_info:hg*+set-message:*' hooks $_POWERLEVEL9K_VCS_HG_HOOKS + zstyle ':vcs_info:svn*+set-message:*' hooks $_POWERLEVEL9K_VCS_SVN_HOOKS + + # For Hg, only show the branch name + if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then + zstyle ':vcs_info:hg*:*' branchformat "%b" + else + _p9k_get_icon '' VCS_BRANCH_ICON + zstyle ':vcs_info:hg*:*' branchformat "$_p9k__ret%b" + fi + # The `get-revision` function must be turned on for dirty-check to work for Hg + zstyle ':vcs_info:hg*:*' get-revision true + zstyle ':vcs_info:hg*:*' get-bookmarks true + zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks + + # TODO: fix the %b (branch) format for svn. Using %b breaks color-encoding of the foreground + # for the rest of the powerline. + zstyle ':vcs_info:svn*:*' formats "$prefix%c%u" + zstyle ':vcs_info:svn*:*' actionformats "$prefix%c%u %F{$_POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}| %a%f" + + if (( _POWERLEVEL9K_SHOW_CHANGESET )); then + zstyle ':vcs_info:*' get-revision true + else + zstyle ':vcs_info:*' get-revision false + fi +} + +function _p9k_vcs_status_save() { + local z=$'\0' + _p9k__gitstatus_last[${${_p9k__git_dir:+GIT_DIR:$_p9k__git_dir}:-$VCS_STATUS_WORKDIR}]=\ +$VCS_STATUS_COMMIT$z$VCS_STATUS_LOCAL_BRANCH$z$VCS_STATUS_REMOTE_BRANCH$z$VCS_STATUS_REMOTE_NAME$z\ +$VCS_STATUS_REMOTE_URL$z$VCS_STATUS_ACTION$z$VCS_STATUS_INDEX_SIZE$z$VCS_STATUS_NUM_STAGED$z\ +$VCS_STATUS_NUM_UNSTAGED$z$VCS_STATUS_NUM_CONFLICTED$z$VCS_STATUS_NUM_UNTRACKED$z\ +$VCS_STATUS_HAS_STAGED$z$VCS_STATUS_HAS_UNSTAGED$z$VCS_STATUS_HAS_CONFLICTED$z\ +$VCS_STATUS_HAS_UNTRACKED$z$VCS_STATUS_COMMITS_AHEAD$z$VCS_STATUS_COMMITS_BEHIND$z\ +$VCS_STATUS_STASHES$z$VCS_STATUS_TAG$z$VCS_STATUS_NUM_UNSTAGED_DELETED$z\ +$VCS_STATUS_NUM_STAGED_NEW$z$VCS_STATUS_NUM_STAGED_DELETED$z$VCS_STATUS_PUSH_REMOTE_NAME$z\ +$VCS_STATUS_PUSH_REMOTE_URL$z$VCS_STATUS_PUSH_COMMITS_AHEAD$z$VCS_STATUS_PUSH_COMMITS_BEHIND$z\ +$VCS_STATUS_NUM_SKIP_WORKTREE$z$VCS_STATUS_NUM_ASSUME_UNCHANGED +} + +function _p9k_vcs_status_restore() { + for VCS_STATUS_COMMIT VCS_STATUS_LOCAL_BRANCH VCS_STATUS_REMOTE_BRANCH VCS_STATUS_REMOTE_NAME \ + VCS_STATUS_REMOTE_URL VCS_STATUS_ACTION VCS_STATUS_INDEX_SIZE VCS_STATUS_NUM_STAGED \ + VCS_STATUS_NUM_UNSTAGED VCS_STATUS_NUM_CONFLICTED VCS_STATUS_NUM_UNTRACKED \ + VCS_STATUS_HAS_STAGED VCS_STATUS_HAS_UNSTAGED VCS_STATUS_HAS_CONFLICTED \ + VCS_STATUS_HAS_UNTRACKED VCS_STATUS_COMMITS_AHEAD VCS_STATUS_COMMITS_BEHIND \ + VCS_STATUS_STASHES VCS_STATUS_TAG VCS_STATUS_NUM_UNSTAGED_DELETED VCS_STATUS_NUM_STAGED_NEW \ + VCS_STATUS_NUM_STAGED_DELETED VCS_STATUS_PUSH_REMOTE_NAME VCS_STATUS_PUSH_REMOTE_URL \ + VCS_STATUS_PUSH_COMMITS_AHEAD VCS_STATUS_PUSH_COMMITS_BEHIND VCS_STATUS_NUM_SKIP_WORKTREE \ + VCS_STATUS_NUM_ASSUME_UNCHANGED + in "${(@0)1}"; do done +} + +function _p9k_vcs_status_for_dir() { + if [[ -n $GIT_DIR ]]; then + _p9k__ret=$_p9k__gitstatus_last[GIT_DIR:$GIT_DIR] + [[ -n $_p9k__ret ]] + else + local dir=$_p9k__cwd_a + while true; do + _p9k__ret=$_p9k__gitstatus_last[$dir] + [[ -n $_p9k__ret ]] && return 0 + [[ $dir == (/|.) ]] && return 1 + dir=${dir:h} + done + fi +} + +function _p9k_vcs_status_purge() { + if [[ -n $_p9k__git_dir ]]; then + _p9k__gitstatus_last[GIT_DIR:$_p9k__git_dir]="" + else + local dir=$1 + while true; do + # unset doesn't work if $dir contains weird shit + _p9k__gitstatus_last[$dir]="" + _p9k_git_slow[$dir]="" + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi +} + +function _p9k_vcs_icon() { + case "$VCS_STATUS_REMOTE_URL" in + *github*) _p9k__ret=VCS_GIT_GITHUB_ICON;; + *bitbucket*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;; + *stash*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;; + *gitlab*) _p9k__ret=VCS_GIT_GITLAB_ICON;; + *) _p9k__ret=VCS_GIT_ICON;; + esac +} + +function _p9k_vcs_render() { + local state + + if (( $+_p9k__gitstatus_next_dir )); then + if _p9k_vcs_status_for_dir; then + _p9k_vcs_status_restore $_p9k__ret + state=LOADING + else + _p9k_prompt_segment prompt_vcs_LOADING "${__p9k_vcs_states[LOADING]}" "$_p9k_color1" VCS_LOADING_ICON 0 '' "$_POWERLEVEL9K_VCS_LOADING_TEXT" + return 0 + fi + elif [[ $VCS_STATUS_RESULT != ok-* ]]; then + return 1 + fi + + if (( _POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING )); then + if [[ -z $state ]]; then + if [[ $VCS_STATUS_HAS_CONFLICTED == 1 && $_POWERLEVEL9K_VCS_CONFLICTED_STATE == 1 ]]; then + state=CONFLICTED + elif [[ $VCS_STATUS_HAS_STAGED != 0 || $VCS_STATUS_HAS_UNSTAGED != 0 ]]; then + state=MODIFIED + elif [[ $VCS_STATUS_HAS_UNTRACKED != 0 ]]; then + state=UNTRACKED + else + state=CLEAN + fi + fi + _p9k_vcs_icon + _p9k_prompt_segment prompt_vcs_$state "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$_p9k__ret" 0 '' "" + return 0 + fi + + (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-untracked]} )) || VCS_STATUS_HAS_UNTRACKED=0 + (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-aheadbehind]} )) || { VCS_STATUS_COMMITS_AHEAD=0 && VCS_STATUS_COMMITS_BEHIND=0 } + (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-stash]} )) || VCS_STATUS_STASHES=0 + (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-remotebranch]} )) || VCS_STATUS_REMOTE_BRANCH="" + (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-tagname]} )) || VCS_STATUS_TAG="" + + (( _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM >= 0 && VCS_STATUS_COMMITS_AHEAD > _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM )) && + VCS_STATUS_COMMITS_AHEAD=$_POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM + + (( _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM >= 0 && VCS_STATUS_COMMITS_BEHIND > _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM )) && + VCS_STATUS_COMMITS_BEHIND=$_POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM + + local -a cache_key=( + "$VCS_STATUS_LOCAL_BRANCH" + "$VCS_STATUS_REMOTE_BRANCH" + "$VCS_STATUS_REMOTE_URL" + "$VCS_STATUS_ACTION" + "$VCS_STATUS_NUM_STAGED" + "$VCS_STATUS_NUM_UNSTAGED" + "$VCS_STATUS_NUM_UNTRACKED" + "$VCS_STATUS_HAS_CONFLICTED" + "$VCS_STATUS_HAS_STAGED" + "$VCS_STATUS_HAS_UNSTAGED" + "$VCS_STATUS_HAS_UNTRACKED" + "$VCS_STATUS_COMMITS_AHEAD" + "$VCS_STATUS_COMMITS_BEHIND" + "$VCS_STATUS_STASHES" + "$VCS_STATUS_TAG" + "$VCS_STATUS_NUM_UNSTAGED_DELETED" + ) + if [[ $_POWERLEVEL9K_SHOW_CHANGESET == 1 || -z $VCS_STATUS_LOCAL_BRANCH ]]; then + cache_key+=$VCS_STATUS_COMMIT + fi + + if ! _p9k_cache_ephemeral_get "$state" "${(@)cache_key}"; then + local icon + local content + + if (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)vcs-detect-changes]} )); then + if [[ $VCS_STATUS_HAS_CONFLICTED == 1 && $_POWERLEVEL9K_VCS_CONFLICTED_STATE == 1 ]]; then + : ${state:=CONFLICTED} + elif [[ $VCS_STATUS_HAS_STAGED != 0 || $VCS_STATUS_HAS_UNSTAGED != 0 ]]; then + : ${state:=MODIFIED} + elif [[ $VCS_STATUS_HAS_UNTRACKED != 0 ]]; then + : ${state:=UNTRACKED} + fi + + # It's weird that removing vcs-detect-changes from POWERLEVEL9K_VCS_GIT_HOOKS gets rid + # of the GIT icon. That's what vcs_info does, so we do the same in the name of compatiblity. + _p9k_vcs_icon + icon=$_p9k__ret + fi + + : ${state:=CLEAN} + + function _$0_fmt() { + _p9k_vcs_style $state $1 + content+="$_p9k__ret$2" + } + + local ws + if [[ $_POWERLEVEL9K_SHOW_CHANGESET == 1 || -z $VCS_STATUS_LOCAL_BRANCH ]]; then + _p9k_get_icon prompt_vcs_$state VCS_COMMIT_ICON + _$0_fmt COMMIT "$_p9k__ret${${VCS_STATUS_COMMIT:0:$_POWERLEVEL9K_CHANGESET_HASH_LENGTH}:-HEAD}" + ws=' ' + fi + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=$ws + if (( !_POWERLEVEL9K_HIDE_BRANCH_ICON )); then + _p9k_get_icon prompt_vcs_$state VCS_BRANCH_ICON + branch+=$_p9k__ret + fi + if (( $+_POWERLEVEL9K_VCS_SHORTEN_LENGTH && $+_POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && + $#VCS_STATUS_LOCAL_BRANCH > _POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && + $#VCS_STATUS_LOCAL_BRANCH > _POWERLEVEL9K_VCS_SHORTEN_LENGTH )) && + [[ $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY == (truncate_middle|truncate_from_right) ]]; then + branch+=${VCS_STATUS_LOCAL_BRANCH[1,_POWERLEVEL9K_VCS_SHORTEN_LENGTH]//\%/%%}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER} + if [[ $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY == truncate_middle ]]; then + _p9k_vcs_style $state BRANCH + branch+=${_p9k__ret}${VCS_STATUS_LOCAL_BRANCH[-_POWERLEVEL9K_VCS_SHORTEN_LENGTH,-1]//\%/%%} + fi + else + branch+=${VCS_STATUS_LOCAL_BRANCH//\%/%%} + fi + _$0_fmt BRANCH $branch + fi + + if [[ $_POWERLEVEL9K_VCS_HIDE_TAGS == 0 && -n $VCS_STATUS_TAG ]]; then + _p9k_get_icon prompt_vcs_$state VCS_TAG_ICON + _$0_fmt TAG " $_p9k__ret${VCS_STATUS_TAG//\%/%%}" + fi + + if [[ -n $VCS_STATUS_ACTION ]]; then + _$0_fmt ACTION " | ${VCS_STATUS_ACTION//\%/%%}" + else + if [[ -n $VCS_STATUS_REMOTE_BRANCH && + $VCS_STATUS_LOCAL_BRANCH != $VCS_STATUS_REMOTE_BRANCH ]]; then + _p9k_get_icon prompt_vcs_$state VCS_REMOTE_BRANCH_ICON + _$0_fmt REMOTE_BRANCH " $_p9k__ret${VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + if [[ $VCS_STATUS_HAS_STAGED == 1 || $VCS_STATUS_HAS_UNSTAGED == 1 || $VCS_STATUS_HAS_UNTRACKED == 1 ]]; then + _p9k_get_icon prompt_vcs_$state VCS_DIRTY_ICON + _$0_fmt DIRTY "$_p9k__ret" + if [[ $VCS_STATUS_HAS_STAGED == 1 ]]; then + _p9k_get_icon prompt_vcs_$state VCS_STAGED_ICON + (( _POWERLEVEL9K_VCS_STAGED_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_NUM_STAGED + _$0_fmt STAGED " $_p9k__ret" + fi + if [[ $VCS_STATUS_HAS_UNSTAGED == 1 ]]; then + _p9k_get_icon prompt_vcs_$state VCS_UNSTAGED_ICON + (( _POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_NUM_UNSTAGED + _$0_fmt UNSTAGED " $_p9k__ret" + fi + if [[ $VCS_STATUS_HAS_UNTRACKED == 1 ]]; then + _p9k_get_icon prompt_vcs_$state VCS_UNTRACKED_ICON + (( _POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_NUM_UNTRACKED + _$0_fmt UNTRACKED " $_p9k__ret" + fi + fi + if [[ $VCS_STATUS_COMMITS_BEHIND -gt 0 ]]; then + _p9k_get_icon prompt_vcs_$state VCS_INCOMING_CHANGES_ICON + (( _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_COMMITS_BEHIND + _$0_fmt INCOMING_CHANGES " $_p9k__ret" + fi + if [[ $VCS_STATUS_COMMITS_AHEAD -gt 0 ]]; then + _p9k_get_icon prompt_vcs_$state VCS_OUTGOING_CHANGES_ICON + (( _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_COMMITS_AHEAD + _$0_fmt OUTGOING_CHANGES " $_p9k__ret" + fi + if [[ $VCS_STATUS_STASHES -gt 0 ]]; then + _p9k_get_icon prompt_vcs_$state VCS_STASH_ICON + _$0_fmt STASH " $_p9k__ret$VCS_STATUS_STASHES" + fi + fi + + _p9k_cache_ephemeral_set "prompt_vcs_$state" "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$icon" 0 '' "$content" + fi + + _p9k_prompt_segment "$_p9k__cache_val[@]" + return 0 +} + +function _p9k_maybe_ignore_git_repo() { + if [[ $VCS_STATUS_RESULT == ok-* && $VCS_STATUS_WORKDIR == $~_POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN ]]; then + VCS_STATUS_RESULT=norepo${VCS_STATUS_RESULT#ok} + fi +} + +function _p9k_vcs_resume() { + eval "$__p9k_intro" + + _p9k_maybe_ignore_git_repo + + if [[ $VCS_STATUS_RESULT == ok-async ]]; then + local latency=$((EPOCHREALTIME - _p9k__gitstatus_start_time)) + if (( latency > _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then + _p9k_git_slow[${${_p9k__git_dir:+GIT_DIR:$_p9k__git_dir}:-$VCS_STATUS_WORKDIR}]=1 + elif (( $1 && latency < 0.8 * _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then # 0.8 to avoid flip-flopping + _p9k_git_slow[${${_p9k__git_dir:+GIT_DIR:$_p9k__git_dir}:-$VCS_STATUS_WORKDIR}]=0 + fi + _p9k_vcs_status_save + fi + + if [[ -z $_p9k__gitstatus_next_dir ]]; then + unset _p9k__gitstatus_next_dir + case $VCS_STATUS_RESULT in + norepo-async) (( $1 )) && _p9k_vcs_status_purge $_p9k__cwd_a;; + ok-async) (( $1 )) || _p9k__gitstatus_next_dir=$_p9k__cwd_a;; + esac + fi + + if [[ -n $_p9k__gitstatus_next_dir ]]; then + _p9k__git_dir=$GIT_DIR + if ! gitstatus_query_p9k_ -d $_p9k__gitstatus_next_dir -t 0 -c '_p9k_vcs_resume 1' POWERLEVEL9K; then + unset _p9k__gitstatus_next_dir + unset VCS_STATUS_RESULT + else + _p9k_maybe_ignore_git_repo + case $VCS_STATUS_RESULT in + tout) _p9k__gitstatus_next_dir=''; _p9k__gitstatus_start_time=$EPOCHREALTIME;; + norepo-sync) _p9k_vcs_status_purge $_p9k__gitstatus_next_dir; unset _p9k__gitstatus_next_dir;; + ok-sync) _p9k_vcs_status_save; unset _p9k__gitstatus_next_dir;; + esac + fi + fi + + if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then + local _p9k__prompt _p9k__prompt_side=$_p9k_vcs_side _p9k__segment_name=vcs + local -i _p9k__has_upglob _p9k__segment_index=_p9k_vcs_index _p9k__line_index=_p9k_vcs_line_index + _p9k_vcs_render + typeset -g _p9k__vcs=$_p9k__prompt + else + _p9k__refresh_reason=gitstatus + _p9k_set_prompt + _p9k__refresh_reason='' + fi + _p9k_reset_prompt +} + +function _p9k_vcs_gitstatus() { + if [[ $_p9k__refresh_reason == precmd ]] && (( !_p9k__vcs_called )); then + typeset -gi _p9k__vcs_called=1 + if (( $+_p9k__gitstatus_next_dir )); then + _p9k__gitstatus_next_dir=$_p9k__cwd_a + else + local -F timeout=_POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS + if ! _p9k_vcs_status_for_dir; then + _p9k__git_dir=$GIT_DIR + gitstatus_query_p9k_ -d $_p9k__cwd_a -t $timeout -p -c '_p9k_vcs_resume 0' POWERLEVEL9K || return 1 + _p9k_maybe_ignore_git_repo + case $VCS_STATUS_RESULT in + tout) _p9k__gitstatus_next_dir=''; _p9k__gitstatus_start_time=$EPOCHREALTIME; return 0;; + norepo-sync) return 0;; + ok-sync) _p9k_vcs_status_save;; + esac + else + if [[ -n $GIT_DIR ]]; then + [[ $_p9k_git_slow[GIT_DIR:$GIT_DIR] == 1 ]] && timeout=0 + else + local dir=$_p9k__cwd_a + while true; do + case $_p9k_git_slow[$dir] in + "") [[ $dir == (/|.) ]] && break; dir=${dir:h};; + 0) break;; + 1) timeout=0; break;; + esac + done + fi + fi + (( _p9k__prompt_idx == 1 )) && timeout=0 + _p9k__git_dir=$GIT_DIR + if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then + if ! gitstatus_query_p9k_ -d $_p9k__cwd_a -t 0 -c '_p9k_vcs_resume 1' POWERLEVEL9K; then + unset VCS_STATUS_RESULT + return 1 + fi + typeset -gF _p9k__vcs_timeout=timeout + _p9k__gitstatus_next_dir='' + _p9k__gitstatus_start_time=$EPOCHREALTIME + return 0 + fi + if ! gitstatus_query_p9k_ -d $_p9k__cwd_a -t $timeout -c '_p9k_vcs_resume 1' POWERLEVEL9K; then + unset VCS_STATUS_RESULT + return 1 + fi + _p9k_maybe_ignore_git_repo + case $VCS_STATUS_RESULT in + tout) _p9k__gitstatus_next_dir=''; _p9k__gitstatus_start_time=$EPOCHREALTIME;; + norepo-sync) _p9k_vcs_status_purge $_p9k__cwd_a;; + ok-sync) _p9k_vcs_status_save;; + esac + fi + fi + return 0 +} + +################################################################ +# Segment to show VCS information + +prompt_vcs() { + if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then + _p9k__prompt+='${(e)_p9k__vcs}' + return + fi + + local -a backends=($_POWERLEVEL9K_VCS_BACKENDS) + if (( ${backends[(I)git]} && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) && _p9k_vcs_gitstatus; then + _p9k_vcs_render && return + backends=(${backends:#git}) + fi + if (( $#backends )); then + VCS_WORKDIR_DIRTY=false + VCS_WORKDIR_HALF_DIRTY=false + local current_state="" + # Actually invoke vcs_info manually to gather all information. + zstyle ':vcs_info:*' enable ${backends} + vcs_info + local vcs_prompt="${vcs_info_msg_0_}" + if [[ -n "$vcs_prompt" ]]; then + if [[ "$VCS_WORKDIR_DIRTY" == true ]]; then + # $vcs_visual_identifier gets set in +vi-vcs-detect-changes in functions/vcs.zsh, + # as we have there access to vcs_info internal hooks. + current_state='MODIFIED' + else + if [[ "$VCS_WORKDIR_HALF_DIRTY" == true ]]; then + current_state='UNTRACKED' + else + current_state='CLEAN' + fi + fi + _p9k_prompt_segment "${0}_${${(U)current_state}//İ/I}" "${__p9k_vcs_states[$current_state]}" "$_p9k_color1" "$vcs_visual_identifier" 0 '' "$vcs_prompt" + fi + fi +} + +################################################################ +# Vi Mode: show editing mode (NORMAL|INSERT|VISUAL) +prompt_vi_mode() { + local -i len=$#_p9k__prompt _p9k__has_upglob + if (( __p9k_sh_glob )); then + if (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )); then + if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then + _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" + fi + _p9k_prompt_segment $0_OVERWRITE "$_p9k_color1" blue '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' "$_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING" + else + if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then + _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" + fi + fi + + if (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )); then + _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" + _p9k_prompt_segment $0_VISUAL "$_p9k_color1" white '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' "$_POWERLEVEL9K_VI_VISUAL_MODE_STRING" + else + _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${$((! ${#${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}})):#0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" + fi + else + if (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )); then + if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then + _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" + fi + _p9k_prompt_segment $0_OVERWRITE "$_p9k_color1" blue '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' "$_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING" + else + if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then + _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" + fi + fi + + if (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )); then + _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" + _p9k_prompt_segment $0_VISUAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' "$_POWERLEVEL9K_VI_VISUAL_MODE_STRING" + else + _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)_p9k__keymap:#(vicmd|vivis|vivli)}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" + fi + fi + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +instant_prompt_vi_mode() { + if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then + _p9k_prompt_segment prompt_vi_mode_INSERT "$_p9k_color1" blue '' 0 '' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" + fi +} + +################################################################ +# Virtualenv: current working virtualenv +# More information on virtualenv (Python): +# https://virtualenv.pypa.io/en/latest/ +prompt_virtualenv() { + local msg='' + if (( _POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION )) && _p9k_python_version; then + msg="${_p9k__ret//\%/%%} " + fi + local v=${VIRTUAL_ENV:t} + if [[ $VIRTUAL_ENV_PROMPT == '('?*') ' && $VIRTUAL_ENV_PROMPT != "($v) " ]]; then + v=$VIRTUAL_ENV_PROMPT[2,-3] + elif [[ $v == $~_POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES ]]; then + v=${VIRTUAL_ENV:h:t} + fi + msg+="$_POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER${v//\%/%%}$_POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER" + case $_POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV in + false) + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '${(M)${#P9K_PYENV_PYTHON_VERSION}:#0}' "$msg" + ;; + if-different) + _p9k_escape $v + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '${${:-'$_p9k__ret'}:#$_p9k__pyenv_version}' "$msg" + ;; + *) + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg" + ;; + esac +} + +_p9k_prompt_virtualenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$VIRTUAL_ENV' +} + +# _p9k_read_pyenv_like_version_file [prefix] +function _p9k_read_pyenv_like_version_file() { + local -a stat + zstat -A stat +mtime -- $1 2>/dev/null || stat=(-1) + local cached=$_p9k__read_pyenv_like_version_file_cache[$1:$2] + if [[ $cached == $stat[1]:* ]]; then + _p9k__ret=${cached#*:} + else + local fd content + { + { sysopen -r -u fd -- $1 && sysread -i $fd -s 1024 content } 2>/dev/null + } always { + [[ -n $fd ]] && exec {fd}>&- + } + local MATCH + local versions=(${${${${(f)content}/(#m)*/${MATCH[(w)1]}}##\#*}#$2}) + _p9k__ret=${(j.:.)versions} + _p9k__read_pyenv_like_version_file_cache[$1:$2]=$stat[1]:$_p9k__ret + fi + [[ -n $_p9k__ret ]] +} + +function _p9k_pyenv_global_version() { + _p9k_read_pyenv_like_version_file ${PYENV_ROOT:-$HOME/.pyenv}/version python- || _p9k__ret=system +} + +function _p9k_pyenv_compute() { + unset P9K_PYENV_PYTHON_VERSION _p9k__pyenv_version + + local v=${(j.:.)${(@)${(s.:.)PYENV_VERSION}#python-}} + if [[ -n $v ]]; then + (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)shell]} )) || return + else + (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $PYENV_DIR != (|.) ]]; then + [[ $PYENV_DIR == /* ]] && local dir=$PYENV_DIR || local dir="$_p9k__cwd_a/$PYENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_pyenv_like_version_file $dir/.python-version python-; then + (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .python-version -. + local -i idx=$? + if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.python-version python-; then + (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)global]} )) || return + _p9k_pyenv_global_version + fi + v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW )); then + _p9k_pyenv_global_version + [[ $v == $_p9k__ret ]] && return 1 + fi + + if (( !_POWERLEVEL9K_PYENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return 1 + fi + + local versions=${PYENV_ROOT:-$HOME/.pyenv}/versions + versions=${versions:A} + local name version + for name in ${(s.:.)v}; do + version=$versions/$name + version=${version:A} + if [[ $version(#qN/) == (#b)$versions/([^/]##)* ]]; then + typeset -g P9K_PYENV_PYTHON_VERSION=$match[1] + break + fi + done + + typeset -g _p9k__pyenv_version=$v +} + +################################################################ +# Segment to display pyenv information +# https://github.com/pyenv/pyenv#choosing-the-python-version +prompt_pyenv() { + _p9k_pyenv_compute || return + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "${_p9k__pyenv_version//\%/%%}" +} + +_p9k_prompt_pyenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[pyenv]:-${${+functions[pyenv]}:#0}}' +} + +function _p9k_goenv_global_version() { + _p9k_read_pyenv_like_version_file ${GOENV_ROOT:-$HOME/.goenv}/version go- || _p9k__ret=system +} + +################################################################ +# Segment to display goenv information: https://github.com/syndbg/goenv +prompt_goenv() { + local v=${(j.:.)${(@)${(s.:.)GOENV_VERSION}#go-}} + if [[ -n $v ]]; then + (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)shell]} )) || return + else + (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local|global]} )) || return + _p9k__ret= + if [[ $GOENV_DIR != (|.) ]]; then + [[ $GOENV_DIR == /* ]] && local dir=$GOENV_DIR || local dir="$_p9k__cwd_a/$GOENV_DIR" + dir=${dir:A} + if [[ $dir != $_p9k__cwd_a ]]; then + while true; do + if _p9k_read_pyenv_like_version_file $dir/.go-version go-; then + (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return + break + fi + [[ $dir == (/|.) ]] && break + dir=${dir:h} + done + fi + fi + if [[ -z $_p9k__ret ]]; then + _p9k_upglob .go-version -. + local -i idx=$? + if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.go-version go-; then + (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return + else + _p9k__ret= + fi + fi + if [[ -z $_p9k__ret ]]; then + (( _POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)global]} )) || return + _p9k_goenv_global_version + fi + v=$_p9k__ret + fi + + if (( !_POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW )); then + _p9k_goenv_global_version + [[ $v == $_p9k__ret ]] && return + fi + + if (( !_POWERLEVEL9K_GOENV_SHOW_SYSTEM )); then + [[ $v == system ]] && return + fi + + _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'GO_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_goenv_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[goenv]:-${${+functions[goenv]}:#0}}' +} + +################################################################ +# Display openfoam information +prompt_openfoam() { + if [[ -z "$WM_FORK" ]] ; then + _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" '' 0 '' "OF: ${${WM_PROJECT_VERSION:t}//\%/%%}" + else + _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" '' 0 '' "F-X: ${${WM_PROJECT_VERSION:t}//\%/%%}" + fi +} + +_p9k_prompt_openfoam_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$WM_PROJECT_VERSION' +} + +################################################################ +# Segment to display Swift version +prompt_swift_version() { + _p9k_cached_cmd 0 '' swift --version || return + [[ $_p9k__ret == (#b)[^[:digit:]]#([[:digit:].]##)* ]] || return + _p9k_prompt_segment "$0" "magenta" "white" 'SWIFT_ICON' 0 '' "${match[1]//\%/%%}" +} + +_p9k_prompt_swift_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[swift]' +} + +################################################################ +# dir_writable: Display information about the user's permission to write in the current directory +prompt_dir_writable() { + if [[ ! -w "$_p9k__cwd_a" ]]; then + _p9k_prompt_segment "$0_FORBIDDEN" "red" "yellow1" 'LOCK_ICON' 0 '' '' + fi +} + +instant_prompt_dir_writable() { prompt_dir_writable; } + +################################################################ +# Kubernetes Current Context/Namespace +prompt_kubecontext() { + if ! _p9k_cache_stat_get $0 ${(s.:.)${KUBECONFIG:-$HOME/.kube/config}}; then + local name namespace cluster user cloud_name cloud_account cloud_zone cloud_cluster text state + () { + local cfg && cfg=(${(f)"$(kubectl config view -o=yaml 2>/dev/null)"}) || return + local qstr='"*"' + local str='([^"'\''|>]*|'$qstr')' + local ctx=(${(@M)cfg:#current-context: $~str}) + (( $#ctx == 1 )) || return + name=${ctx[1]#current-context: } + local -i pos=${cfg[(i)contexts:]} + { + (( pos <= $#cfg )) || return + shift $pos cfg + pos=${cfg[(i) name: ${(b)name}]} + (( pos <= $#cfg )) || return + (( --pos )) + for ((; pos > 0; --pos)); do + local line=$cfg[pos] + if [[ $line == '- context:' ]]; then + return 0 + elif [[ $line == (#b)' cluster: '($~str) ]]; then + cluster=$match[1] + [[ $cluster == $~qstr ]] && cluster=$cluster[2,-2] + elif [[ $line == (#b)' namespace: '($~str) ]]; then + namespace=$match[1] + [[ $namespace == $~qstr ]] && namespace=$namespace[2,-2] + elif [[ $line == (#b)' user: '($~str) ]]; then + user=$match[1] + [[ $user == $~qstr ]] && user=$user[2,-2] + fi + done + } always { + [[ $name == $~qstr ]] && name=$name[2,-2] + } + } + if [[ -n $name ]]; then + : ${namespace:=default} + # gke_my-account_us-east1-a_cluster-01 + # gke_my-account_us-east1_cluster-01 + if [[ $cluster == (#b)gke_(?*)_(asia|australia|europe|northamerica|southamerica|us)-([a-z]##<->)(-[a-z]|)_(?*) ]]; then + cloud_name=gke + cloud_account=$match[1] + cloud_zone=$match[2]-$match[3]$match[4] + cloud_cluster=$match[5] + if (( ${_POWERLEVEL9K_KUBECONTEXT_SHORTEN[(I)gke]} )); then + text=$cloud_cluster + fi + # arn:aws:eks:us-east-1:123456789012:cluster/cluster-01 + elif [[ $cluster == (#b)arn:aws[[:alnum:]-]#:eks:([[:alnum:]-]##):([[:digit:]]##):cluster/(?*) ]]; then + cloud_name=eks + cloud_zone=$match[1] + cloud_account=$match[2] + cloud_cluster=$match[3] + if (( ${_POWERLEVEL9K_KUBECONTEXT_SHORTEN[(I)eks]} )); then + text=$cloud_cluster + fi + fi + if [[ -z $text ]]; then + text=$name + if [[ $_POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE == 1 || $namespace != (default|$name) ]]; then + text+="/$namespace" + fi + fi + local pat class + for pat class in "${_POWERLEVEL9K_KUBECONTEXT_CLASSES[@]}"; do + if [[ $text == ${~pat} ]]; then + [[ -n $class ]] && state=_${${(U)class}//İ/I} + break + fi + done + fi + _p9k_cache_stat_set "${(g::)name}" "${(g::)namespace}" "${(g::)cluster}" "${(g::)user}" "${(g::)cloud_name}" "${(g::)cloud_account}" "${(g::)cloud_zone}" "${(g::)cloud_cluster}" "${(g::)text}" "$state" + fi + + typeset -g P9K_KUBECONTEXT_NAME=$_p9k__cache_val[1] + typeset -g P9K_KUBECONTEXT_NAMESPACE=$_p9k__cache_val[2] + typeset -g P9K_KUBECONTEXT_CLUSTER=$_p9k__cache_val[3] + typeset -g P9K_KUBECONTEXT_USER=$_p9k__cache_val[4] + typeset -g P9K_KUBECONTEXT_CLOUD_NAME=$_p9k__cache_val[5] + typeset -g P9K_KUBECONTEXT_CLOUD_ACCOUNT=$_p9k__cache_val[6] + typeset -g P9K_KUBECONTEXT_CLOUD_ZONE=$_p9k__cache_val[7] + typeset -g P9K_KUBECONTEXT_CLOUD_CLUSTER=$_p9k__cache_val[8] + [[ -n $_p9k__cache_val[9] ]] || return + _p9k_prompt_segment $0$_p9k__cache_val[10] magenta white KUBERNETES_ICON 0 '' "${_p9k__cache_val[9]//\%/%%}" +} + +_p9k_prompt_kubecontext_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[kubectl]' +} + +################################################################ +# Dropbox status +prompt_dropbox() { + # The first column is just the directory, so cut it + local dropbox_status="$(dropbox-cli filestatus . | cut -d\ -f2-)" + + # Only show if the folder is tracked and dropbox is running + if [[ "$dropbox_status" != 'unwatched' && "$dropbox_status" != "isn't running!" ]]; then + # If "up to date", only show the icon + if [[ "$dropbox_status" =~ 'up to date' ]]; then + dropbox_status="" + fi + + _p9k_prompt_segment "$0" "white" "blue" "DROPBOX_ICON" 0 '' "${dropbox_status//\%/%%}" + fi +} + +_p9k_prompt_dropbox_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[dropbox-cli]' +} + +# print Java version number +prompt_java_version() { + if (( _POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY )); then + _p9k_upglob 'pom.xml|build.gradle.kts|build.sbt|deps.edn|project.clj|build.boot|*.(java|class|jar|gradle|clj|cljc)' -. && return + fi + + local java=$commands[java] + if ! _p9k_cache_stat_get $0 $java ${JAVA_HOME:+$JAVA_HOME/release}; then + local v + v="$(java -fullversion 2>&1)" || v= + v=${${v#*\"}%\"*} + (( _POWERLEVEL9K_JAVA_VERSION_FULL )) || v=${v%%-*} + _p9k_cache_stat_set "${v//\%/%%}" + fi + + [[ -n $_p9k__cache_val[1] ]] || return + _p9k_prompt_segment "$0" "red" "white" "JAVA_ICON" 0 '' $_p9k__cache_val[1] +} + +_p9k_prompt_java_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[java]' +} + +prompt_azure() { + local cfg=${AZURE_CONFIG_DIR:-$HOME/.azure}/azureProfile.json + if ! _p9k_cache_stat_get $0 $cfg; then + local name + if (( $+commands[jq] )) && name="$(jq -r '[.subscriptions[]|select(.isDefault==true)|.name][]|strings' $cfg 2>/dev/null)"; then + name=${name%%$'\n'*} + elif ! name="$(az account show --query name --output tsv 2>/dev/null)"; then + name= + fi + _p9k_cache_stat_set "$name" + fi + local pat class state + for pat class in "${_POWERLEVEL9K_AZURE_CLASSES[@]}"; do + if [[ $name == ${~pat} ]]; then + [[ -n $class ]] && state=_${${(U)class}//İ/I} + break + fi + done + [[ -n $_p9k__cache_val[1] ]] || return + _p9k_prompt_segment "$0$state" "blue" "white" "AZURE_ICON" 0 '' "${_p9k__cache_val[1]//\%/%%}" +} + +_p9k_prompt_azure_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[az]' +} + +prompt_gcloud() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment \ + $0_PARTIAL blue white GCLOUD_ICON 1 \ + '${${(M)${#P9K_GCLOUD_PROJECT_NAME}:#0}:+$P9K_GCLOUD_ACCOUNT$P9K_GCLOUD_PROJECT_ID}' \ + '${P9K_GCLOUD_ACCOUNT//\%/%%}:${P9K_GCLOUD_PROJECT_ID//\%/%%}' + _p9k_prompt_segment \ + $0_COMPLETE blue white GCLOUD_ICON 1 \ + '$P9K_GCLOUD_PROJECT_NAME' \ + '${P9K_GCLOUD_ACCOUNT//\%/%%}:${P9K_GCLOUD_PROJECT_ID//\%/%%}' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_gcloud_prefetch() { + # P9K_GCLOUD_PROJECT is deprecated; it's always equal to P9K_GCLOUD_PROJECT_ID + unset P9K_GCLOUD_CONFIGURATION P9K_GCLOUD_ACCOUNT P9K_GCLOUD_PROJECT P9K_GCLOUD_PROJECT_ID P9K_GCLOUD_PROJECT_NAME + (( $+commands[gcloud] )) || return + _p9k_read_word ${CLOUDSDK_CONFIG:-~/.config/gcloud}/active_config || return + P9K_GCLOUD_CONFIGURATION=$_p9k__ret + if ! _p9k_cache_stat_get $0 ${CLOUDSDK_CONFIG:-~/.config/gcloud}/configurations/config_$P9K_GCLOUD_CONFIGURATION; then + local pair account project_id + pair="$(gcloud config configurations describe $P9K_GCLOUD_CONFIGURATION \ + --format=$'value[separator="\1"](properties.core.account,properties.core.project)')" + (( ! $? )) && IFS=$'\1' read account project_id <<<$pair + _p9k_cache_stat_set "$account" "$project_id" + fi + if [[ -n $_p9k__cache_val[1] ]]; then + P9K_GCLOUD_ACCOUNT=$_p9k__cache_val[1] + fi + if [[ -n $_p9k__cache_val[2] ]]; then + P9K_GCLOUD_PROJECT_ID=$_p9k__cache_val[2] + P9K_GCLOUD_PROJECT=$P9K_GCLOUD_PROJECT_ID # deprecated parameter; set for backward compatibility + fi + if [[ $P9K_GCLOUD_CONFIGURATION == $_p9k_gcloud_configuration && + $P9K_GCLOUD_ACCOUNT == $_p9k_gcloud_account && + $P9K_GCLOUD_PROJECT_ID == $_p9k_gcloud_project_id ]]; then + [[ -n $_p9k_gcloud_project_name ]] && P9K_GCLOUD_PROJECT_NAME=$_p9k_gcloud_project_name + if (( _POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS < 0 || + _p9k__gcloud_last_fetch_ts + _POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS > EPOCHREALTIME )); then + return + fi + else + _p9k_gcloud_configuration=$P9K_GCLOUD_CONFIGURATION + _p9k_gcloud_account=$P9K_GCLOUD_ACCOUNT + _p9k_gcloud_project_id=$P9K_GCLOUD_PROJECT_ID + _p9k_gcloud_project_name= + _p9k__state_dump_scheduled=1 + fi + [[ -n $P9K_GCLOUD_CONFIGURATION && -n $P9K_GCLOUD_ACCOUNT && -n $P9K_GCLOUD_PROJECT_ID ]] || return + _p9k__gcloud_last_fetch_ts=EPOCHREALTIME + _p9k_worker_invoke gcloud "_p9k_prompt_gcloud_compute ${(q)commands[gcloud]} ${(q)P9K_GCLOUD_CONFIGURATION} ${(q)P9K_GCLOUD_ACCOUNT} ${(q)P9K_GCLOUD_PROJECT_ID}" +} + +_p9k_prompt_gcloud_init() { + _p9k__async_segments_compute+=_p9k_gcloud_prefetch + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[gcloud]' +} + +_p9k_prompt_gcloud_compute() { + local gcloud=$1 + P9K_GCLOUD_CONFIGURATION=$2 + P9K_GCLOUD_ACCOUNT=$3 + P9K_GCLOUD_PROJECT_ID=$4 + _p9k_worker_async "_p9k_prompt_gcloud_async ${(q)gcloud}" _p9k_prompt_gcloud_sync +} + +_p9k_prompt_gcloud_async() { + local gcloud=$1 + $gcloud projects describe $P9K_GCLOUD_PROJECT_ID --configuration=$P9K_GCLOUD_CONFIGURATION \ + --account=$P9K_GCLOUD_ACCOUNT --format='value(name)' +} + +_p9k_prompt_gcloud_sync() { + _p9k_worker_reply "_p9k_prompt_gcloud_update ${(q)P9K_GCLOUD_CONFIGURATION} ${(q)P9K_GCLOUD_ACCOUNT} ${(q)P9K_GCLOUD_PROJECT_ID} ${(q)REPLY%$'\n'}" +} + +_p9k_prompt_gcloud_update() { + [[ $1 == $P9K_GCLOUD_CONFIGURATION && + $2 == $P9K_GCLOUD_ACCOUNT && + $3 == $P9K_GCLOUD_PROJECT_ID && + $4 != $P9K_GCLOUD_PROJECT_NAME ]] || return + [[ -n $4 ]] && P9K_GCLOUD_PROJECT_NAME=$4 || unset P9K_GCLOUD_PROJECT_NAME + _p9k_gcloud_project_name=$P9K_GCLOUD_PROJECT_NAME + _p9k__state_dump_scheduled=1 + reset=1 +} + +prompt_google_app_cred() { + unset P9K_GOOGLE_APP_CRED_{TYPE,PROJECT_ID,CLIENT_EMAIL} + + if ! _p9k_cache_stat_get $0 $GOOGLE_APPLICATION_CREDENTIALS; then + local -a lines + local q='[.type//"", .project_id//"", .client_email//"", 0][]' + if lines=("${(@f)$(jq -r $q <$GOOGLE_APPLICATION_CREDENTIALS 2>/dev/null)}") && (( $#lines == 4 )); then + local text="${(j.:.)lines[1,-2]}" + local pat class state + for pat class in "${_POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES[@]}"; do + if [[ $text == ${~pat} ]]; then + [[ -n $class ]] && state=_${${(U)class}//İ/I} + break + fi + done + _p9k_cache_stat_set 1 "${(@)lines[1,-2]}" "$text" "$state" + else + _p9k_cache_stat_set 0 + fi + fi + + (( _p9k__cache_val[1] )) || return + P9K_GOOGLE_APP_CRED_TYPE=$_p9k__cache_val[2] + P9K_GOOGLE_APP_CRED_PROJECT_ID=$_p9k__cache_val[3] + P9K_GOOGLE_APP_CRED_CLIENT_EMAIL=$_p9k__cache_val[4] + _p9k_prompt_segment "$0$_p9k__cache_val[6]" "blue" "white" "GCLOUD_ICON" 0 '' "$_p9k__cache_val[5]" +} + +_p9k_prompt_google_app_cred_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${GOOGLE_APPLICATION_CREDENTIALS:+$commands[jq]}' +} + +typeset -gra __p9k_nordvpn_tag=( + P9K_NORDVPN_STATUS + P9K_NORDVPN_TECHNOLOGY + P9K_NORDVPN_PROTOCOL + P9K_NORDVPN_IP_ADDRESS + P9K_NORDVPN_SERVER + P9K_NORDVPN_COUNTRY + P9K_NORDVPN_CITY +) + +function _p9k_fetch_nordvpn_status() { + setopt err_return no_multi_byte + local REPLY + zsocket /run/nordvpn/nordvpnd.sock + local -i fd=REPLY + { + print -nu $fd 'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n\0\0\0\4\1\0\0\0\0\0\0;\1\4\0\0\0\1\203\206E\213b\270\327\2762\322z\230\326j\246A\206\240\344\35\23\235\t_\213\35u\320b\r&=LMedz\212\232\312\310\264\307`+\262\332\340@\2te\206M\2035\5\261\37\0\0\5\0\1\0\0\0\1\0\0\0\0\0\0\0\25\1\4\0\0\0\3\203\206E\215b\270\327\2762\322z\230\334\221\246\324\177\302\301\300\277\0\0\5\0\1\0\0\0\3\0\0\0\0\0' + local val + local -i len n wire tag + { + IFS='' read -t 0.25 -r val + val=$'\n' + while true; do + tag=$((#val)) + wire='tag & 7' + (( (tag >>= 3) && tag <= $#__p9k_nordvpn_tag )) || break + if (( wire == 0 )); then + # varint + sysread -s 1 -t 0.25 val + n=$((#val)) + (( n < 128 )) || break # bail on multi-byte varints + if (( tag == 2 )); then + # P9K_NORDVPN_TECHNOLOGY + case $n in + 1) typeset -g P9K_NORDVPN_TECHNOLOGY=OPENVPN;; + 2) typeset -g P9K_NORDVPN_TECHNOLOGY=NORDLYNX;; + 3) typeset -g P9K_NORDVPN_TECHNOLOGY=SKYLARK;; + *) typeset -g P9K_NORDVPN_TECHNOLOGY=UNKNOWN;; + esac + elif (( tag == 3 )); then + # P9K_NORDVPN_PROTOCOL + case $n in + 1) typeset -g P9K_NORDVPN_PROTOCOL=UDP;; + 2) typeset -g P9K_NORDVPN_PROTOCOL=TCP;; + *) typeset -g P9K_NORDVPN_PROTOCOL=UNKNOWN;; + esac + else + break + fi + else + # length-delimited + (( wire == 2 )) || break + (( tag != 2 && tag != 3 )) || break + [[ -t $fd ]] || true # https://www.zsh.org/mla/workers/2020/msg00207.html + sysread -s 1 -t 0.25 val + len=$((#val)) + val= + while (( $#val < len )); do + [[ -t $fd ]] || true # https://www.zsh.org/mla/workers/2020/msg00207.html + sysread -s $(( len - $#val )) -t 0.25 'val[$#val+1]' + done + typeset -g $__p9k_nordvpn_tag[tag]=$val + fi + [[ -t $fd ]] || true # https://www.zsh.org/mla/workers/2020/msg00207.html + sysread -s 1 -t 0.25 val + done + } <&$fd + } always { + exec {fd}>&- + } +} + +# Shows the state of NordVPN connection. Works only on Linux. Can be in the following 5 states. +# +# CONNECTED: NordVPN is connected. By default shows NORDVPN_ICON as icon and country code as +# content. In addition, the following variables are set for the use by +# POWERLEVEL9K_NORDVPN_CONNECTED_VISUAL_IDENTIFIER_EXPANSION and +# POWERLEVEL9K_NORDVPN_CONNECTED_CONTENT_EXPANSION: +# +# - P9K_NORDVPN_STATUS +# - P9K_NORDVPN_PROTOCOL +# - P9K_NORDVPN_TECHNOLOGY +# - P9K_NORDVPN_IP_ADDRESS +# - P9K_NORDVPN_SERVER +# - P9K_NORDVPN_COUNTRY +# - P9K_NORDVPN_CITY +# - P9K_NORDVPN_COUNTRY_CODE +# +# The last variable is trivially derived from P9K_NORDVPN_SERVER. The rest correspond to the output +# lines of `nordvpn status` command. Example of using these variables: +# +# # Display the name of the city where VPN servers are located when connected to NordVPN. +# POWERLEVEL9K_NORDVPN_CONNECTED_CONTENT_EXPANSION='${P9K_NORDVPN_CITY}' +# +# DISCONNECTED, CONNECTING, DISCONNECTING: NordVPN is disconnected/connecting/disconnecting. By +# default shows NORDVPN_ICON as icon and FAIL_ICON as content. In state CONNECTING the same +# P9K_NORDVPN_* variables are set as in CONNECTED. In states DISCONNECTED and DISCONNECTING only +# P9K_NORDVPN_STATUS is set. Example customizations: +# +# # Hide NordVPN segment when disconnected (segments with no icon and no content are not shown). +# POWERLEVEL9K_NORDVPN_DISCONNECTED_CONTENT_EXPANSION= +# POWERLEVEL9K_NORDVPN_DISCONNECTED_VISUAL_IDENTIFIER_EXPANSION= +# +# # When NordVPN is connecting, show country code on cyan background. +# POWERLEVEL9K_NORDVPN_CONNECTING_CONTENT_EXPANSION='${P9K_NORDVPN_COUNTRY_CODE}' +# POWERLEVEL9K_NORDVPN_CONNECTING_BACKGROUND=cyan +function prompt_nordvpn() { + unset $__p9k_nordvpn_tag P9K_NORDVPN_COUNTRY_CODE + [[ -e /run/nordvpn/nordvpnd.sock ]] || return + _p9k_fetch_nordvpn_status 2>/dev/null || return + if [[ $P9K_NORDVPN_SERVER == (#b)([[:alpha:]]##)[[:digit:]]##.nordvpn.com ]]; then + typeset -g P9K_NORDVPN_COUNTRY_CODE=${${(U)match[1]}//İ/I} + fi + case $P9K_NORDVPN_STATUS in + Connected) + _p9k_prompt_segment $0_CONNECTED blue white NORDVPN_ICON 0 '' "$P9K_NORDVPN_COUNTRY_CODE" + ;; + Disconnected|Connecting|Disconnecting) + local state=${${(U)P9K_NORDVPN_STATUS}//İ/I} + _p9k_get_icon $0_$state FAIL_ICON + _p9k_prompt_segment $0_$state yellow white NORDVPN_ICON 0 '' "$_p9k__ret" + ;; + *) + return + ;; + esac +} + +_p9k_prompt_nordvpn_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[nordvpn]' +} + +function prompt_ranger() { + _p9k_prompt_segment $0 $_p9k_color1 yellow RANGER_ICON 0 '' $RANGER_LEVEL +} + +_p9k_prompt_ranger_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$RANGER_LEVEL' +} + +function instant_prompt_ranger() { + _p9k_prompt_segment prompt_ranger $_p9k_color1 yellow RANGER_ICON 1 '$RANGER_LEVEL' '$RANGER_LEVEL' +} + +function prompt_midnight_commander() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0 $_p9k_color1 yellow MIDNIGHT_COMMANDER_ICON 0 '' '' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_midnight_commander_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$MC_TMPDIR' +} + +function instant_prompt_midnight_commander() { + _p9k_prompt_segment prompt_midnight_commander $_p9k_color1 yellow MIDNIGHT_COMMANDER_ICON 0 '$MC_TMPDIR' '' +} + +function prompt_nnn() { + _p9k_prompt_segment $0 6 $_p9k_color1 NNN_ICON 0 '' $NNNLVL +} + +_p9k_prompt_nnn_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${NNNLVL:#0}' +} + +function instant_prompt_nnn() { + _p9k_prompt_segment prompt_nnn 6 $_p9k_color1 NNN_ICON 1 '${NNNLVL:#0}' '$NNNLVL' +} + +function prompt_lf() { + _p9k_prompt_segment $0 6 $_p9k_color1 LF_ICON 0 '' $LF_LEVEL +} + +_p9k_prompt_lf_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${LF_LEVEL:#0}' +} + +function instant_prompt_lf() { + _p9k_prompt_segment prompt_lf 6 $_p9k_color1 LF_ICON 1 '${LF_LEVEL:#0}' '$LF_LEVEL' +} + +function prompt_xplr() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0 6 $_p9k_color1 XPLR_ICON 0 '' '' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_xplr_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$XPLR_PID' +} + +function instant_prompt_xplr() { + _p9k_prompt_segment prompt_xplr 6 $_p9k_color1 XPLR_ICON 0 '$XPLR_PID' '' +} + +function prompt_vim_shell() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0 green $_p9k_color1 VIM_ICON 0 '' '' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_vim_shell_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$VIMRUNTIME' +} + +function instant_prompt_vim_shell() { + _p9k_prompt_segment prompt_vim_shell green $_p9k_color1 VIM_ICON 0 '$VIMRUNTIME' '' +} + +function prompt_nix_shell() { + _p9k_prompt_segment $0 4 $_p9k_color1 NIX_SHELL_ICON 0 '' "${(M)IN_NIX_SHELL:#(pure|impure)}" +} + +_p9k_prompt_nix_shell_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k_nix_shell_cond +} + +function instant_prompt_nix_shell() { + _p9k_prompt_segment prompt_nix_shell 4 $_p9k_color1 NIX_SHELL_ICON 1 "$_p9k_nix_shell_cond" '${(M)IN_NIX_SHELL:#(pure|impure)}' +} + +function prompt_terraform() { + local ws=$TF_WORKSPACE + if [[ -z $TF_WORKSPACE ]]; then + _p9k_read_word ${${TF_DATA_DIR:-.terraform}:A}/environment && ws=$_p9k__ret + fi + [[ -z $ws || $ws == default && $_POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT == 0 ]] && return + local pat class state + for pat class in "${_POWERLEVEL9K_TERRAFORM_CLASSES[@]}"; do + if [[ $ws == ${~pat} ]]; then + [[ -n $class ]] && state=_${${(U)class}//İ/I} + break + fi + done + _p9k_prompt_segment "$0$state" $_p9k_color1 blue TERRAFORM_ICON 0 '' $ws +} + +_p9k_prompt_terraform_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[terraform]' +} + +function prompt_terraform_version() { + _p9k_cached_cmd 0 '' terraform --version || return + local v=${_p9k__ret#Terraform v} + (( $#v < $#_p9k__ret )) || return + v=${v%%$'\n'*} + [[ -n $v ]] || return + _p9k_prompt_segment $0 $_p9k_color1 blue TERRAFORM_ICON 0 '' $v +} + +_p9k_prompt_terraform_version_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[terraform]' +} + +function prompt_proxy() { + local -U p=( + $all_proxy $http_proxy $https_proxy $ftp_proxy + $ALL_PROXY $HTTP_PROXY $HTTPS_PROXY $FTP_PROXY) + p=(${(@)${(@)${(@)p#*://}##*@}%%/*}) + (( $#p == 1 )) || p=("") + _p9k_prompt_segment $0 $_p9k_color1 blue PROXY_ICON 0 '' "$p[1]" +} + +_p9k_prompt_proxy_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$all_proxy$http_proxy$https_proxy$ftp_proxy$ALL_PROXY$HTTP_PROXY$HTTPS_PROXY$FTP_PROXY' +} + +function prompt_direnv() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0 $_p9k_color1 yellow DIRENV_ICON 0 '${DIRENV_DIR-}' '' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_direnv_init() { + # DIRENV_DIR is set in a precmd hook. If our hook isn't the last, DIRENV_DIR might + # still get set before prompt is expanded. + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${DIRENV_DIR-${precmd_functions[-1]:#_p9k_precmd}}' +} + +function instant_prompt_direnv() { + if [[ -n ${DIRENV_DIR:-} && $precmd_functions[-1] == _p9k_precmd ]]; then + _p9k_prompt_segment prompt_direnv $_p9k_color1 yellow DIRENV_ICON 0 '' '' + fi +} + +function _p9k_timewarrior_clear() { + [[ -z $_p9k_timewarrior_dir ]] && return + _p9k_timewarrior_dir= + _p9k_timewarrior_dir_mtime=0 + _p9k_timewarrior_file_mtime=0 + _p9k_timewarrior_file_name= + unset _p9k_timewarrior_tags + _p9k__state_dump_scheduled=1 +} + +function prompt_timewarrior() { + local -a stat + local dir=${TIMEWARRIORDB:-~/.timewarrior}/data + [[ $dir == $_p9k_timewarrior_dir ]] || _p9k_timewarrior_clear + if [[ -n $_p9k_timewarrior_file_name ]]; then + zstat -A stat +mtime -- $dir $_p9k_timewarrior_file_name 2>/dev/null || stat=() + if [[ $stat[1] == $_p9k_timewarrior_dir_mtime && $stat[2] == $_p9k_timewarrior_file_mtime ]]; then + if (( $+_p9k_timewarrior_tags )); then + _p9k_prompt_segment $0 grey 255 TIMEWARRIOR_ICON 0 '' "${_p9k_timewarrior_tags//\%/%%}" + fi + return + fi + fi + if [[ ! -d $dir ]]; then + _p9k_timewarrior_clear + return + fi + _p9k_timewarrior_dir=$dir + if [[ $stat[1] != $_p9k_timewarrior_dir_mtime ]]; then + local -a files=($dir/<->-<->.data(.N)) + if (( ! $#files )); then + if (( $#stat )) || zstat -A stat +mtime -- $dir 2>/dev/null; then + _p9k_timewarrior_dir_mtime=$stat[1] + _p9k_timewarrior_file_mtime=$stat[1] + _p9k_timewarrior_file_name=$dir # sic + unset _p9k_timewarrior_tags + _p9k__state_dump_scheduled=1 + else + _p9k_timewarrior_clear + fi + return + fi + _p9k_timewarrior_file_name=${${(AO)files}[1]} + fi + if ! zstat -A stat +mtime -- $dir $_p9k_timewarrior_file_name 2>/dev/null; then + _p9k_timewarrior_clear + return + fi + _p9k_timewarrior_dir_mtime=$stat[1] + _p9k_timewarrior_file_mtime=$stat[2] + { local tail=${${(Af)"$(<$_p9k_timewarrior_file_name)"}[-1]} } 2>/dev/null + if [[ $tail == (#b)'inc '[^\ ]##(|\ #\#(*)) ]]; then + _p9k_timewarrior_tags=${${match[2]## #}%% #} + _p9k_prompt_segment $0 grey 255 TIMEWARRIOR_ICON 0 '' "${_p9k_timewarrior_tags//\%/%%}" + else + unset _p9k_timewarrior_tags + fi + _p9k__state_dump_scheduled=1 +} + +function _p9k_prompt_timewarrior_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[timew]' +} + +function _p9k_taskwarrior_check_meta() { + [[ -n $_p9k_taskwarrior_meta_sig ]] || return + [[ -z $^_p9k_taskwarrior_meta_non_files(#qN) ]] || return + local -a stat + if (( $#_p9k_taskwarrior_meta_files )); then + zstat -A stat +mtime -- $_p9k_taskwarrior_meta_files 2>/dev/null || return + fi + [[ $_p9k_taskwarrior_meta_sig == ${(pj:\0:)stat}$'\0'$TASKRC$'\0'$TASKDATA ]] || return +} + +function _p9k_taskwarrior_init_meta() { + local last_sig=$_p9k_taskwarrior_meta_sig + { + local cfg + cfg="$(command task show data.location rc.color=0 rc._forcecolor=0 /dev/null)" || return + local lines=(${(@M)${(f)cfg}:#data.location[[:space:]]##[^[:space:]]*}) + (( $#lines == 1 )) || return + local dir=${lines[1]##data.location[[:space:]]#} + : ${dir::=$~dir} # `task` can give us path with `~`` in it; expand it + + local -a stat files=(${TASKRC:-~/.taskrc}) + _p9k_taskwarrior_meta_files=($^files(N)) + _p9k_taskwarrior_meta_non_files=(${files:|_p9k_taskwarrior_meta_files}) + if (( $#_p9k_taskwarrior_meta_files )); then + zstat -A stat +mtime -- $_p9k_taskwarrior_meta_files 2>/dev/null || stat=(-1) + fi + _p9k_taskwarrior_meta_sig=${(pj:\0:)stat}$'\0'$TASKRC$'\0'$TASKDATA + _p9k_taskwarrior_data_dir=$dir + } always { + if (( $? == 0 )); then + _p9k__state_dump_scheduled=1 + return + fi + [[ -n $last_sig ]] && _p9k__state_dump_scheduled=1 + _p9k_taskwarrior_meta_files=() + _p9k_taskwarrior_meta_non_files=() + _p9k_taskwarrior_meta_sig= + _p9k_taskwarrior_data_dir= + _p9k__taskwarrior_functional= + } +} + +function _p9k_taskwarrior_check_data() { + [[ -n $_p9k_taskwarrior_data_sig ]] || return + [[ -z $^_p9k_taskwarrior_data_non_files(#qN) ]] || return + local -a stat + if (( $#_p9k_taskwarrior_data_files )); then + zstat -A stat +mtime -- $_p9k_taskwarrior_data_files 2>/dev/null || return + fi + [[ $_p9k_taskwarrior_data_sig == ${(pj:\0:)stat}$'\0'$TASKRC$'\0'$TASKDATA ]] || return + (( _p9k_taskwarrior_next_due == 0 || _p9k_taskwarrior_next_due > EPOCHSECONDS )) || return +} + +function _p9k_taskwarrior_init_data() { + local -a stat files=($_p9k_taskwarrior_data_dir/{pending,completed}.data) + _p9k_taskwarrior_data_files=($^files(N)) + _p9k_taskwarrior_data_non_files=(${files:|_p9k_taskwarrior_data_files}) + if (( $#_p9k_taskwarrior_data_files )); then + zstat -A stat +mtime -- $_p9k_taskwarrior_data_files 2>/dev/null || stat=(-1) + _p9k_taskwarrior_data_sig=${(pj:\0:)stat}$'\0' + else + _p9k_taskwarrior_data_sig= + fi + + _p9k_taskwarrior_data_files+=($_p9k_taskwarrior_meta_files) + _p9k_taskwarrior_data_non_files+=($_p9k_taskwarrior_meta_non_files) + _p9k_taskwarrior_data_sig+=$_p9k_taskwarrior_meta_sig + + local name val + for name in PENDING OVERDUE; do + val="$(command task +$name count rc.color=0 rc._forcecolor=0 /dev/null)" || continue + [[ $val == <1-> ]] || continue + _p9k_taskwarrior_counters[$name]=$val + done + + _p9k_taskwarrior_next_due=0 + + if (( _p9k_taskwarrior_counters[PENDING] > _p9k_taskwarrior_counters[OVERDUE] )); then + local -a ts + ts=($(command task +PENDING -OVERDUE list rc.verbose=nothing rc.color=0 rc._forcecolor=0 \ + rc.report.list.labels= rc.report.list.columns=due.epoch /dev/null)) || ts=() + if (( $#ts )); then + _p9k_taskwarrior_next_due=${${(on)ts}[1]} + (( _p9k_taskwarrior_next_due > EPOCHSECONDS )) || _p9k_taskwarrior_next_due=$((EPOCHSECONDS+60)) + fi + fi + + _p9k__state_dump_scheduled=1 +} + +function prompt_taskwarrior() { + unset P9K_TASKWARRIOR_PENDING_COUNT P9K_TASKWARRIOR_OVERDUE_COUNT + if ! _p9k_taskwarrior_check_data; then + _p9k_taskwarrior_data_files=() + _p9k_taskwarrior_data_non_files=() + _p9k_taskwarrior_data_sig= + _p9k_taskwarrior_counters=() + _p9k_taskwarrior_next_due=0 + _p9k_taskwarrior_check_meta || _p9k_taskwarrior_init_meta || return + _p9k_taskwarrior_init_data + fi + (( $#_p9k_taskwarrior_counters )) || return + local text c=$_p9k_taskwarrior_counters[OVERDUE] + if [[ -n $c ]]; then + typeset -g P9K_TASKWARRIOR_OVERDUE_COUNT=$c + text+="!$c" + fi + c=$_p9k_taskwarrior_counters[PENDING] + if [[ -n $c ]]; then + typeset -g P9K_TASKWARRIOR_PENDING_COUNT=$c + [[ -n $text ]] && text+='/' + text+=$c + fi + [[ -n $text ]] || return + _p9k_prompt_segment $0 6 $_p9k_color1 TASKWARRIOR_ICON 0 '' $text +} + +function _p9k_prompt_taskwarrior_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[task]:+$_p9k__taskwarrior_functional}' +} + +prompt_wifi() { + local -i len=$#_p9k__prompt _p9k__has_upglob + _p9k_prompt_segment $0 green $_p9k_color1 WIFI_ICON 1 '$_p9k__wifi_on' '$P9K_WIFI_LAST_TX_RATE Mbps' + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_wifi_init() { + if [[ -x /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport || + -r /proc/net/wireless && -n $commands[iw] ]]; then + typeset -g _p9k__wifi_on= + typeset -g P9K_WIFI_LAST_TX_RATE= + typeset -g P9K_WIFI_SSID= + typeset -g P9K_WIFI_LINK_AUTH= + typeset -g P9K_WIFI_RSSI= + typeset -g P9K_WIFI_NOISE= + typeset -g P9K_WIFI_BARS= + _p9k__async_segments_compute+='_p9k_worker_invoke wifi _p9k_prompt_wifi_compute' + else + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' + fi +} + +_p9k_prompt_wifi_compute() { + _p9k_worker_async _p9k_prompt_wifi_async _p9k_prompt_wifi_sync +} + +_p9k_prompt_wifi_async() { + local airport=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport + local last_tx_rate ssid link_auth rssi noise bars on out line v state iface + { + if [[ -x $airport ]]; then + out="$($airport -I)" || return 0 + for line in ${${${(f)out}##[[:space:]]#}%%[[:space:]]#}; do + v=${line#*: } + case $line[1,-$#v-3] in + agrCtlRSSI) rssi=$v;; + agrCtlNoise) noise=$v;; + state) state=$v;; + lastTxRate) last_tx_rate=$v;; + link\ auth) link_auth=$v;; + SSID) ssid=$v;; + esac + done + [[ $state == running && $rssi == (0|-<->) && $noise == (0|-<->) ]] || return 0 + elif [[ -r /proc/net/wireless && -n $commands[iw] ]]; then + # Content example (https://github.com/romkatv/powerlevel10k/pull/973#issuecomment-680251804): + # + # Inter-| sta-| Quality | Discarded packets | Missed | WE + # face | tus | link level noise | nwid crypt frag retry misc | beacon | 22 + # wlp3s0: 0000 58. -52. -256 0 0 0 0 76 0 + local -a lines + lines=(${${(f)"$() && $noise == (0|-<->) ]] || return 0 + # Output example (https://github.com/romkatv/powerlevel10k/pull/973#issuecomment-680251804): + # + # Connected to 74:83:c2:be:76:da (on wlp3s0) + # SSID: DailyGrindGuest1 + # freq: 5745 + # RX: 35192066 bytes (27041 packets) + # TX: 4090471 bytes (24287 packets) + # signal: -52 dBm + # rx bitrate: 243.0 MBit/s VHT-MCS 6 40MHz VHT-NSS 2 + # tx bitrate: 240.0 MBit/s VHT-MCS 5 40MHz short GI VHT-NSS 2 + # + # bss flags: short-slot-time + # dtim period: 1 + # beacon int: 100 + lines=(${(f)"$(command iw dev $iface link)"}) || return 0 + local -a match mbegin mend + for line in $lines; do + if [[ $line == (#b)[[:space:]]#SSID:[[:space:]]##(*) ]]; then + ssid=$match[1] + elif [[ $line == (#b)[[:space:]]#'tx bitrate:'[[:space:]]##([^[:space:]]##)' MBit/s'* ]]; then + last_tx_rate=$match[1] + [[ $last_tx_rate == <->.<-> ]] && last_tx_rate=${${last_tx_rate%%0#}%.} + fi + done + [[ -n $ssid && -n $last_tx_rate ]] || return 0 + else + return 0 + fi + # https://www.speedguide.net/faq/how-to-read-rssisignal-and-snrnoise-ratings-440 + # http://www.wireless-nets.com/resources/tutorials/define_SNR_values.html + local -i snr_margin='rssi - noise' + if (( snr_margin >= 40 )); then + bars=4 + elif (( snr_margin >= 25 )); then + bars=3 + elif (( snr_margin >= 15 )); then + bars=2 + elif (( snr_margin >= 10 )); then + bars=1 + else + bars=0 + fi + on=1 + } always { + if (( ! on )); then + rssi= + noise= + ssid= + last_tx_rate= + bars= + link_auth= + fi + if [[ $_p9k__wifi_on != $on || + $P9K_WIFI_LAST_TX_RATE != $last_tx_rate || + $P9K_WIFI_SSID != $ssid || + $P9K_WIFI_LINK_AUTH != $link_auth || + $P9K_WIFI_RSSI != $rssi || + $P9K_WIFI_NOISE != $noise || + $P9K_WIFI_BARS != $bars ]]; then + _p9k__wifi_on=$on + P9K_WIFI_LAST_TX_RATE=$last_tx_rate + P9K_WIFI_SSID=$ssid + P9K_WIFI_LINK_AUTH=$link_auth + P9K_WIFI_RSSI=$rssi + P9K_WIFI_NOISE=$noise + P9K_WIFI_BARS=$bars + _p9k_print_params \ + _p9k__wifi_on \ + P9K_WIFI_LAST_TX_RATE \ + P9K_WIFI_SSID \ + P9K_WIFI_LINK_AUTH \ + P9K_WIFI_RSSI \ + P9K_WIFI_NOISE \ + P9K_WIFI_BARS + echo -E - 'reset=1' + fi + } +} + +_p9k_prompt_wifi_sync() { + if [[ -n $REPLY ]]; then + eval $REPLY + _p9k_worker_reply $REPLY + fi +} + +function _p9k_asdf_check_meta() { + [[ -n $_p9k_asdf_meta_sig ]] || return + [[ -z $^_p9k_asdf_meta_non_files(#qN) ]] || return + local -a stat + if (( $#_p9k_asdf_meta_files )); then + zstat -A stat +mtime -- $_p9k_asdf_meta_files 2>/dev/null || return + fi + [[ $_p9k_asdf_meta_sig == $ASDF_CONFIG_FILE$'\0'$ASDF_DATA_DIR$'\0'${(pj:\0:)stat} ]] || return +} + +function _p9k_asdf_init_meta() { + local last_sig=$_p9k_asdf_meta_sig + { + local -a files + local -i legacy_enabled + + _p9k_asdf_plugins=() + _p9k_asdf_file_info=() + + local cfg=${ASDF_CONFIG_FILE:-~/.asdfrc} + files+=$cfg + if [[ -f $cfg && -r $cfg ]]; then + # Config parser in adsf is very strange. + # + # This gives "yes": + # + # legacy_version_file = yes = no + # + # This gives "no": + # + # legacy_version_file = yes + # legacy_version_file = yes + # + # We do the same. + local lines=(${(@M)${(@)${(f)"$(<$cfg)"}%$'\r'}:#[[:space:]]#legacy_version_file[[:space:]]#=*}) + if [[ $#lines == 1 && ${${(s:=:)lines[1]}[2]} == [[:space:]]#yes[[:space:]]# ]]; then + legacy_enabled=1 + fi + fi + + local root=${ASDF_DATA_DIR:-~/.asdf} + files+=$root/plugins + if [[ -d $root/plugins ]]; then + local plugin + for plugin in $root/plugins/[^[:space:]]##(/N); do + files+=$root/installs/${plugin:t} + local -aU installed=($root/installs/${plugin:t}/[^[:space:]]##(/N:t) system) + _p9k_asdf_plugins[${plugin:t}]=${(j:|:)${(@b)installed}} + (( legacy_enabled )) || continue + if [[ ! -e $plugin/bin ]]; then + files+=$plugin/bin + else + local list_names=$plugin/bin/list-legacy-filenames + files+=$list_names + if [[ -x $list_names ]]; then + local parse=$plugin/bin/parse-legacy-file + local -i has_parse=0 + files+=$parse + [[ -x $parse ]] && has_parse=1 + local name + for name in ${$($list_names 2>/dev/null)%$'\r'}; do + [[ $name == (*/*|.tool-versions) ]] && continue + _p9k_asdf_file_info[$name]+="${plugin:t} $has_parse " + done + fi + fi + done + fi + + _p9k_asdf_meta_files=($^files(N)) + _p9k_asdf_meta_non_files=(${files:|_p9k_asdf_meta_files}) + + local -a stat + if (( $#_p9k_asdf_meta_files )); then + zstat -A stat +mtime -- $_p9k_asdf_meta_files 2>/dev/null || return + fi + _p9k_asdf_meta_sig=$ASDF_CONFIG_FILE$'\0'$ASDF_DATA_DIR$'\0'${(pj:\0:)stat} + _p9k__asdf_dir2files=() + _p9k_asdf_file2versions=() + } always { + if (( $? == 0 )); then + _p9k__state_dump_scheduled=1 + return + fi + [[ -n $last_sig ]] && _p9k__state_dump_scheduled=1 + _p9k_asdf_meta_files=() + _p9k_asdf_meta_non_files=() + _p9k_asdf_meta_sig= + _p9k_asdf_plugins=() + _p9k_asdf_file_info=() + _p9k__asdf_dir2files=() + _p9k_asdf_file2versions=() + } +} + +# Usage: _p9k_asdf_parse_version_file +# +# Mutates `versions` on success. +function _p9k_asdf_parse_version_file() { + local file=$1 + local is_legacy=$2 + local -a stat + zstat -A stat +mtime $file 2>/dev/null || return + if (( is_legacy )); then + local plugin has_parse + for plugin has_parse in $=_p9k_asdf_file_info[$file:t]; do + local cached=$_p9k_asdf_file2versions[$plugin:$file] + if [[ $cached == $stat[1]:* ]]; then + local v=${cached#*:} + else + if (( has_parse )); then + local v=($(${ASDF_DATA_DIR:-~/.asdf}/plugins/$plugin/bin/parse-legacy-file $file 2>/dev/null)) + else + { local v=($(<$file)) } 2>/dev/null + fi + v=(${v%$'\r'}) + v=${v[(r)$_p9k_asdf_plugins[$plugin]]:-$v[1]} + _p9k_asdf_file2versions[$plugin:$file]=$stat[1]:"$v" + _p9k__state_dump_scheduled=1 + fi + [[ -n $v ]] && : ${versions[$plugin]="$v"} + done + else + local cached=$_p9k_asdf_file2versions[:$file] + if [[ $cached == $stat[1]:* ]]; then + local file_versions=(${(0)${cached#*:}}) + else + local file_versions=() + { local lines=(${(@)${(@)${(f)"$(<$file)"}%$'\r'}/\#*}) } 2>/dev/null + local line + for line in $lines; do + local words=($=line) + (( $#words > 1 )) || continue + local installed=$_p9k_asdf_plugins[$words[1]] + [[ -n $installed ]] || continue + file_versions+=($words[1] ${${words:1}[(r)$installed]:-$words[2]}) + done + _p9k_asdf_file2versions[:$file]=$stat[1]:${(pj:\0:)file_versions} + _p9k__state_dump_scheduled=1 + fi + local plugin version + for plugin version in $file_versions; do + : ${versions[$plugin]=$version} + done + fi + return 0 +} + +function prompt_asdf() { + _p9k_asdf_check_meta || _p9k_asdf_init_meta || return + + local -A versions + local -a stat + local -i has_global + local dirs=($_p9k__parent_dirs) + local mtimes=($_p9k__parent_mtimes) + if [[ $dirs[-1] != ~ ]]; then + zstat -A stat +mtime ~ 2>/dev/null || return + dirs+=(~) + mtimes+=($stat[1]) + fi + + local elem + for elem in ${(@)${:-{1..$#dirs}}/(#m)*/${${:-$MATCH:$_p9k__asdf_dir2files[$dirs[MATCH]]}#$MATCH:$mtimes[MATCH]:}}; do + if [[ $elem == *:* ]]; then + local dir=$dirs[${elem%%:*}] + zstat -A stat +mtime $dir 2>/dev/null || return + local files=($dir/.tool-versions(N) $dir/${(k)^_p9k_asdf_file_info}(N)) + _p9k__asdf_dir2files[$dir]=$stat[1]:${(pj:\0:)files} + else + local files=(${(0)elem}) + fi + if [[ ${files[1]:h} == ~ ]]; then + has_global=1 + local -A local_versions=(${(kv)versions}) + versions=() + fi + local file + for file in $files; do + [[ $file == */.tool-versions ]] + _p9k_asdf_parse_version_file $file $? || return + done + done + + if (( ! has_global )); then + has_global=1 + local -A local_versions=(${(kv)versions}) + versions=() + fi + + if [[ -r $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME ]]; then + _p9k_asdf_parse_version_file $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME 0 || return + fi + + local plugin + for plugin in ${(k)_p9k_asdf_plugins}; do + local upper=${${(U)plugin//-/_}//İ/I} + if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_SOURCES] )); then + local sources=(${(P)${:-_POWERLEVEL9K_ASDF_${upper}_SOURCES}}) + else + local sources=($_POWERLEVEL9K_ASDF_SOURCES) + fi + + local version="${(P)${:-ASDF_${upper}_VERSION}}" + if [[ -n $version ]]; then + (( $sources[(I)shell] )) || continue + else + version=$local_versions[$plugin] + if [[ -n $version ]]; then + (( $sources[(I)local] )) || continue + else + version=$versions[$plugin] + [[ -n $version ]] || continue + (( $sources[(I)global] )) || continue + fi + fi + + if [[ $version == $versions[$plugin] ]]; then + if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_PROMPT_ALWAYS_SHOW] )); then + (( _POWERLEVEL9K_ASDF_${upper}_PROMPT_ALWAYS_SHOW )) || continue + else + (( _POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW )) || continue + fi + fi + + if [[ $version == system ]]; then + if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_SHOW_SYSTEM] )); then + (( _POWERLEVEL9K_ASDF_${upper}_SHOW_SYSTEM )) || continue + else + (( _POWERLEVEL9K_ASDF_SHOW_SYSTEM )) || continue + fi + fi + + _p9k_get_icon $0_$upper ${upper}_ICON $plugin + _p9k_prompt_segment $0_$upper green $_p9k_color1 $'\1'$_p9k__ret 0 '' ${version//\%/%%} + done +} + +_p9k_prompt_asdf_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[asdf]:-${${+functions[asdf]}:#0}}' +} + +_p9k_haskell_stack_version() { + if ! _p9k_cache_stat_get $0 $1 ${STACK_ROOT:-~/.stack}/{pantry/pantry.sqlite3,stack.sqlite3}; then + local v + v="$(STACK_YAML=$1 stack \ + --silent \ + --no-install-ghc \ + --skip-ghc-check \ + --no-terminal \ + --color=never \ + --lock-file=read-only \ + query compiler actual)" || v= + _p9k_cache_stat_set "$v" + fi + _p9k__ret=$_p9k__cache_val[1] +} + +prompt_haskell_stack() { + if [[ -n $STACK_YAML ]]; then + (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)shell]} )) || return + _p9k_haskell_stack_version $STACK_YAML + else + (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local|global]} )) || return + if _p9k_upglob stack.yaml -.; then + (( _POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )) || return + (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)global]} )) || return + _p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml + else + local -i idx=$? + (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local]} )) || return + _p9k_haskell_stack_version $_p9k__parent_dirs[idx]/stack.yaml + fi + fi + + [[ -n $_p9k__ret ]] || return + + local v=$_p9k__ret + + if (( !_POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )); then + _p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml + [[ $v == $_p9k__ret ]] && return + fi + + _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" 'HASKELL_ICON' 0 '' "${v//\%/%%}" +} + +_p9k_prompt_haskell_stack_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[stack]' +} + +################################################################ +# CPU Architecture +prompt_cpu_arch() { + local -i len=$#_p9k__prompt _p9k__has_upglob + + local state text + if _p9k_cache_ephemeral_get $0; then + state=$_p9k__cache_val[1] + text=$_p9k__cache_val[2] + else + local cmd + for cmd in machine arch; do + (( $+commands[$cmd] )) || continue + if text=$(command -- $cmd) 2>/dev/null && [[ $text == [a-zA-Z][a-zA-Z0-9_]# ]]; then + break + else + text= + fi + done + state=_${${(U)text}//İ/I} + _p9k_cache_ephemeral_set "$state" "$text" + fi + if [[ -n $text ]]; then + _p9k_prompt_segment "$0$state" "yellow" "$_p9k_color1" 'ARCH_ICON' 0 '' "$text" + fi + + (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] +} + +_p9k_prompt_cpu_arch_init() { + typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[machine]$commands[arch]' +} + +# Use two preexec hooks to survive https://github.com/MichaelAquilina/zsh-you-should-use with +# YSU_HARDCORE=1. See https://github.com/romkatv/powerlevel10k/issues/427. +_p9k_preexec1() { + _p9k_restore_special_params + unset __p9k_trapint + trap - INT +} + +_p9k_preexec2() { + typeset -g _p9k__preexec_cmd=$2 + _p9k__timer_start=EPOCHREALTIME + P9K_TTY=old + (( ! $+_p9k__iterm_cmd )) || _p9k_iterm2_preexec +} + +function _p9k_prompt_net_iface_init() { + typeset -g _p9k__public_ip_vpn= + typeset -g _p9k__public_ip_not_vpn= + typeset -g P9K_IP_IP= + typeset -g P9K_IP_INTERFACE= + typeset -g P9K_IP_TX_BYTES= + typeset -g P9K_IP_RX_BYTES= + typeset -g P9K_IP_TX_BYTES_DELTA= + typeset -g P9K_IP_RX_BYTES_DELTA= + typeset -g P9K_IP_TX_RATE= + typeset -g P9K_IP_RX_RATE= + typeset -g _p9__ip_timestamp= + typeset -g _p9k__vpn_ip_ips=() + [[ -z $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]] && _p9k__public_ip_not_vpn=1 + _p9k__async_segments_compute+='_p9k_worker_invoke net_iface _p9k_prompt_net_iface_compute' +} + +# reads `iface2ip` and sets `ifaces` and `ips` +function _p9k_prompt_net_iface_match() { + local iface_regex="^($1)\$" iface ip + ips=() + ifaces=() + for iface ip in "${(@)iface2ip}"; do + [[ $iface =~ $iface_regex ]] || continue + ifaces+=$iface + ips+=$ip + done + return $(($#ips == 0)) +} + +function _p9k_prompt_net_iface_compute() { + _p9k_worker_async _p9k_prompt_net_iface_async _p9k_prompt_net_iface_sync +} + +function _p9k_prompt_net_iface_async() { + # netstat -inbI en0 + local iface ip line var + typeset -a iface2ip ips ifaces + if (( $+commands[ip] )) && [[ $+commands[ifconfig] == 0 || $OSTYPE == linux* ]]; then + for line in ${(f)"$(command ip -4 a show 2>/dev/null)"}; do + if [[ $line == (#b)<->:[[:space:]]##([^:]##):[[:space:]]##\<([^\>]#)\>* ]]; then + [[ ,$match[2], == *,UP,* ]] && iface=$match[1] || iface= + elif [[ -n $iface && $line == (#b)[[:space:]]##inet[[:space:]]##([0-9.]##)* ]]; then + iface2ip+=($iface $match[1]) + iface= + fi + done + elif (( $+commands[ifconfig] )); then + for line in ${(f)"$(command ifconfig 2>/dev/null)"}; do + if [[ $line == (#b)([^[:space:]]##):[[:space:]]##flags=([[:xdigit:]]##)'<'* ]]; then + [[ $match[2] == *[13579bdfBDF] ]] && iface=$match[1] || iface= + elif [[ -n $iface && $line == (#b)[[:space:]]##inet[[:space:]]##([0-9.]##)* ]]; then + iface2ip+=($iface $match[1]) + iface= + fi + done + fi + + if _p9k_prompt_net_iface_match $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE; then + local public_ip_vpn=1 + local public_ip_not_vpn= + else + local public_ip_vpn= + local public_ip_not_vpn=1 + fi + if _p9k_prompt_net_iface_match $_POWERLEVEL9K_IP_INTERFACE; then + local ip_ip=$ips[1] ip_interface=$ifaces[1] ip_timestamp=$EPOCHREALTIME + local ip_tx_bytes ip_rx_bytes ip_tx_rate ip_rx_rate + if [[ $_p9k_os == (Linux|Android) ]]; then + if [[ -r /sys/class/net/$ifaces[1]/statistics/tx_bytes && + -r /sys/class/net/$ifaces[1]/statistics/rx_bytes ]]; then + _p9k_read_file /sys/class/net/$ifaces[1]/statistics/tx_bytes && + [[ $_p9k__ret == <-> ]] && ip_tx_bytes=$_p9k__ret && + _p9k_read_file /sys/class/net/$ifaces[1]/statistics/rx_bytes && + [[ $_p9k__ret == <-> ]] && ip_rx_bytes=$_p9k__ret || { ip_tx_bytes=; ip_rx_bytes=; } + fi + elif [[ $_p9k_os == (BSD|OSX) && $+commands[netstat] == 1 ]]; then + local -a lines + if lines=(${(f)"$(netstat -inbI $ifaces[1])"}); then + local header=($=lines[1]) + local -i rx_idx=$header[(Ie)Ibytes] + local -i tx_idx=$header[(Ie)Obytes] + if (( rx_idx && tx_idx )); then + ip_tx_bytes=0 + ip_rx_bytes=0 + for line in ${lines:1}; do + (( ip_rx_bytes += ${line[(w)rx_idx]} )) + (( ip_tx_bytes += ${line[(w)tx_idx]} )) + done + fi + fi + fi + if [[ -n $ip_rx_bytes ]]; then + if [[ $ip_ip == $P9K_IP_IP && $ifaces[1] == $P9K_IP_INTERFACE ]]; then + local -F t='ip_timestamp - _p9__ip_timestamp' + if (( t <= 0 )); then + ip_tx_rate=${P9K_IP_TX_RATE:-0 B/s} + ip_rx_rate=${P9K_IP_RX_RATE:-0 B/s} + else + _p9k_human_readable_bytes $(((ip_tx_bytes - P9K_IP_TX_BYTES) / t)) + [[ $_p9k__ret == *B ]] && ip_tx_rate="$_p9k__ret[1,-2] B/s" || ip_tx_rate="$_p9k__ret[1,-2] $_p9k__ret[-1]iB/s" + _p9k_human_readable_bytes $(((ip_rx_bytes - P9K_IP_RX_BYTES) / t)) + [[ $_p9k__ret == *B ]] && ip_rx_rate="$_p9k__ret[1,-2] B/s" || ip_rx_rate="$_p9k__ret[1,-2] $_p9k__ret[-1]iB/s" + fi + else + ip_tx_rate='0 B/s' + ip_rx_rate='0 B/s' + fi + fi + else + local ip_ip= ip_interface= ip_tx_bytes= ip_rx_bytes= ip_tx_rate= ip_rx_rate= ip_timestamp= + fi + if _p9k_prompt_net_iface_match $_POWERLEVEL9K_VPN_IP_INTERFACE; then + if (( _POWERLEVEL9K_VPN_IP_SHOW_ALL )); then + local vpn_ip_ips=($ips) + else + local vpn_ip_ips=($ips[1]) + fi + else + local vpn_ip_ips=() + fi + [[ $_p9k__public_ip_vpn == $public_ip_vpn && + $_p9k__public_ip_not_vpn == $public_ip_not_vpn && + $P9K_IP_IP == $ip_ip && + $P9K_IP_INTERFACE == $ip_interface && + $P9K_IP_TX_BYTES == $ip_tx_bytes && + $P9K_IP_RX_BYTES == $ip_rx_bytes && + $P9K_IP_TX_RATE == $ip_tx_rate && + $P9K_IP_RX_RATE == $ip_rx_rate && + "$_p9k__vpn_ip_ips" == "$vpn_ip_ips" ]] && return 1 + if [[ "$_p9k__vpn_ip_ips" == "$vpn_ip_ips" ]]; then + echo -n 0 + else + echo -n 1 + fi + _p9k__public_ip_vpn=$public_ip_vpn + _p9k__public_ip_not_vpn=$public_ip_not_vpn + P9K_IP_IP=$ip_ip + P9K_IP_INTERFACE=$ip_interface + if [[ -n $ip_tx_bytes && -n $P9K_IP_TX_BYTES ]]; then + P9K_IP_TX_BYTES_DELTA=$((ip_tx_bytes - P9K_IP_TX_BYTES)) + else + P9K_IP_TX_BYTES_DELTA= + fi + if [[ -n $ip_rx_bytes && -n $P9K_IP_RX_BYTES ]]; then + P9K_IP_RX_BYTES_DELTA=$((ip_rx_bytes - P9K_IP_RX_BYTES)) + else + P9K_IP_RX_BYTES_DELTA= + fi + P9K_IP_TX_BYTES=$ip_tx_bytes + P9K_IP_RX_BYTES=$ip_rx_bytes + P9K_IP_TX_RATE=$ip_tx_rate + P9K_IP_RX_RATE=$ip_rx_rate + _p9__ip_timestamp=$ip_timestamp + _p9k__vpn_ip_ips=($vpn_ip_ips) + _p9k_print_params \ + _p9k__public_ip_vpn \ + _p9k__public_ip_not_vpn \ + P9K_IP_IP \ + P9K_IP_INTERFACE \ + P9K_IP_TX_BYTES \ + P9K_IP_RX_BYTES \ + P9K_IP_TX_BYTES_DELTA \ + P9K_IP_RX_BYTES_DELTA \ + P9K_IP_TX_RATE \ + P9K_IP_RX_RATE \ + _p9__ip_timestamp \ + _p9k__vpn_ip_ips + echo -E - 'reset=1' +} + +_p9k_prompt_net_iface_sync() { + local -i vpn_ip_changed=$REPLY[1] + REPLY[1]="" + eval $REPLY + (( vpn_ip_changed )) && REPLY+='; _p9k_vpn_ip_render' + _p9k_worker_reply $REPLY +} + +function _p9k_set_prompt() { + local -i _p9k__vcs_called + + PROMPT= + RPROMPT= + [[ $1 == instant_ ]] || PROMPT+='${$((_p9k_on_expand()))+}%{${_p9k__raw_msg-}${_p9k__raw_msg::=}%}' + PROMPT+=$_p9k_prompt_prefix_left + + local -i _p9k__has_upglob + + local -i left_idx=1 right_idx=1 num_lines=$#_p9k_line_segments_left + for _p9k__line_index in {1..$num_lines}; do + local right= + if (( !_POWERLEVEL9K_DISABLE_RPROMPT )); then + _p9k__dir= + _p9k__prompt= + _p9k__segment_index=right_idx + _p9k__prompt_side=right + if [[ $1 == instant_ ]]; then + for _p9k__segment_name in ${${(0)_p9k_line_segments_right[_p9k__line_index]}%_joined}; do + if (( $+functions[instant_prompt_$_p9k__segment_name] )); then + local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN + if [[ $_p9k__cwd != ${(P)~disabled} ]]; then + local -i len=$#_p9k__prompt + _p9k__non_hermetic_expansion=0 + instant_prompt_$_p9k__segment_name + if (( _p9k__non_hermetic_expansion )); then + _p9k__prompt[len+1,-1]= + fi + fi + fi + ((++_p9k__segment_index)) + done + else + for _p9k__segment_name in ${${(0)_p9k_line_segments_right[_p9k__line_index]}%_joined}; do + local cond=$_p9k__segment_cond_right[_p9k__segment_index] + if [[ -z $cond || -n ${(e)cond} ]]; then + local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN + if [[ $_p9k__cwd != ${(P)~disabled} ]]; then + local val=$_p9k__segment_val_right[_p9k__segment_index] + if [[ -n $val ]]; then + _p9k__prompt+=$val + else + if [[ $_p9k__segment_name == custom_* ]]; then + _p9k_custom_prompt $_p9k__segment_name[8,-1] + elif (( $+functions[prompt_$_p9k__segment_name] )); then + prompt_$_p9k__segment_name + fi + fi + fi + fi + ((++_p9k__segment_index)) + done + fi + _p9k__prompt=${${_p9k__prompt//$' %{\b'/'%{%G'}//$' \b'} + right_idx=_p9k__segment_index + if [[ -n $_p9k__prompt || $_p9k_line_never_empty_right[_p9k__line_index] == 1 ]]; then + right=$_p9k_line_prefix_right[_p9k__line_index]$_p9k__prompt$_p9k_line_suffix_right[_p9k__line_index] + fi + fi + unset _p9k__dir + _p9k__prompt=$_p9k_line_prefix_left[_p9k__line_index] + _p9k__segment_index=left_idx + _p9k__prompt_side=left + if [[ $1 == instant_ ]]; then + for _p9k__segment_name in ${${(0)_p9k_line_segments_left[_p9k__line_index]}%_joined}; do + if (( $+functions[instant_prompt_$_p9k__segment_name] )); then + local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN + if [[ $_p9k__cwd != ${(P)~disabled} ]]; then + local -i len=$#_p9k__prompt + _p9k__non_hermetic_expansion=0 + instant_prompt_$_p9k__segment_name + if (( _p9k__non_hermetic_expansion )); then + _p9k__prompt[len+1,-1]= + fi + fi + fi + ((++_p9k__segment_index)) + done + else + for _p9k__segment_name in ${${(0)_p9k_line_segments_left[_p9k__line_index]}%_joined}; do + local cond=$_p9k__segment_cond_left[_p9k__segment_index] + if [[ -z $cond || -n ${(e)cond} ]]; then + local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN + if [[ $_p9k__cwd != ${(P)~disabled} ]]; then + local val=$_p9k__segment_val_left[_p9k__segment_index] + if [[ -n $val ]]; then + _p9k__prompt+=$val + else + if [[ $_p9k__segment_name == custom_* ]]; then + _p9k_custom_prompt $_p9k__segment_name[8,-1] + elif (( $+functions[prompt_$_p9k__segment_name] )); then + prompt_$_p9k__segment_name + fi + fi + fi + fi + ((++_p9k__segment_index)) + done + fi + _p9k__prompt=${${_p9k__prompt//$' %{\b'/'%{%G'}//$' \b'} + left_idx=_p9k__segment_index + _p9k__prompt+=$_p9k_line_suffix_left[_p9k__line_index] + if (( $+_p9k__dir || (_p9k__line_index != num_lines && $#right) )); then + _p9k__prompt='${${:-${_p9k__d::=0}${_p9k__rprompt::='$right'}${_p9k__lprompt::='$_p9k__prompt'}}+}' + _p9k__prompt+=$_p9k_gap_pre + if (( $+_p9k__dir )); then + if (( _p9k__line_index == num_lines && (_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS > 0 || _POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT > 0) )); then + local a=$_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS + local f=$((0.01*_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT))'*_p9k__clm' + _p9k__prompt+="\${\${_p9k__h::=$((($a<$f)*$f+($a>=$f)*$a))}+}" + else + _p9k__prompt+='${${_p9k__h::=0}+}' + fi + if [[ $_POWERLEVEL9K_DIR_MAX_LENGTH == <->('%'|) ]]; then + local lim= + if [[ $_POWERLEVEL9K_DIR_MAX_LENGTH[-1] == '%' ]]; then + lim="$_p9k__dir_len-$((0.01*$_POWERLEVEL9K_DIR_MAX_LENGTH[1,-2]))*_p9k__clm" + else + lim=$((_p9k__dir_len-_POWERLEVEL9K_DIR_MAX_LENGTH)) + ((lim <= 0)) && lim= + fi + if [[ -n $lim ]]; then + _p9k__prompt+='${${${$((_p9k__h<_p9k__m+'$lim')):#1}:-${_p9k__h::=$((_p9k__m+'$lim'))}}+}' + fi + fi + _p9k__prompt+='${${_p9k__d::=$((_p9k__m-_p9k__h))}+}' + _p9k__prompt+='${_p9k__lprompt/\%\{d\%\}*\%\{d\%\}/${_p9k__'$_p9k__line_index'ldir-'$_p9k__dir'}}' + _p9k__prompt+='${${_p9k__m::=$((_p9k__d+_p9k__h))}+}' + else + _p9k__prompt+='${_p9k__lprompt}' + fi + ((_p9k__line_index != num_lines && $#right)) && _p9k__prompt+=$_p9k_line_gap_post[_p9k__line_index] + fi + if (( _p9k__line_index == num_lines )); then + [[ -n $right ]] && RPROMPT=$_p9k_prompt_prefix_right$right$_p9k_prompt_suffix_right + _p9k__prompt='${_p9k__'$_p9k__line_index'-'$_p9k__prompt'}'$_p9k_prompt_suffix_left + [[ $1 == instant_ ]] || PROMPT+=$_p9k__prompt + else + [[ -n $right ]] || _p9k__prompt+=$'\n' + PROMPT+='${_p9k__'$_p9k__line_index'-'$_p9k__prompt'}' + fi + done + + _p9k__prompt_side= + (( $#_p9k_cache < _POWERLEVEL9K_MAX_CACHE_SIZE )) || _p9k_cache=() + (( $#_p9k__cache_ephemeral < _POWERLEVEL9K_MAX_CACHE_SIZE )) || _p9k__cache_ephemeral=() + + [[ -n $RPROMPT ]] || unset RPROMPT +} + +_p9k_set_instant_prompt() { + local saved_prompt=$PROMPT + local saved_rprompt=$RPROMPT + _p9k_set_prompt instant_ + typeset -g _p9k__instant_prompt=$PROMPT$'\x1f'$_p9k__prompt$'\x1f'$RPROMPT + PROMPT=$saved_prompt + RPROMPT=$saved_rprompt + [[ -n $RPROMPT ]] || unset RPROMPT +} + +typeset -gri __p9k_instant_prompt_version=47 + +_p9k_dump_instant_prompt() { + local user=${(%):-%n} + local root_dir=${__p9k_dump_file:h} + local prompt_dir=${root_dir}/p10k-$user + local root_file=$root_dir/p10k-instant-prompt-$user.zsh + local prompt_file=$prompt_dir/prompt-${#_p9k__cwd} + [[ -d $prompt_dir ]] || mkdir -p $prompt_dir || return + [[ -w $root_dir && -w $prompt_dir ]] || return + + if [[ ! -e $root_file ]]; then + local tmp=$root_file.tmp.$$ + local -i fd + sysopen -a -m 600 -o creat,trunc -u fd -- $tmp || return + { + [[ $TERM == (screen*|tmux*) ]] && local screen='-n' || local screen='-z' + local -a display_v=("${_p9k__display_v[@]}") + local -i i + for ((i = 6; i <= $#display_v; i+=2)); do display_v[i]=show; done + display_v[2]=hide + display_v[4]=hide + local gitstatus_dir=${${_POWERLEVEL9K_GITSTATUS_DIR:A}:-${__p9k_root_dir}/gitstatus} + local gitstatus_header + if [[ -r $gitstatus_dir/install.info ]]; then + IFS= read -r gitstatus_header <$gitstatus_dir/install.info || return + fi + >&$fd print -r -- '[[ -t 0 && -t 1 && -t 2 && -o interactive && -o zle && -o no_xtrace ]] && + ! (( ${+__p9k_instant_prompt_disabled} || ZSH_SUBSHELL || ${+ZSH_SCRIPT} || ${+ZSH_EXECUTION_STRING} )) || return 0' + >&$fd print -r -- "() { + $__p9k_intro_no_locale + typeset -gi __p9k_instant_prompt_disabled=1 + [[ \$ZSH_VERSION == ${(q)ZSH_VERSION} && \$ZSH_PATCHLEVEL == ${(q)ZSH_PATCHLEVEL} && + $screen \${(M)TERM:#(screen*|tmux*)} && + \${#\${(M)VTE_VERSION:#(<1-4602>|4801)}} == "${#${(M)VTE_VERSION:#(<1-4602>|4801)}}" && + \$POWERLEVEL9K_DISABLE_INSTANT_PROMPT != 'true' && + \$POWERLEVEL9K_INSTANT_PROMPT != 'off' ]] || return + typeset -g __p9k_instant_prompt_param_sig=${(q+)_p9k__param_sig} + local gitstatus_dir=${(q)gitstatus_dir} + local gitstatus_header=${(q)gitstatus_header} + local -i ZLE_RPROMPT_INDENT=${ZLE_RPROMPT_INDENT:-1} + local PROMPT_EOL_MARK=${(q)PROMPT_EOL_MARK-%B%S%#%s%b} + [[ -n \$SSH_CLIENT || -n \$SSH_TTY || -n \$SSH_CONNECTION ]] && local ssh=1 || local ssh=0 + local cr=\$'\r' lf=\$'\n' esc=\$'\e[' rs=$'\x1e' us=$'\x1f' + local -i height=${_POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES-1} + local prompt_dir=${(q)prompt_dir}" + if (( ! ${+_POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES} )); then + >&$fd print -r -- ' + (( _z4h_can_save_restore_screen == 1 )) && height=0' + fi + >&$fd print -r -- ' + local real_gitstatus_header + if [[ -r $gitstatus_dir/install.info ]]; then + IFS= read -r real_gitstatus_header <$gitstatus_dir/install.info || real_gitstatus_header=borked + fi + [[ $real_gitstatus_header == $gitstatus_header ]] || return + zmodload zsh/langinfo zsh/terminfo zsh/system || return + if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]]; then + local loc_cmd=$commands[locale] + [[ -z $loc_cmd ]] && loc_cmd='${(q)commands[locale]}' + if [[ -x $loc_cmd ]]; then + local -a locs + if locs=(${(@M)$(locale -a 2>/dev/null):#*.(utf|UTF)(-|)8}) && (( $#locs )); then + local loc=${locs[(r)(#i)C.UTF(-|)8]:-${locs[(r)(#i)en_US.UTF(-|)8]:-$locs[1]}} + [[ -n $LC_ALL ]] && local LC_ALL=$loc || local LC_CTYPE=$loc + fi + fi + fi + (( terminfo[colors] == '${terminfo[colors]:-0}' )) || return + (( $+terminfo[cuu] && $+terminfo[cuf] && $+terminfo[ed] && $+terminfo[sc] && $+terminfo[rc] )) || return + local pwd=${(%):-%/} + [[ $pwd == /* ]] || return + local prompt_file=$prompt_dir/prompt-${#pwd} + local key=$pwd:$ssh:${(%):-%#} + local content + if [[ ! -e $prompt_file ]]; then + typeset -gi __p9k_instant_prompt_sourced='$__p9k_instant_prompt_version' + return 1 + fi + { content="$(<$prompt_file)" } 2>/dev/null || return + local tail=${content##*$rs$key$us} + if (( ${#tail} == ${#content} )); then + typeset -gi __p9k_instant_prompt_sourced='$__p9k_instant_prompt_version' + return 1 + fi + local _p9k__ipe + local P9K_PROMPT=instant + if [[ -z $P9K_TTY || $P9K_TTY == old && -n ${_P9K_TTY:#$TTY} ]]; then' + if (( _POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS < 0 )); then + >&$fd print -r -- ' typeset -gx P9K_TTY=new' + else + >&$fd print -r -- ' + typeset -gx P9K_TTY=old + zmodload -F zsh/stat b:zstat || return + zmodload zsh/datetime || return + local -a stat + if zstat -A stat +ctime -- $TTY 2>/dev/null && + (( EPOCHREALTIME - stat[1] < '$_POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS' )); then + P9K_TTY=new + fi' + fi + >&$fd print -r -- ' fi + typeset -gx _P9K_TTY=$TTY + local -i _p9k__empty_line_i=3 _p9k__ruler_i=3 + local -A _p9k_display_k=('${(j: :)${(@q)${(kv)_p9k_display_k}}}') + local -a _p9k__display_v=('${(j: :)${(@q)display_v}}') + function p10k() { + '$__p9k_intro' + [[ $1 == display ]] || return + shift + local -i k dump + local opt prev new pair list name var + while getopts ":ha" opt; do + case $opt in + a) dump=1;; + h) return 0;; + ?) return 1;; + esac + done + if (( dump )); then + reply=() + shift $((OPTIND-1)) + (( ARGC )) || set -- "*" + for opt; do + for k in ${(u@)_p9k_display_k[(I)$opt]:/(#m)*/$_p9k_display_k[$MATCH]}; do + reply+=($_p9k__display_v[k,k+1]) + done + done + return 0 + fi + for opt in "${@:$OPTIND}"; do + pair=(${(s:=:)opt}) + list=(${(s:,:)${pair[2]}}) + if [[ ${(b)pair[1]} == $pair[1] ]]; then + local ks=($_p9k_display_k[$pair[1]]) + else + local ks=(${(u@)_p9k_display_k[(I)$pair[1]]:/(#m)*/$_p9k_display_k[$MATCH]}) + fi + for k in $ks; do + if (( $#list == 1 )); then + [[ $_p9k__display_v[k+1] == $list[1] ]] && continue + new=$list[1] + else + new=${list[list[(I)$_p9k__display_v[k+1]]+1]:-$list[1]} + [[ $_p9k__display_v[k+1] == $new ]] && continue + fi + _p9k__display_v[k+1]=$new + name=$_p9k__display_v[k] + if [[ $name == (empty_line|ruler) ]]; then + var=_p9k__${name}_i + [[ $new == hide ]] && typeset -gi $var=3 || unset $var + elif [[ $name == (#b)(<->)(*) ]]; then + var=_p9k__${match[1]}${${${${match[2]//\/}/#left/l}/#right/r}/#gap/g} + [[ $new == hide ]] && typeset -g $var= || unset $var + fi + done + done + }' + if (( _POWERLEVEL9K_PROMPT_ADD_NEWLINE )); then + >&$fd print -r -- ' [[ $P9K_TTY == old ]] && { unset _p9k__empty_line_i; _p9k__display_v[2]=print }' + fi + if (( _POWERLEVEL9K_SHOW_RULER )); then + >&$fd print -r -- '[[ $P9K_TTY == old ]] && { unset _p9k__ruler_i; _p9k__display_v[4]=print }' + fi + if (( $+functions[p10k-on-init] )); then + >&$fd print -r -- ' + p10k-on-init() { '$functions[p10k-on-init]' }' + fi + if (( $+functions[p10k-on-pre-prompt] )); then + >&$fd print -r -- ' + p10k-on-pre-prompt() { '$functions[p10k-on-pre-prompt]' }' + fi + if (( $+functions[p10k-on-post-prompt] )); then + >&$fd print -r -- ' + p10k-on-post-prompt() { '$functions[p10k-on-post-prompt]' }' + fi + if (( $+functions[p10k-on-post-widget] )); then + >&$fd print -r -- ' + p10k-on-post-widget() { '$functions[p10k-on-post-widget]' }' + fi + if (( $+functions[p10k-on-init] )); then + >&$fd print -r -- ' + p10k-on-init' + fi + local pat idx var + for pat idx var in $_p9k_show_on_command; do + >&$fd print -r -- " + local $var= + _p9k__display_v[$idx]=hide" + done + if (( $+functions[p10k-on-pre-prompt] )); then + >&$fd print -r -- ' + p10k-on-pre-prompt' + fi + if (( $+functions[p10k-on-init] )); then + >&$fd print -r -- ' + unfunction p10k-on-init' + fi + if (( $+functions[p10k-on-pre-prompt] )); then + >&$fd print -r -- ' + unfunction p10k-on-pre-prompt' + fi + if (( $+functions[p10k-on-post-prompt] )); then + >&$fd print -r -- ' + unfunction p10k-on-post-prompt' + fi + if (( $+functions[p10k-on-post-widget] )); then + >&$fd print -r -- ' + unfunction p10k-on-post-widget' + fi + >&$fd print -r -- ' + () { +'$functions[_p9k_init_toolbox]' + } + trap "unset -m _p9k__\*; unfunction p10k" EXIT + local -a _p9k_t=("${(@ps:$us:)${tail%%$rs*}}") + if [[ $+VTE_VERSION == 1 || $TERM_PROGRAM == Hyper ]] && (( $+commands[stty] )); then + if [[ $TERM_PROGRAM == Hyper ]]; then + local bad_lines=40 bad_columns=100 + else + local bad_lines=24 bad_columns=80 + fi + if (( LINES == bad_lines && COLUMNS == bad_columns )); then + zmodload -F zsh/stat b:zstat || return + zmodload zsh/datetime || return + local -a tty_ctime + if ! zstat -A tty_ctime +ctime -- $TTY 2>/dev/null || (( tty_ctime[1] + 2 > EPOCHREALTIME )); then + local -F deadline=$((EPOCHREALTIME+0.025)) + local tty_size + while true; do + if (( EPOCHREALTIME > deadline )) || ! tty_size="$(command stty size 2>/dev/null)" || [[ $tty_size != <->" "<-> ]]; then + (( $+_p9k__ruler_i )) || local -i _p9k__ruler_i=1 + local _p9k__g= _p9k__'$#_p9k_line_segments_right'r= _p9k__'$#_p9k_line_segments_right'r_frame= + break + fi + if [[ $tty_size != "$bad_lines $bad_columns" ]]; then + local lines_columns=(${=tty_size}) + local LINES=$lines_columns[1] + local COLUMNS=$lines_columns[2] + break + fi + done + fi + fi + fi' + (( __p9k_ksh_arrays )) && >&$fd print -r -- ' setopt ksh_arrays' + (( __p9k_sh_glob )) && >&$fd print -r -- ' setopt sh_glob' + >&$fd print -r -- ' typeset -ga __p9k_used_instant_prompt=("${(@e)_p9k_t[-3,-1]}")' + (( __p9k_ksh_arrays )) && >&$fd print -r -- ' unsetopt ksh_arrays' + (( __p9k_sh_glob )) && >&$fd print -r -- ' unsetopt sh_glob' + >&$fd print -r -- ' + local -i prompt_height=${#${__p9k_used_instant_prompt[1]//[^$lf]}} + (( height += prompt_height )) + local _p9k__ret + function _p9k_prompt_length() { + local -i COLUMNS=1024 + local -i x y=${#1} m + if (( y )); then + while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do + x=y + (( y *= 2 )) + done + while (( y > x + 1 )); do + (( m = x + (y - x) / 2 )) + (( ${${(%):-$1%$m(l.x.y)}[-1]} = m )) + done + fi + typeset -g _p9k__ret=$x + } + local out=${(%):-%b%k%f%s%u} + if [[ $P9K_TTY == old && ( $+VTE_VERSION == 0 && $TERM_PROGRAM != Hyper || $+_p9k__g == 0 ) ]]; then + local mark=${(e)PROMPT_EOL_MARK} + [[ $mark == "%B%S%#%s%b" ]] && _p9k__ret=1 || _p9k_prompt_length $mark + local -i fill=$((COLUMNS > _p9k__ret ? COLUMNS - _p9k__ret : 0)) + out+="${(%):-$mark${(pl.$fill.. .)}$cr%b%k%f%s%u%E}" + else + out+="${(%):-$cr%E}" + fi + if (( _z4h_can_save_restore_screen != 1 )); then + (( height )) && out+="${(pl.$height..$lf.)}$esc${height}A" + out+="$terminfo[sc]" + fi + out+=${(%):-"$__p9k_used_instant_prompt[1]$__p9k_used_instant_prompt[2]"} + if [[ -n $__p9k_used_instant_prompt[3] ]]; then + _p9k_prompt_length "$__p9k_used_instant_prompt[2]" + local -i left_len=_p9k__ret + _p9k_prompt_length "$__p9k_used_instant_prompt[3]" + if (( _p9k__ret )); then + local -i gap=$((COLUMNS - left_len - _p9k__ret - ZLE_RPROMPT_INDENT)) + if (( gap >= 40 )); then + out+="${(pl.$gap.. .)}${(%):-${__p9k_used_instant_prompt[3]}%b%k%f%s%u}$cr$esc${left_len}C" + fi + fi + fi + if (( _z4h_can_save_restore_screen == 1 )); then + if (( height )); then + out+="$cr${(pl:$((height-prompt_height))::\n:)}$esc${height}A$terminfo[sc]$out" + else + out+="$cr${(pl:$((height-prompt_height))::\n:)}$terminfo[sc]$out" + fi + fi + if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then + local tmpdir=$TMPDIR + else + local tmpdir=/tmp + fi + typeset -g __p9k_instant_prompt_output=$tmpdir/p10k-instant-prompt-output-${(%):-%n}-$$ + { : > $__p9k_instant_prompt_output } || return + print -rn -- "${out}${esc}?2004h" || return + if (( $+commands[stty] )); then + command stty -icanon 2>/dev/null + fi + local fd_null + sysopen -ru fd_null /dev/null || return + exec {__p9k_fd_0}<&0 {__p9k_fd_1}>&1 {__p9k_fd_2}>&2 0<&$fd_null 1>$__p9k_instant_prompt_output + exec 2>&1 {fd_null}>&- + typeset -gi __p9k_instant_prompt_active=1 + if (( _z4h_can_save_restore_screen == 1 )); then + typeset -g _z4h_saved_screen + -z4h-save-screen + fi + typeset -g __p9k_instant_prompt_dump_file=${XDG_CACHE_HOME:-~/.cache}/p10k-dump-${(%):-%n}.zsh + if builtin source $__p9k_instant_prompt_dump_file 2>/dev/null && (( $+functions[_p9k_preinit] )); then + _p9k_preinit + fi + function _p9k_instant_prompt_cleanup() { + (( ZSH_SUBSHELL == 0 && ${+__p9k_instant_prompt_active} )) || return 0 + '$__p9k_intro_no_locale' + unset __p9k_instant_prompt_active + exec 0<&$__p9k_fd_0 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_0}>&- {__p9k_fd_1}>&- {__p9k_fd_2}>&- + unset __p9k_fd_0 __p9k_fd_1 __p9k_fd_2 + typeset -gi __p9k_instant_prompt_erased=1 + if (( _z4h_can_save_restore_screen == 1 && __p9k_instant_prompt_sourced >= 35 )); then + -z4h-restore-screen + unset _z4h_saved_screen + fi + print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed] + if [[ -s $__p9k_instant_prompt_output ]]; then + command cat $__p9k_instant_prompt_output 2>/dev/null + if (( $1 )); then + local _p9k__ret mark="${(e)${PROMPT_EOL_MARK-%B%S%#%s%b}}" + _p9k_prompt_length $mark + local -i fill=$((COLUMNS > _p9k__ret ? COLUMNS - _p9k__ret : 0)) + echo -nE - "${(%):-%b%k%f%s%u$mark${(pl.$fill.. .)}$cr%b%k%f%s%u%E}" + fi + fi + zshexit_functions=(${zshexit_functions:#_p9k_instant_prompt_cleanup}) + zmodload -F zsh/files b:zf_rm || return + local user=${(%):-%n} + local root_dir=${__p9k_instant_prompt_dump_file:h} + zf_rm -f -- $__p9k_instant_prompt_output $__p9k_instant_prompt_dump_file{,.zwc} $root_dir/p10k-instant-prompt-$user.zsh{,.zwc} $root_dir/p10k-$user/prompt-*(N) 2>/dev/null + } + function _p9k_instant_prompt_precmd_first() { + '$__p9k_intro' + function _p9k_instant_prompt_sched_last() { + (( ${+__p9k_instant_prompt_active} )) || return 0 + _p9k_instant_prompt_cleanup 1 + setopt no_local_options prompt_cr prompt_sp + } + zmodload zsh/sched + sched +0 _p9k_instant_prompt_sched_last + precmd_functions=(${(@)precmd_functions:#_p9k_instant_prompt_precmd_first}) + } + zshexit_functions=(_p9k_instant_prompt_cleanup $zshexit_functions) + precmd_functions=(_p9k_instant_prompt_precmd_first $precmd_functions) + DISABLE_UPDATE_PROMPT=true +} && unsetopt prompt_cr prompt_sp && typeset -gi __p9k_instant_prompt_sourced='$__p9k_instant_prompt_version' || + typeset -gi __p9k_instant_prompt_sourced=${__p9k_instant_prompt_sourced:-0}' + } always { + exec {fd}>&- + } + { + (( ! $? )) || return + # `zf_mv -f src dst` fails on NTFS if `dst` is not writable, hence `zf_rm`. + zf_rm -f -- $root_file.zwc || return + zf_mv -f -- $tmp $root_file || return + zcompile -R -- $tmp.zwc $root_file || return + zf_mv -f -- $tmp.zwc $root_file.zwc || return + } always { + (( $? )) && zf_rm -f -- $tmp $tmp.zwc 2>/dev/null + } + fi + + local tmp=$prompt_file.tmp.$$ + zf_mv -f -- $prompt_file $tmp 2>/dev/null + if [[ "$(<$tmp)" == *$'\x1e'$_p9k__instant_prompt_sig$'\x1f'* ]] 2>/dev/null; then + echo -n >$tmp || return + fi + + local -i fd + sysopen -a -m 600 -o creat -u fd -- $tmp || return + { + { + print -rnu $fd -- $'\x1e'$_p9k__instant_prompt_sig$'\x1f'${(pj:\x1f:)_p9k_t}$'\x1f'$_p9k__instant_prompt || return + } always { + exec {fd}>&- + } + zf_mv -f -- $tmp $prompt_file || return + } always { + (( $? )) && zf_rm -f -- $tmp 2>/dev/null + } +} + +typeset -gi __p9k_sh_glob +typeset -gi __p9k_ksh_arrays +typeset -gi __p9k_new_status +typeset -ga __p9k_new_pipestatus + +_p9k_save_status() { + local -i pipe + if (( !$+_p9k__line_finished )); then + : # SIGINT + elif (( !$+_p9k__preexec_cmd )); then + # Empty line, comment or parse error. + # + # This case is handled incorrectly: + # + # true | false + # | + # + # Here status=1 and pipestatus=(0 1). Ideally we should ignore pipestatus but we won't. + # + # This works though (unless pipefail is set): + # + # false | true + # | + # + # We get status=1 and pipestatus=(1 0) and correctly ignore pipestatus. + (( _p9k__status == __p9k_new_status )) && return + elif (( $__p9k_new_pipestatus[(I)$__p9k_new_status] )); then # just in case + local cmd=(${(z)_p9k__preexec_cmd}) + if [[ $#cmd != 0 && $cmd[1] != '!' && ${(Q)cmd[1]} != coproc ]]; then + local arg + for arg in ${(z)_p9k__preexec_cmd}; do + # '()' is for functions, *';' is for complex commands. + if [[ $arg == ('()'|'&&'|'||'|'&'|'&|'|'&!'|*';') ]]; then + pipe=0 + break + elif [[ $arg == *('|'|'|&')* ]]; then + pipe=1 + fi + done + fi + fi + _p9k__status=$__p9k_new_status + if (( pipe )); then + _p9k__pipestatus=($__p9k_new_pipestatus) + else + _p9k__pipestatus=($_p9k__status) + fi +} + +function _p9k_dump_state() { + local dir=${__p9k_dump_file:h} + [[ -d $dir ]] || mkdir -p -- $dir || return + [[ -w $dir ]] || return + local tmp=$__p9k_dump_file.tmp.$$ + local -i fd + sysopen -a -m 600 -o creat,trunc -u fd -- $tmp || return + { + { + typeset -g __p9k_cached_param_pat=$_p9k__param_pat + typeset -g __p9k_cached_param_sig=$_p9k__param_sig + typeset -pm __p9k_cached_param_pat __p9k_cached_param_sig >&$fd || return + unset __p9k_cached_param_pat __p9k_cached_param_sig + (( $+_p9k_preinit )) && { print -r -- $_p9k_preinit >&$fd || return } + print -r -- '_p9k_restore_state_impl() {' >&$fd || return + typeset -pm '_POWERLEVEL9K_*|_p9k_[^_]*|icons' >&$fd || return + print -r -- '}' >&$fd || return + } always { + exec {fd}>&- + } + # `zf_mv -f src dst` fails on NTFS if `dst` is not writable, hence `zf_rm`. + zf_rm -f -- $__p9k_dump_file.zwc || return + zf_mv -f -- $tmp $__p9k_dump_file || return + zcompile -R -- $tmp.zwc $__p9k_dump_file || return + zf_mv -f -- $tmp.zwc $__p9k_dump_file.zwc || return + } always { + (( $? )) && zf_rm -f -- $tmp $tmp.zwc 2>/dev/null + } +} + +function _p9k_delete_instant_prompt() { + local user=${(%):-%n} + local root_dir=${__p9k_dump_file:h} + zf_rm -f -- $root_dir/p10k-instant-prompt-$user.zsh{,.zwc} ${root_dir}/p10k-$user/prompt-*(N) 2>/dev/null +} + +function _p9k_restore_state() { + { + [[ $__p9k_cached_param_pat == $_p9k__param_pat && $__p9k_cached_param_sig == $_p9k__param_sig ]] || return + (( $+functions[_p9k_restore_state_impl] )) || return + _p9k_restore_state_impl + return 0 + } always { + if (( $? )); then + if (( $+functions[_p9k_preinit] )); then + unfunction _p9k_preinit + (( $+functions[gitstatus_stop_p9k_] )) && gitstatus_stop_p9k_ POWERLEVEL9K + fi + _p9k_delete_instant_prompt + zf_rm -f -- $__p9k_dump_file{,.zwc} 2>/dev/null + elif [[ $__p9k_instant_prompt_param_sig != $_p9k__param_sig ]]; then + _p9k_delete_instant_prompt + _p9k_dumped_instant_prompt_sigs=() + fi + unset __p9k_cached_param_sig + } +} + +function _p9k_clear_instant_prompt() { + if (( $+__p9k_fd_0 )); then + exec 0<&$__p9k_fd_0 {__p9k_fd_0}>&- + unset __p9k_fd_0 + fi + exec 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_1}>&- {__p9k_fd_2}>&- + unset __p9k_fd_1 __p9k_fd_2 + zshexit_functions=(${zshexit_functions:#_p9k_instant_prompt_cleanup}) + if (( _p9k__can_hide_cursor )); then + echoti civis + _p9k__cursor_hidden=1 + fi + if [[ -s $__p9k_instant_prompt_output ]]; then + { + local content + [[ $_POWERLEVEL9K_INSTANT_PROMPT == verbose ]] && content="$(<$__p9k_instant_prompt_output)" + local mark="${(e)${PROMPT_EOL_MARK-%B%S%#%s%b}}" + _p9k_prompt_length $mark + local -i fill=$((COLUMNS > _p9k__ret ? COLUMNS - _p9k__ret : 0)) + local cr=$'\r' + local sp="${(%):-%b%k%f%s%u$mark${(pl.$fill.. .)}$cr%b%k%f%s%u%E}" + if (( _z4h_can_save_restore_screen == 1 && __p9k_instant_prompt_sourced >= 35 )); then + -z4h-restore-screen + unset _z4h_saved_screen + fi + print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed] + local unexpected=${(S)${${content//$'\e[?'<->'c'}//$'\e['<->' q'}//$'\e'[^$'\a\e']#($'\a'|$'\e\\')} + # Visual Studio Code prints this garbage. + unexpected=${${unexpected//$'\033[1;32mShell integration activated\033[0m\n'}//$'\r'} + if [[ -n $unexpected ]]; then + local omz1='[Oh My Zsh] Would you like to update? [Y/n]: ' + local omz2='Updating Oh My Zsh' + local omz3='https://shop.planetargon.com/collections/oh-my-zsh' + local omz4='There was an error updating. Try again later?' + if [[ $unexpected != ($omz1|)$omz2*($omz3|$omz4)[^$'\n']#($'\n'|) ]]; then + echo -E - "" + echo -E - "${(%):-[%3FWARNING%f]: Console output during zsh initialization detected.}" + echo -E - "" + echo -E - "${(%):-When using Powerlevel10k with instant prompt, console output during zsh}" + echo -E - "${(%):-initialization may indicate issues.}" + echo -E - "" + echo -E - "${(%):-You can:}" + echo -E - "" + echo -E - "${(%):- - %BRecommended%b: Change %B$__p9k_zshrc_u%b so that it does not perform console I/O}" + echo -E - "${(%):- after the instant prompt preamble. See the link below for details.}" + echo -E - "" + echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + echo -E - "${(%):- * Zsh will start %Bquickly%b and prompt will update %Bsmoothly%b.}" + echo -E - "" + echo -E - "${(%):- - Suppress this warning either by running %Bp10k configure%b or by manually}" + echo -E - "${(%):- defining the following parameter:}" + echo -E - "" + echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=quiet}" + echo -E - "" + echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + echo -E - "${(%):- * Zsh will start %Bquickly%b but prompt will %Bjump down%b after initialization.}" + echo -E - "" + echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}" + echo -E - "${(%):- defining the following parameter:}" + echo -E - "" + echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}" + echo -E - "" + echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + echo -E - "${(%):- * Zsh will start %Bslowly%b.}" + echo -E - "" + echo -E - "${(%):- - Do nothing.}" + echo -E - "" + echo -E - "${(%):- * You %Bwill%b see this error message every time you start zsh.}" + echo -E - "${(%):- * Zsh will start %Bquickly%b but prompt will %Bjump down%b after initialization.}" + echo -E - "" + echo -E - "${(%):-For details, see:}" + if (( _p9k_term_has_href )); then + echo - "${(%):-\e]8;;https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt\ahttps://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt\e]8;;\a}" + else + echo - "${(%):-https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt}" + fi + echo -E - "" + echo - "${(%):-%3F-- console output produced during zsh initialization follows --%f}" + echo -E - "" + fi + fi + command cat -- $__p9k_instant_prompt_output + echo -nE - $sp + zf_rm -f -- $__p9k_instant_prompt_output + } 2>/dev/null + else + zf_rm -f -- $__p9k_instant_prompt_output 2>/dev/null + if (( _z4h_can_save_restore_screen == 1 && __p9k_instant_prompt_sourced >= 35 )); then + -z4h-restore-screen + unset _z4h_saved_screen + fi + print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed] + fi + prompt_opts=(percent subst sp cr) + if [[ $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT == 0 && $__p9k_instant_prompt_active == 2 ]]; then + >&2 echo -E - "" + >&2 echo -E - "${(%):-[%1FERROR%f]: When using Powerlevel10k with instant prompt, %Bprompt_cr%b must be unset.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):-You can:}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- - %BRecommended%b: call %Bp10k finalize%b at the end of %B$__p9k_zshrc_u%b.}" + >&2 echo -E - "${(%):- You can do this by running the following command:}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- %2Fecho%f %3F'(( ! \${+functions[p10k]\} )) || p10k finalize'%f >>! $__p9k_zshrc_u}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- - Find where %Bprompt_cr%b option gets sets in your zsh configs and stop setting it.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}" + >&2 echo -E - "${(%):- defining the following parameter:}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- - Do nothing.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- * You %Bwill%b see this error message every time you start zsh.}" + >&2 echo -E - "${(%):- * Zsh will start %Bquckly%b but %Bwith%b prompt flickering.}" + >&2 echo -E - "" + fi +} + +function _p9k_do_dump() { + eval "$__p9k_intro" + zle -F $1 + exec {1}>&- + (( _p9k__state_dump_fd )) || return + if (( ! _p9k__instant_prompt_disabled )); then + _p9k__instant_prompt_sig=$_p9k__cwd:$P9K_SSH:${(%):-%#} + _p9k_set_instant_prompt + _p9k_dump_instant_prompt + _p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1 + fi + _p9k_dump_state + _p9k__state_dump_scheduled=0 + _p9k__state_dump_fd=0 +} + +function _p9k_should_dump() { + (( __p9k_dumps_enabled && ! _p9k__state_dump_fd )) || return + (( _p9k__state_dump_scheduled || _p9k__prompt_idx == 1 )) && return + _p9k__instant_prompt_sig=$_p9k__cwd:$P9K_SSH:${(%):-%#} + (( ! $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig] )) +} + +# Must not run under `eval "$__p9k_intro_locale"`. Safe to run with any options. +function _p9k_restore_special_params() { + (( ! ${+_p9k__real_zle_rprompt_indent} )) || { + [[ -n "$_p9k__real_zle_rprompt_indent" ]] && + ZLE_RPROMPT_INDENT="$_p9k__real_zle_rprompt_indent" || + unset ZLE_RPROMPT_INDENT + unset _p9k__real_zle_rprompt_indent + } + (( ! ${+_p9k__real_lc_ctype} )) || { + LC_CTYPE="$_p9k__real_lc_ctype" + unset _p9k__real_lc_ctype + } + (( ! ${+_p9k__real_lc_all} )) || { + LC_ALL="$_p9k__real_lc_all" + unset _p9k__real_lc_all + } +} + +function _p9k_on_expand() { + (( _p9k__expanded && ! ${+__p9k_instant_prompt_active} )) && [[ "${langinfo[CODESET]}" == (utf|UTF)(-|)8 ]] && return + + eval "$__p9k_intro_no_locale" + + if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]]; then + _p9k_restore_special_params + if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]] && _p9k_init_locale; then + if [[ -n $LC_ALL ]]; then + _p9k__real_lc_all=$LC_ALL + LC_ALL=$__p9k_locale + else + _p9k__real_lc_ctype=$LC_CTYPE + LC_CTYPE=$__p9k_locale + fi + fi + fi + + (( _p9k__expanded && ! $+__p9k_instant_prompt_active )) && return + + eval "$__p9k_intro_locale" + + if (( ! _p9k__expanded )); then + if _p9k_should_dump; then + sysopen -o cloexec -ru _p9k__state_dump_fd /dev/null + zle -F $_p9k__state_dump_fd _p9k_do_dump + fi + + if [[ -z $P9K_TTY || $P9K_TTY == old && -n ${_P9K_TTY:#$TTY} ]]; then + typeset -gx P9K_TTY=old + if (( _POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS < 0 )); then + P9K_TTY=new + else + local -a stat + if zstat -A stat +ctime -- $TTY 2>/dev/null && + (( EPOCHREALTIME - stat[1] < _POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS )); then + P9K_TTY=new + fi + fi + fi + + typeset -gx _P9K_TTY=$TTY + + __p9k_reset_state=1 + + if (( _POWERLEVEL9K_PROMPT_ADD_NEWLINE )); then + if [[ $P9K_TTY == new ]]; then + _p9k__empty_line_i=3 + _p9k__display_v[2]=hide + elif [[ -z $_p9k_transient_prompt && $+functions[p10k-on-post-prompt] == 0 ]]; then + _p9k__empty_line_i=3 + _p9k__display_v[2]=print + else + unset _p9k__empty_line_i + _p9k__display_v[2]=show + fi + fi + + if (( _POWERLEVEL9K_SHOW_RULER )); then + if [[ $P9K_TTY == new ]]; then + _p9k__ruler_i=3 + _p9k__display_v[4]=hide + elif [[ -z $_p9k_transient_prompt && $+functions[p10k-on-post-prompt] == 0 ]]; then + _p9k__ruler_i=3 + _p9k__display_v[4]=print + else + unset _p9k__ruler_i + _p9k__display_v[4]=show + fi + fi + + (( _p9k__fully_initialized )) || _p9k_wrap_widgets + fi + + if (( $+__p9k_instant_prompt_active )); then + _p9k_clear_instant_prompt + unset __p9k_instant_prompt_active + fi + + if (( ! _p9k__expanded )); then + _p9k__expanded=1 + + (( _p9k__fully_initialized || ! $+functions[p10k-on-init] )) || p10k-on-init + + local pat idx var + for pat idx var in $_p9k_show_on_command; do + _p9k_display_segment $idx $var hide + done + + (( $+functions[p10k-on-pre-prompt] )) && p10k-on-pre-prompt + + if zle; then + local -a P9K_COMMANDS=($_p9k__last_commands) + local pat idx var + for pat idx var in $_p9k_show_on_command; do + if (( $P9K_COMMANDS[(I)$pat] )); then + _p9k_display_segment $idx $var show + else + _p9k_display_segment $idx $var hide + fi + done + if (( $+functions[p10k-on-post-widget] )); then + local -h WIDGET + unset WIDGET + p10k-on-post-widget + fi + else + if [[ $_p9k__display_v[2] == print && -n $_p9k_t[_p9k_empty_line_idx] ]]; then + print -rnP -- '%b%k%f%E'$_p9k_t[_p9k_empty_line_idx] + fi + if [[ $_p9k__display_v[4] == print ]]; then + () { + local ruler=$_p9k_t[_p9k_ruler_idx] + local -i _p9k__clm=COLUMNS _p9k__ind=${ZLE_RPROMPT_INDENT:-1} + (( __p9k_ksh_arrays )) && setopt ksh_arrays + (( __p9k_sh_glob )) && setopt sh_glob + setopt prompt_subst + print -rnP -- '%b%k%f%E'$ruler + } + fi + fi + + __p9k_reset_state=0 + _p9k__fully_initialized=1 + fi +} +functions -M _p9k_on_expand + +_p9k_precmd_impl() { + eval "$__p9k_intro" + + (( __p9k_enabled )) || return + + if ! zle || [[ -z $_p9k__param_sig ]]; then + if zle; then + __p9k_new_status=0 + __p9k_new_pipestatus=(0) + else + _p9k__must_restore_prompt=0 + fi + + if _p9k_must_init; then + local -i instant_prompt_disabled + if (( !__p9k_configured )); then + __p9k_configured=1 + if [[ -z "${parameters[(I)POWERLEVEL9K_*~POWERLEVEL9K_(MODE|CONFIG_FILE|GITSTATUS_DIR)]}" ]]; then + _p9k_can_configure -q + local -i ret=$? + if (( ret == 2 && $+__p9k_instant_prompt_active )); then + _p9k_clear_instant_prompt + unset __p9k_instant_prompt_active + _p9k_delete_instant_prompt + zf_rm -f -- $__p9k_dump_file{,.zwc} 2>/dev/null + () { + local key + while true; do + [[ -t 2 ]] + read -t0 -k key || break + done 2>/dev/null + } + _p9k_can_configure -q + ret=$? + fi + if (( ret == 0 )); then + if (( $+commands[git] )); then + ( + local -i pid + { + { /bin/sh "$__p9k_root_dir"/gitstatus/install /dev/null & } && pid=$! + ( builtin source "$__p9k_root_dir"/internal/wizard.zsh ) + } always { + if (( pid )); then + kill -- $pid 2>/dev/null + wait -- $pid 2>/dev/null + fi + } + ) + else + ( builtin source "$__p9k_root_dir"/internal/wizard.zsh ) + fi + if (( $? )); then + instant_prompt_disabled=1 + else + builtin source "$__p9k_cfg_path" + _p9k__force_must_init=1 + _p9k_must_init + fi + fi + fi + fi + typeset -gi _p9k__instant_prompt_disabled=instant_prompt_disabled + _p9k_init + fi + + if (( _p9k__timer_start )); then + typeset -gF P9K_COMMAND_DURATION_SECONDS=$((EPOCHREALTIME - _p9k__timer_start)) + else + unset P9K_COMMAND_DURATION_SECONDS + fi + _p9k_save_status + + if [[ $_p9k__preexec_cmd == [[:space:]]#(clear([[:space:]]##-(|x)(|T[a-zA-Z0-9-_\'\"]#))#|reset)[[:space:]]# && + $_p9k__status == 0 ]]; then + P9K_TTY=new + elif [[ $P9K_TTY == new && $_p9k__fully_initialized == 1 ]] && ! zle; then + P9K_TTY=old + fi + + _p9k__timer_start=0 + _p9k__region_active=0 + + unset _p9k__line_finished _p9k__preexec_cmd + _p9k__keymap=main + _p9k__zle_state=insert + + (( ++_p9k__prompt_idx )) + + if (( $+_p9k__iterm_cmd )); then + _p9k_iterm2_precmd $__p9k_new_status + fi + fi + + _p9k_fetch_cwd + + _p9k__refresh_reason=precmd + __p9k_reset_state=1 + + local -i fast_vcs + if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then + if [[ $_p9k__cwd != $~_POWERLEVEL9K_VCS_DISABLED_DIR_PATTERN ]]; then + local -F start_time=EPOCHREALTIME + unset _p9k__vcs + unset _p9k__vcs_timeout + local -i _p9k__vcs_called + _p9k_vcs_gitstatus + local -i fast_vcs=1 + fi + fi + + (( $+functions[_p9k_async_segments_compute] )) && _p9k_async_segments_compute + + _p9k__expanded=0 + + _p9k_set_prompt + + _p9k__refresh_reason='' + + if [[ $precmd_functions[1] != _p9k_do_nothing && $precmd_functions[(I)_p9k_do_nothing] != 0 ]]; then + precmd_functions=(_p9k_do_nothing ${(@)precmd_functions:#_p9k_do_nothing}) + fi + if [[ $precmd_functions[-1] != _p9k_precmd && $precmd_functions[(I)_p9k_precmd] != 0 ]]; then + precmd_functions=(${(@)precmd_functions:#_p9k_precmd} _p9k_precmd) + fi + if [[ $preexec_functions[1] != _p9k_preexec1 && $preexec_functions[(I)_p9k_preexec1] != 0 ]]; then + preexec_functions=(_p9k_preexec1 ${(@)preexec_functions:#_p9k_preexec1}) + fi + if [[ $preexec_functions[-1] != _p9k_preexec2 && $preexec_functions[(I)_p9k_preexec2] != 0 ]]; then + preexec_functions=(${(@)preexec_functions:#_p9k_preexec2} _p9k_preexec2) + fi + + if (( fast_vcs && _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then + if (( $+_p9k__vcs_timeout )); then + (( _p9k__vcs_timeout = _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS + start_time - EPOCHREALTIME )) + (( _p9k__vcs_timeout >= 0 )) || (( _p9k__vcs_timeout = 0 )) + gitstatus_process_results_p9k_ -t $_p9k__vcs_timeout POWERLEVEL9K + fi + if (( ! $+_p9k__vcs )); then + local _p9k__prompt _p9k__prompt_side=$_p9k_vcs_side _p9k__segment_name=vcs + local -i _p9k__has_upglob _p9k__segment_index=_p9k_vcs_index _p9k__line_index=_p9k_vcs_line_index + _p9k_vcs_render + typeset -g _p9k__vcs=$_p9k__prompt + fi + fi + + _p9k_worker_receive + __p9k_reset_state=0 +} + +_p9k_trapint() { + if (( __p9k_enabled )); then + eval "$__p9k_intro" + _p9k_deschedule_redraw + zle && _p9k_on_widget_zle-line-finish int + fi + return 0 +} + +_p9k_precmd() { + __p9k_new_status=$? + __p9k_new_pipestatus=($pipestatus) + + trap ":" INT + + [[ -o ksh_arrays ]] && __p9k_ksh_arrays=1 || __p9k_ksh_arrays=0 + [[ -o sh_glob ]] && __p9k_sh_glob=1 || __p9k_sh_glob=0 + _p9k_restore_special_params + + _p9k_precmd_impl + + [[ ${+__p9k_instant_prompt_active} == 0 || -o no_prompt_cr ]] || __p9k_instant_prompt_active=2 + setopt no_local_options no_prompt_bang prompt_percent prompt_subst prompt_cr prompt_sp + + # See https://www.zsh.org/mla/workers/2020/msg00612.html for the reason behind __p9k_trapint. + typeset -g __p9k_trapint='_p9k_trapint; return 130' + trap "$__p9k_trapint" INT + + : ${(%):-%b%k%s%u} +} + +function _p9k_reset_prompt() { + if (( __p9k_reset_state != 1 )) && zle && [[ -z $_p9k__line_finished ]]; then + __p9k_reset_state=0 + setopt prompt_subst + (( __p9k_ksh_arrays )) && setopt ksh_arrays + (( __p9k_sh_glob )) && setopt sh_glob + { + (( _p9k__can_hide_cursor )) && echoti civis + zle .reset-prompt + (( ${+functions[z4h]} )) || zle -R + } always { + (( _p9k__can_hide_cursor )) && print -rn -- $_p9k__cnorm + _p9k__cursor_hidden=0 + } + fi +} + +# Does ZSH have a certain off-by-one bug that triggers when PROMPT overflows to a new line? +# +# Bug: https://github.com/zsh-users/zsh/commit/d8d9fee137a5aa2cf9bf8314b06895bfc2a05518. +# ZSH_PATCHLEVEL=zsh-5.4.2-159-gd8d9fee13. Released in 5.5. +# +# Fix: https://github.com/zsh-users/zsh/commit/64d13738357c9b9c212adbe17f271716abbcf6ea. +# ZSH_PATCHLEVEL=zsh-5.7.1-50-g64d137383. Released in 5.7.2. +# +# Test: PROMPT="${(pl:$((COLUMNS))::-:)}<%1(l.%2(l.FAIL.PASS).FAIL)> " zsh -dfis <<= 50 )) + [[ $ZSH_VERSION == 5.<5-7>* && $ZSH_VERSION != 5.7.<2->* ]] +} + +typeset -g _p9k__param_pat +typeset -g _p9k__param_sig + +_p9k_init_vars() { + typeset -gF _p9k__gcloud_last_fetch_ts + typeset -g _p9k_gcloud_configuration + typeset -g _p9k_gcloud_account + typeset -g _p9k_gcloud_project_id + typeset -g _p9k_gcloud_project_name + + typeset -gi _p9k_term_has_href + + typeset -gi _p9k_vcs_index + typeset -gi _p9k_vcs_line_index + typeset -g _p9k_vcs_side + + typeset -ga _p9k_taskwarrior_meta_files + typeset -ga _p9k_taskwarrior_meta_non_files + typeset -g _p9k_taskwarrior_meta_sig + typeset -g _p9k_taskwarrior_data_dir + typeset -g _p9k__taskwarrior_functional=1 + typeset -ga _p9k_taskwarrior_data_files + typeset -ga _p9k_taskwarrior_data_non_files + typeset -g _p9k_taskwarrior_data_sig + typeset -gA _p9k_taskwarrior_counters + typeset -gF _p9k_taskwarrior_next_due + + typeset -ga _p9k_asdf_meta_files + typeset -ga _p9k_asdf_meta_non_files + typeset -g _p9k_asdf_meta_sig + + # plugin => installed_version_pattern + # example: (ruby '2.7.0|2.6.3|system' lua 'system' chubaka '1.0.0|system') + typeset -gA _p9k_asdf_plugins + + # example: (.ruby-version "ruby 1 chubaka 0") + # + # - "1" means parse-legacy-file is present + # - "chubaka" is another plugin that claims to be able to parse .ruby-version + typeset -gA _p9k_asdf_file_info + + # dir => mtime ':' ${(pj:\0:)files} + typeset -gA _p9k__asdf_dir2files + + # :file => mtime ':' ${(pj:\0:)tool_versions} + # plugin:file => mtime ':' version + typeset -gA _p9k_asdf_file2versions + + # filepath => mtime ':' word + typeset -gA _p9k__read_word_cache + # filepath:prefix => mtime ':' versions + typeset -gA _p9k__read_pyenv_like_version_file_cache + + # _p9k__parent_dirs and _p9k__parent_mtimes are parallel arrays. They are updated + # together with _p9k__cwd. _p9k__parent_mtimes[i] is mtime for _p9k__parent_dirs[i]. + # + # When _p9k__cwd is / or ~, both arrays are empty. When _p9k__cwd is ~/foo/bar, + # _p9k__parent_dirs is (/home/user/foo/bar /home/user/foo). When _p9k__cwd is + # /foo/bar, it's (/foo/bar /foo). + # + # $_p9k__parent_mtimes_i[i] == "$i:$_p9k__parent_mtimes[i]" + # $_p9k__parent_mtimes_s == "$_p9k__parent_mtimes_i". + typeset -ga _p9k__parent_dirs + typeset -ga _p9k__parent_mtimes + typeset -ga _p9k__parent_mtimes_i + typeset -g _p9k__parent_mtimes_s + + typeset -g _p9k__cwd + typeset -g _p9k__cwd_a + + # dir/pattern => dir mtime ':' num_matches + typeset -gA _p9k__glob_cache + + # dir/pattern => space-separated parent dir mtimes ' :' the first matching parent dir + # Note: ' :' is indeed the delimiter. + typeset -gA _p9k__upsearch_cache + + typeset -g _p9k_timewarrior_dir + typeset -gi _p9k_timewarrior_dir_mtime + typeset -gi _p9k_timewarrior_file_mtime + typeset -g _p9k_timewarrior_file_name + typeset -gA _p9k__prompt_char_saved + typeset -g _p9k__worker_pid + typeset -g _p9k__worker_req_fd + typeset -g _p9k__worker_resp_fd + typeset -g _p9k__worker_shell_pid + typeset -g _p9k__worker_file_prefix + typeset -gA _p9k__worker_request_map + typeset -ga _p9k__segment_cond_left + typeset -ga _p9k__segment_cond_right + typeset -ga _p9k__segment_val_left + typeset -ga _p9k__segment_val_right + typeset -ga _p9k_show_on_command + typeset -g _p9k__last_buffer + typeset -ga _p9k__last_commands + typeset -gi _p9k__fully_initialized + typeset -gi _p9k__must_restore_prompt + typeset -gi _p9k__restore_prompt_fd + typeset -gi _p9k__redraw_fd + typeset -gi _p9k__can_hide_cursor=$(( $+terminfo[civis] && $+terminfo[cnorm] )) + if (( _p9k__can_hide_cursor )); then + # See https://github.com/romkatv/powerlevel10k/issues/1699 + if [[ $terminfo[cnorm] == *$'\e[?25h'(|'\e'*) ]]; then + typeset -g _p9k__cnorm=$'\e[?25h' + else + typeset -g _p9k__cnorm=$terminfo[cnorm] + fi + fi + typeset -gi _p9k__cursor_hidden + typeset -gi _p9k__non_hermetic_expansion + typeset -g _p9k__time + typeset -g _p9k__date + typeset -gA _p9k_dumped_instant_prompt_sigs + typeset -g _p9k__instant_prompt_sig + typeset -g _p9k__instant_prompt + typeset -gi _p9k__state_dump_scheduled + typeset -gi _p9k__state_dump_fd + typeset -gi _p9k__prompt_idx + typeset -gi _p9k_reset_on_line_finish + typeset -gF _p9k__timer_start + typeset -gi _p9k__status + typeset -ga _p9k__pipestatus + typeset -g _p9k__ret + typeset -g _p9k__cache_key + typeset -ga _p9k__cache_val + typeset -g _p9k__cache_stat_meta + typeset -g _p9k__cache_stat_fprint + typeset -g _p9k__cache_fprint_key + typeset -gA _p9k_cache + typeset -gA _p9k__cache_ephemeral + typeset -ga _p9k_t + typeset -g _p9k__n + typeset -gi _p9k__i + typeset -g _p9k__bg + typeset -ga _p9k_left_join + typeset -ga _p9k_right_join + typeset -g _p9k__public_ip + typeset -g _p9k__todo_command + typeset -g _p9k__todo_file + typeset -g _p9k__git_dir + # git workdir => 1 if gitstatus is slow on it, 0 if it's fast. + typeset -gA _p9k_git_slow + # git workdir => the last state we've seen for it + typeset -gA _p9k__gitstatus_last + typeset -gF _p9k__gitstatus_start_time + typeset -g _p9k__prompt + typeset -g _p9k__rprompt + typeset -g _p9k__lprompt + typeset -g _p9k__prompt_side + typeset -g _p9k__segment_name + typeset -gi _p9k__segment_index + typeset -gi _p9k__line_index + typeset -g _p9k__refresh_reason + typeset -gi _p9k__region_active + typeset -ga _p9k_line_segments_left + typeset -ga _p9k_line_segments_right + typeset -ga _p9k_line_prefix_left + typeset -ga _p9k_line_prefix_right + typeset -ga _p9k_line_suffix_left + typeset -ga _p9k_line_suffix_right + typeset -ga _p9k_line_never_empty_right + typeset -ga _p9k_line_gap_post + typeset -g _p9k__xy + typeset -g _p9k__clm + typeset -g _p9k__p + typeset -gi _p9k__x + typeset -gi _p9k__y + typeset -gi _p9k__m + typeset -gi _p9k__d + typeset -gi _p9k__h + typeset -gi _p9k__ind + typeset -g _p9k_gap_pre + typeset -gi _p9k__ruler_i=3 + typeset -gi _p9k_ruler_idx + typeset -gi _p9k__empty_line_i=3 + typeset -gi _p9k_empty_line_idx + typeset -g _p9k_prompt_prefix_left + typeset -g _p9k_prompt_prefix_right + typeset -g _p9k_prompt_suffix_left + typeset -g _p9k_prompt_suffix_right + typeset -gi _p9k_emulate_zero_rprompt_indent + typeset -gA _p9k_battery_states + typeset -g _p9k_os + typeset -g _p9k_os_icon + typeset -g _p9k_color1 + typeset -g _p9k_color2 + typeset -g _p9k__s + typeset -g _p9k__ss + typeset -g _p9k__sss + typeset -g _p9k__v + typeset -g _p9k__c + typeset -g _p9k__e + typeset -g _p9k__w + typeset -gi _p9k__dir_len + typeset -gi _p9k_num_cpus + typeset -g _p9k__keymap + typeset -g _p9k__zle_state + typeset -g _p9k_uname + typeset -g _p9k_uname_o + typeset -g _p9k_uname_m + typeset -g _p9k_transient_prompt + typeset -g _p9k__last_prompt_pwd + typeset -gA _p9k_display_k + typeset -ga _p9k__display_v + + typeset -gA _p9k__dotnet_stat_cache + typeset -gA _p9k__dir_stat_cache + typeset -gi _p9k__expanded + typeset -gi _p9k__force_must_init + + typeset -g P9K_VISUAL_IDENTIFIER + typeset -g P9K_CONTENT + typeset -g P9K_GAP + typeset -g P9K_PROMPT=regular +} + +_p9k_init_params() { + _p9k_declare -F POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS 60 + + # invarint: _POWERLEVEL9K_INSTANT_PROMPT == (verbose|quiet|off) + # invariant: [[ ($_POWERLEVEL9K_INSTANT_PROMPT == off) == $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT ]] + _p9k_declare -s POWERLEVEL9K_INSTANT_PROMPT # verbose, quiet, off + if [[ $_POWERLEVEL9K_INSTANT_PROMPT == off ]]; then + typeset -gi _POWERLEVEL9K_DISABLE_INSTANT_PROMPT=1 + else + _p9k_declare -b POWERLEVEL9K_DISABLE_INSTANT_PROMPT 0 + if (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )); then + _POWERLEVEL9K_INSTANT_PROMPT=off + elif [[ $_POWERLEVEL9K_INSTANT_PROMPT != quiet ]]; then + _POWERLEVEL9K_INSTANT_PROMPT=verbose + fi + fi + + (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )) && _p9k__instant_prompt_disabled=1 + + _p9k_declare -s POWERLEVEL9K_TRANSIENT_PROMPT off + [[ $_POWERLEVEL9K_TRANSIENT_PROMPT == (off|always|same-dir) ]] || _POWERLEVEL9K_TRANSIENT_PROMPT=off + + _p9k_declare -b POWERLEVEL9K_TERM_SHELL_INTEGRATION 0 + if [[ __p9k_force_term_shell_integration -eq 1 || $ITERM_SHELL_INTEGRATION_INSTALLED == Yes ]]; then + _POWERLEVEL9K_TERM_SHELL_INTEGRATION=1 + fi + + _p9k_declare -s POWERLEVEL9K_WORKER_LOG_LEVEL + _p9k_declare -i POWERLEVEL9K_COMMANDS_MAX_TOKEN_COUNT 64 + _p9k_declare -a POWERLEVEL9K_HOOK_WIDGETS -- + _p9k_declare -b POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL 0 + _p9k_declare -b POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED 0 + _p9k_declare -b POWERLEVEL9K_DISABLE_HOT_RELOAD 0 + _p9k_declare -F POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS 5 + _p9k_declare -i POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES + _p9k_declare -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS -- context dir vcs + _p9k_declare -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS -- status root_indicator background_jobs history time + _p9k_declare -b POWERLEVEL9K_DISABLE_RPROMPT 0 + _p9k_declare -b POWERLEVEL9K_PROMPT_ADD_NEWLINE 0 + _p9k_declare -b POWERLEVEL9K_PROMPT_ON_NEWLINE 0 + _p9k_declare -b POWERLEVEL9K_RPROMPT_ON_NEWLINE 0 + _p9k_declare -b POWERLEVEL9K_SHOW_RULER 0 + _p9k_declare -i POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT 1 + _p9k_declare -s POWERLEVEL9K_COLOR_SCHEME dark + _p9k_declare -s POWERLEVEL9K_GITSTATUS_DIR "" + _p9k_declare -s POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN + _p9k_declare -b POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY 0 + _p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_LENGTH + _p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH + _p9k_declare -s POWERLEVEL9K_VCS_SHORTEN_STRATEGY + if [[ $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then + _p9k_declare -e POWERLEVEL9K_VCS_SHORTEN_DELIMITER '\u2026' + else + _p9k_declare -e POWERLEVEL9K_VCS_SHORTEN_DELIMITER '..' + fi + _p9k_declare -b POWERLEVEL9K_VCS_CONFLICTED_STATE 0 + _p9k_declare -b POWERLEVEL9K_HIDE_BRANCH_ICON 0 + _p9k_declare -b POWERLEVEL9K_VCS_HIDE_TAGS 0 + _p9k_declare -i POWERLEVEL9K_CHANGESET_HASH_LENGTH 8 + # Specifies the maximum number of elements in the cache. When the cache grows over this limit, + # it gets cleared. This is meant to avoid memory leaks when a rogue prompt is filling the cache + # with data. + _p9k_declare -i POWERLEVEL9K_MAX_CACHE_SIZE 10000 + _p9k_declare -e POWERLEVEL9K_ANACONDA_LEFT_DELIMITER "(" + _p9k_declare -e POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER ")" + _p9k_declare -b POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION 1 + _p9k_declare -b POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE 1 + _p9k_declare -b POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS 0 + _p9k_declare -b POWERLEVEL9K_DISK_USAGE_ONLY_WARNING 0 + _p9k_declare -i POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL 90 + _p9k_declare -i POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL 95 + _p9k_declare -i POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10 + _p9k_declare -i POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD 999 + _p9k_declare -b POWERLEVEL9K_BATTERY_VERBOSE 1 + _p9k_declare -a POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND -- + _p9k_declare -a POWERLEVEL9K_BATTERY_LEVEL_FOREGROUND -- + case $parameters[POWERLEVEL9K_BATTERY_STAGES] in + scalar*) typeset -ga _POWERLEVEL9K_BATTERY_STAGES=("${(@s::)${(g::)POWERLEVEL9K_BATTERY_STAGES}}");; + array*) typeset -ga _POWERLEVEL9K_BATTERY_STAGES=("${(@g::)POWERLEVEL9K_BATTERY_STAGES}");; + *) typeset -ga _POWERLEVEL9K_BATTERY_STAGES=();; + esac + local state + for state in CHARGED CHARGING LOW DISCONNECTED; do + _p9k_declare -i POWERLEVEL9K_BATTERY_${state}_HIDE_ABOVE_THRESHOLD $_POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD + local var=POWERLEVEL9K_BATTERY_${state}_STAGES + case $parameters[$var] in + scalar*) eval "typeset -ga _$var=(${(@qq)${(@s::)${(g::)${(P)var}}}})";; + array*) eval "typeset -ga _$var=(${(@qq)${(@g::)${(@P)var}}})";; + *) eval "typeset -ga _$var=(${(@qq)_POWERLEVEL9K_BATTERY_STAGES})";; + esac + local var=POWERLEVEL9K_BATTERY_${state}_LEVEL_BACKGROUND + case $parameters[$var] in + array*) eval "typeset -ga _$var=(${(@qq)${(@P)var}})";; + *) eval "typeset -ga _$var=(${(@qq)_POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND})";; + esac + local var=POWERLEVEL9K_BATTERY_${state}_LEVEL_FOREGROUND + case $parameters[$var] in + array*) eval "typeset -ga _$var=(${(@qq)${(@P)var}})";; + *) eval "typeset -ga _$var=(${(@qq)_POWERLEVEL9K_BATTERY_LEVEL_FOREGROUND})";; + esac + done + _p9k_declare -F POWERLEVEL9K_PUBLIC_IP_TIMEOUT 300 + _p9k_declare -a POWERLEVEL9K_PUBLIC_IP_METHODS -- dig curl wget + _p9k_declare -e POWERLEVEL9K_PUBLIC_IP_NONE "" + _p9k_declare -s POWERLEVEL9K_PUBLIC_IP_HOST "https://v4.ident.me/" + _p9k_declare -s POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE "" + _p9k_segment_in_use public_ip || _POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE= + _p9k_declare -b POWERLEVEL9K_ALWAYS_SHOW_CONTEXT 0 + _p9k_declare -b POWERLEVEL9K_ALWAYS_SHOW_USER 0 + _p9k_declare -e POWERLEVEL9K_CONTEXT_TEMPLATE "%n@%m" + _p9k_declare -e POWERLEVEL9K_USER_TEMPLATE "%n" + _p9k_declare -e POWERLEVEL9K_HOST_TEMPLATE "%m" + _p9k_declare -F POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3 + _p9k_declare -i POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION 2 + # Other options: "d h m s". + _p9k_declare -s POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT "H:M:S" + _p9k_declare -e POWERLEVEL9K_HOME_FOLDER_ABBREVIATION "~" + _p9k_declare -b POWERLEVEL9K_DIR_PATH_ABSOLUTE 0 + _p9k_declare -s POWERLEVEL9K_DIR_SHOW_WRITABLE '' + case $_POWERLEVEL9K_DIR_SHOW_WRITABLE in + true) _POWERLEVEL9K_DIR_SHOW_WRITABLE=1;; + v2) _POWERLEVEL9K_DIR_SHOW_WRITABLE=2;; + v3) _POWERLEVEL9K_DIR_SHOW_WRITABLE=3;; + *) _POWERLEVEL9K_DIR_SHOW_WRITABLE=0;; + esac + typeset -gi _POWERLEVEL9K_DIR_SHOW_WRITABLE + _p9k_declare -b POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER 0 + _p9k_declare -b POWERLEVEL9K_DIR_HYPERLINK 0 + _p9k_declare -s POWERLEVEL9K_SHORTEN_STRATEGY "" + local markers=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .ruby-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + ) + _p9k_declare -s POWERLEVEL9K_SHORTEN_FOLDER_MARKER "(${(j:|:)markers})" + # Shorten directory if it's longer than this even if there is space for it. + # The value can be either absolute (e.g., '80') or a percentage of terminal + # width (e.g, '50%'). If empty, directory will be shortened only when prompt + # doesn't fit. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique. + _p9k_declare -s POWERLEVEL9K_DIR_MAX_LENGTH 0 + # Individual elements are patterns. They are expanded with the options set + # by `emulate zsh && setopt extended_glob`. + _p9k_declare -a POWERLEVEL9K_DIR_PACKAGE_FILES -- package.json composer.json + # When dir is on the last prompt line, try to shorten it enough to leave at least this many + # columns for typing commands. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique. + _p9k_declare -i POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS 40 + # When dir is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. Applies + # only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique. + _p9k_declare -F POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT 50 + # POWERLEVEL9K_DIR_CLASSES allow you to specify custom styling and icons for different + # directories. + # + # POWERLEVEL9K_DIR_CLASSES must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. Icon. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there are no + # matches, there will be no icon and the styling is done according to POWERLEVEL9K_DIR_BACKGROUND, + # POWERLEVEL9K_DIR_FOREGROUND, etc. + # + # Example: + # + # POWERLEVEL9K_DIR_CLASSES=( + # '~/work(/*)#' WORK '(╯°□°)╯︵ ┻━┻' + # '~(/*)#' HOME '⌂' + # '*' DEFAULT '') + # + # POWERLEVEL9K_DIR_WORK_BACKGROUND=red + # POWERLEVEL9K_DIR_HOME_BACKGROUND=blue + # POWERLEVEL9K_DIR_DEFAULT_BACKGROUND=yellow + # + # With these settings, the current directory in the prompt may look like this: + # + # (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent + # + # ⌂ ~/best/powerlevel10k + _p9k_declare -a POWERLEVEL9K_DIR_CLASSES + _p9k_declare -i POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH + _p9k_declare -e POWERLEVEL9K_SHORTEN_DELIMITER + _p9k_declare -s POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER '' + case $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER in + first|last) _POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER+=:0;; + (first|last):(|-)<->);; + *) _POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=;; + esac + [[ -z $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER ]] && _POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER= + _p9k_declare -i POWERLEVEL9K_SHORTEN_DIR_LENGTH + _p9k_declare -s POWERLEVEL9K_IP_INTERFACE "" + : ${_POWERLEVEL9K_IP_INTERFACE:='.*'} + _p9k_segment_in_use ip || _POWERLEVEL9K_IP_INTERFACE= + _p9k_declare -s POWERLEVEL9K_VPN_IP_INTERFACE "(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)" + : ${_POWERLEVEL9K_VPN_IP_INTERFACE:='.*'} + _p9k_segment_in_use vpn_ip || _POWERLEVEL9K_VPN_IP_INTERFACE= + _p9k_declare -b POWERLEVEL9K_VPN_IP_SHOW_ALL 0 + _p9k_declare -i POWERLEVEL9K_LOAD_WHICH 5 + case $_POWERLEVEL9K_LOAD_WHICH in + 1) _POWERLEVEL9K_LOAD_WHICH=1;; + 15) _POWERLEVEL9K_LOAD_WHICH=3;; + *) _POWERLEVEL9K_LOAD_WHICH=2;; + esac + _p9k_declare -F POWERLEVEL9K_LOAD_WARNING_PCT 50 + _p9k_declare -F POWERLEVEL9K_LOAD_CRITICAL_PCT 70 + _p9k_declare -b POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY 0 + _p9k_declare -b POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY 0 + _p9k_declare -b POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY 1 + _p9k_declare -b POWERLEVEL9K_GO_VERSION_PROJECT_ONLY 1 + _p9k_declare -b POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY 1 + _p9k_declare -b POWERLEVEL9K_PERLBREW_PROJECT_ONLY 1 + _p9k_declare -b POWERLEVEL9K_PERLBREW_SHOW_PREFIX 0 + _p9k_declare -b POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY 0 + _p9k_declare -b POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_NODENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_NODENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_RBENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_RBENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_SCALAENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_SCALAENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_PHPENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_PHPENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_LUAENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_LUAENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_JENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_JENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_PLENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_PLENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -b POWERLEVEL9K_PYENV_SHOW_SYSTEM 1 + _p9k_declare -a POWERLEVEL9K_PYENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -a POWERLEVEL9K_GOENV_SOURCES -- shell local global + _p9k_declare -b POWERLEVEL9K_GOENV_SHOW_SYSTEM 1 + _p9k_declare -b POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW 0 + _p9k_declare -b POWERLEVEL9K_ASDF_SHOW_SYSTEM 1 + _p9k_declare -a POWERLEVEL9K_ASDF_SOURCES -- shell local global + local var + for var in ${parameters[(I)POWERLEVEL9K_ASDF_*_PROMPT_ALWAYS_SHOW]}; do + _p9k_declare -b $var $_POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW + done + for var in ${parameters[(I)POWERLEVEL9K_ASDF_*_SHOW_SYSTEM]}; do + _p9k_declare -b $var $_POWERLEVEL9K_ASDF_SHOW_SYSTEM + done + for var in ${parameters[(I)POWERLEVEL9K_ASDF_*_SOURCES]}; do + _p9k_declare -a $var -- $_POWERLEVEL9K_ASDF_SOURCES + done + _p9k_declare -b POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW 1 + _p9k_declare -a POWERLEVEL9K_HASKELL_STACK_SOURCES -- shell local + _p9k_declare -b POWERLEVEL9K_RVM_SHOW_GEMSET 0 + _p9k_declare -b POWERLEVEL9K_RVM_SHOW_PREFIX 0 + _p9k_declare -b POWERLEVEL9K_CHRUBY_SHOW_VERSION 1 + _p9k_declare -b POWERLEVEL9K_CHRUBY_SHOW_ENGINE 1 + _p9k_declare -s POWERLEVEL9K_CHRUBY_SHOW_ENGINE_PATTERN + if (( _POWERLEVEL9K_CHRUBY_SHOW_ENGINE )); then + : ${_POWERLEVEL9K_CHRUBY_SHOW_ENGINE_PATTERN=*} + fi + _p9k_declare -b POWERLEVEL9K_STATUS_CROSS 0 + _p9k_declare -b POWERLEVEL9K_STATUS_OK 1 + _p9k_declare -b POWERLEVEL9K_STATUS_OK_PIPE 1 + _p9k_declare -b POWERLEVEL9K_STATUS_ERROR 1 + _p9k_declare -b POWERLEVEL9K_STATUS_ERROR_PIPE 1 + _p9k_declare -b POWERLEVEL9K_STATUS_ERROR_SIGNAL 1 + _p9k_declare -b POWERLEVEL9K_STATUS_SHOW_PIPESTATUS 1 + _p9k_declare -b POWERLEVEL9K_STATUS_HIDE_SIGNAME 0 + _p9k_declare -b POWERLEVEL9K_STATUS_VERBOSE_SIGNAME 1 + _p9k_declare -b POWERLEVEL9K_STATUS_EXTENDED_STATES 0 + _p9k_declare -b POWERLEVEL9K_STATUS_VERBOSE 1 + _p9k_declare -b POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE 0 + _p9k_declare -e POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}" + _p9k_declare -s POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND 1 + _p9k_declare -b POWERLEVEL9K_SHOW_CHANGESET 0 + _p9k_declare -e POWERLEVEL9K_VCS_LOADING_TEXT loading + _p9k_declare -a POWERLEVEL9K_VCS_GIT_HOOKS -- vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname + _p9k_declare -a POWERLEVEL9K_VCS_HG_HOOKS -- vcs-detect-changes + _p9k_declare -a POWERLEVEL9K_VCS_SVN_HOOKS -- vcs-detect-changes svn-detect-changes + # If it takes longer than this to fetch git repo status, display the prompt with a greyed out + # vcs segment and fix it asynchronously when the results come it. + _p9k_declare -F POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS 0.01 + (( POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS >= 0 )) || (( POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS = 0 )) + _p9k_declare -a POWERLEVEL9K_VCS_BACKENDS -- git + (( $+commands[git] )) || _POWERLEVEL9K_VCS_BACKENDS=(${_POWERLEVEL9K_VCS_BACKENDS:#git}) + _p9k_declare -b POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING 0 + _p9k_declare -i POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY -1 + _p9k_declare -i POWERLEVEL9K_VCS_STAGED_MAX_NUM 1 + _p9k_declare -i POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM 1 + _p9k_declare -i POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM 1 + _p9k_declare -i POWERLEVEL9K_VCS_CONFLICTED_MAX_NUM 1 + _p9k_declare -i POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM -1 + _p9k_declare -i POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM -1 + _p9k_declare -b POWERLEVEL9K_VCS_RECURSE_UNTRACKED_DIRS 0 + _p9k_declare -b POWERLEVEL9K_DISABLE_GITSTATUS 0 + _p9k_declare -e POWERLEVEL9K_VI_INSERT_MODE_STRING "INSERT" + _p9k_declare -e POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL" + # VISUAL mode is shown as NORMAL unless POWERLEVEL9K_VI_VISUAL_MODE_STRING is explicitly set. + _p9k_declare -e POWERLEVEL9K_VI_VISUAL_MODE_STRING + # OVERWRITE mode is shown as INSERT unless POWERLEVEL9K_VI_OVERWRITE_MODE_STRING is explicitly set. + _p9k_declare -e POWERLEVEL9K_VI_OVERWRITE_MODE_STRING + _p9k_declare -s POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV true + _p9k_declare -b POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION 1 + _p9k_declare -e POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER "(" + _p9k_declare -e POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER ")" + _p9k_declare -a POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES -- virtualenv venv .venv env + _POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES="${(j.|.)_POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES}" + _p9k_declare -b POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION 1 + _p9k_declare -e POWERLEVEL9K_NODEENV_LEFT_DELIMITER "[" + _p9k_declare -e POWERLEVEL9K_NODEENV_RIGHT_DELIMITER "]" + _p9k_declare -b POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE 1 + _p9k_declare -a POWERLEVEL9K_KUBECONTEXT_SHORTEN -- + # Defines context classes for the purpose of applying different styling to different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES must be an array with even number of elements. The first + # element in each pair defines a pattern against which the current context (in the format it is + # displayed in the prompt) gets matched. The second element defines context class. Patterns are + # tried in order. The first match wins. + # + # If a non-empty class is assigned to a context, the segment is styled with + # POWERLEVEL9K_KUBECONTEXT__BACKGROUND and POWERLEVEL9K_KUBECONTEXT__FOREGROUND where is + # uppercased . Otherwise with POWERLEVEL9K_KUBECONTEXT_BACKGROUND and + # POWERLEVEL9K_KUBECONTEXT_FOREGROUND. + # + # Example: Use red background for contexts containing "prod", green for "testing" and yellow for + # everything else. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' prod + # '*testing*' testing + # '*' other) + # + # POWERLEVEL9K_KUBECONTEXT_PROD_BACKGROUND=red + # POWERLEVEL9K_KUBECONTEXT_TESTING_BACKGROUND=green + # POWERLEVEL9K_KUBECONTEXT_OTHER_BACKGROUND=yellow + _p9k_declare -a POWERLEVEL9K_KUBECONTEXT_CLASSES -- + _p9k_declare -a POWERLEVEL9K_AWS_CLASSES -- + _p9k_declare -a POWERLEVEL9K_AZURE_CLASSES -- + _p9k_declare -a POWERLEVEL9K_TERRAFORM_CLASSES -- + _p9k_declare -b POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT 0 + _p9k_declare -a POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES -- 'service_account:*' SERVICE_ACCOUNT + # Specifies the format of java version. + # + # POWERLEVEL9K_JAVA_VERSION_FULL=true => 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03 + # POWERLEVEL9K_JAVA_VERSION_FULL=false => 1.8.0_212 + # + # These correspond to `java -fullversion` and `java -version` respectively. + _p9k_declare -b POWERLEVEL9K_JAVA_VERSION_FULL 1 + _p9k_declare -b POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE 0 + + # Format for the current time: 09:51:02. See `man 3 strftime`. + _p9k_declare -e POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}" + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + _p9k_declare -b POWERLEVEL9K_TIME_UPDATE_ON_COMMAND 0 + # If set to true, time will update every second. + _p9k_declare -b POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME 0 + + _p9k_declare -b POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH 0 + typeset -g _p9k_nix_shell_cond='${IN_NIX_SHELL:#0}' + if (( _POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH )); then + _p9k_nix_shell_cond+='${path[(r)/nix/store/*]}' + fi + + local -i i=1 + while (( i <= $#_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS )); do + local segment=${${(U)_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[i]}//İ/I} + local var=POWERLEVEL9K_${segment}_LEFT_DISABLED + (( $+parameters[$var] )) || var=POWERLEVEL9K_${segment}_DISABLED + if [[ ${(P)var} == true ]]; then + _POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[i,i]=() + else + (( ++i )) + fi + done + + local -i i=1 + while (( i <= $#_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS )); do + local segment=${${(U)_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[i]}//İ/I} + local var=POWERLEVEL9K_${segment}_RIGHT_DISABLED + (( $+parameters[$var] )) || var=POWERLEVEL9K_${segment}_DISABLED + if [[ ${(P)var} == true ]]; then + _POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[i,i]=() + else + (( ++i )) + fi + done + + local var + for var in ${(@)${parameters[(I)POWERLEVEL9K_*]}/(#m)*/${(M)${parameters[_$MATCH]-$MATCH}:#$MATCH}}; do + case $parameters[$var] in + (scalar|integer|float)*) typeset -g _$var=${(P)var};; + array*) eval 'typeset -ga '_$var'=("${'$var'[@]}")';; + esac + done +} + +function _p9k_on_widget_zle-keymap-select() { _p9k_check_visual_mode; __p9k_reset_state=2; } +function _p9k_on_widget_overwrite-mode() { _p9k_check_visual_mode; __p9k_reset_state=2; } +function _p9k_on_widget_vi-replace() { _p9k_check_visual_mode; __p9k_reset_state=2; } + +if [[ $ZSH_VERSION == (5.<3->*|<6->.*) ]]; then + function _p9k_check_visual_mode() { + [[ ${KEYMAP:-} == vicmd ]] || return 0 + local region=${${REGION_ACTIVE:-0}/2/1} + [[ $region != $_p9k__region_active ]] || return 0 + _p9k__region_active=$region + __p9k_reset_state=2 + } +else + function _p9k_check_visual_mode() {} +fi + +function _p9k_on_widget_visual-mode() { _p9k_check_visual_mode; } +function _p9k_on_widget_visual-line-mode() { _p9k_check_visual_mode; } +function _p9k_on_widget_deactivate-region() { _p9k_check_visual_mode; } + +function _p9k_on_widget_zle-line-init() { + (( _p9k__cursor_hidden )) || return 0 + _p9k__cursor_hidden=0 + print -rn -- $_p9k__cnorm +} + +function _p9k_on_widget_zle-line-finish() { + (( $+_p9k__line_finished )) && return + + local P9K_PROMPT=transient + + _p9k__line_finished= + (( _p9k_reset_on_line_finish )) && __p9k_reset_state=2 + (( $+functions[p10k-on-post-prompt] )) && p10k-on-post-prompt + + local -i optimized + + if [[ -n $_p9k_transient_prompt ]]; then + if [[ $_POWERLEVEL9K_TRANSIENT_PROMPT == always || $_p9k__cwd == $_p9k__last_prompt_pwd ]]; then + optimized=1 + __p9k_reset_state=2 + else + _p9k__last_prompt_pwd=$_p9k__cwd + fi + fi + + if [[ $1 == int ]]; then + _p9k__must_restore_prompt=1 + if (( !_p9k__restore_prompt_fd )); then + sysopen -o cloexec -ru _p9k__restore_prompt_fd /dev/null + zle -F $_p9k__restore_prompt_fd _p9k_restore_prompt + fi + fi + + if (( __p9k_reset_state == 2 )); then + if (( optimized )); then + RPROMPT= PROMPT=$_p9k_transient_prompt _p9k_reset_prompt + else + _p9k_reset_prompt + fi + fi + + _p9k__line_finished='%{%}' +} + +function _p9k_on_widget_send-break() { + _p9k_on_widget_zle-line-finish int +} + +# Usage example: _p9k_display_segment 58 _p9k__1rkubecontext hide +function _p9k_display_segment() { + [[ $_p9k__display_v[$1] == $3 ]] && return + _p9k__display_v[$1]=$3 + [[ $3 == hide ]] && typeset -g $2= || unset $2 + __p9k_reset_state=2 +} + +function _p9k_redraw() { + zle -F $1 + exec {1}>&- + _p9k__redraw_fd=0 + + () { + local -h WIDGET=zle-line-pre-redraw + _p9k_widget_hook '' + } +} + +function _p9k_deschedule_redraw() { + (( _p9k__redraw_fd )) || return + zle -F $_p9k__redraw_fd + exec {_p9k__redraw_fd}>&- + _p9k__redraw_fd=0 +} + +function _p9k_widget_hook() { + _p9k_deschedule_redraw + + if (( ${+functions[p10k-on-post-widget]} || ${#_p9k_show_on_command} )); then + local -a P9K_COMMANDS + if [[ "$_p9k__last_buffer" == "$PREBUFFER$BUFFER" ]]; then + P9K_COMMANDS=(${_p9k__last_commands[@]}) + else + _p9k__last_buffer="$PREBUFFER$BUFFER" + if [[ -n "$_p9k__last_buffer" ]]; then + # this must run with user options + _p9k_parse_buffer "$_p9k__last_buffer" $_POWERLEVEL9K_COMMANDS_MAX_TOKEN_COUNT + fi + _p9k__last_commands=(${P9K_COMMANDS[@]}) + fi + fi + + eval "$__p9k_intro" + (( _p9k__restore_prompt_fd )) && _p9k_restore_prompt $_p9k__restore_prompt_fd + if [[ $1 == (clear-screen|z4h-clear-screen-*-top) ]]; then + P9K_TTY=new + _p9k__expanded=0 + _p9k_reset_prompt + fi + __p9k_reset_state=1 + _p9k_check_visual_mode + local pat idx var + for pat idx var in $_p9k_show_on_command; do + if (( $P9K_COMMANDS[(I)$pat] )); then + _p9k_display_segment $idx $var show + else + _p9k_display_segment $idx $var hide + fi + done + (( $+functions[p10k-on-post-widget] )) && p10k-on-post-widget "${@:2}" + (( $+functions[_p9k_on_widget_$1] )) && _p9k_on_widget_$1 + (( __p9k_reset_state == 2 )) && _p9k_reset_prompt + __p9k_reset_state=0 +} + +function _p9k_widget() { + local f=${widgets[._p9k_orig_$1]:-} + local -i res + [[ -z $f ]] || { + [[ $f == user:-z4h-* ]] && { + "${f#user:}" "${@:2}" + res=$? + } || { + zle ._p9k_orig_$1 -- "${@:2}" + res=$? + } + } + (( ! __p9k_enabled )) || [[ $CONTEXT != start ]] || _p9k_widget_hook "$@" + return res +} + +function _p9k_widget_zle-line-pre-redraw-impl() { + (( __p9k_enabled )) && [[ $CONTEXT == start ]] || return 0 + ! (( ${+functions[p10k-on-post-widget]} || ${#_p9k_show_on_command} || _p9k__restore_prompt_fd || _p9k__redraw_fd )) && + [[ ${KEYMAP:-} != vicmd ]] && + return + (( PENDING || KEYS_QUEUED_COUNT )) && { + (( _p9k__redraw_fd )) || { + sysopen -o cloexec -ru _p9k__redraw_fd /dev/null + zle -F $_p9k__redraw_fd _p9k_redraw + } + return + } + _p9k_widget_hook zle-line-pre-redraw +} + +function _p9k_widget_send-break() { + (( ! __p9k_enabled )) || [[ $CONTEXT != start ]] || { + _p9k_widget_hook send-break "$@" + } + local f=${widgets[._p9k_orig_send-break]:-} + [[ -z $f ]] || zle ._p9k_orig_send-break -- "$@" +} + +typeset -gi __p9k_widgets_wrapped=0 + +function _p9k_wrap_widgets() { + (( __p9k_widgets_wrapped )) && return + + typeset -gir __p9k_widgets_wrapped=1 + local -a widget_list + if [[ $ZSH_VERSION == (5.<3->*|<6->.*) ]]; then + local -aU widget_list=( + zle-line-pre-redraw + zle-line-init + zle-line-finish + zle-keymap-select + overwrite-mode + vi-replace + visual-mode + visual-line-mode + deactivate-region + clear-screen + z4h-clear-screen-soft-top + z4h-clear-screen-hard-top + send-break + $_POWERLEVEL9K_HOOK_WIDGETS + ) + else + # There is no zle-line-pre-redraw in zsh < 5.3, so we have to wrap all widgets + # with key bindings. This costs extra 3ms: 1.5ms to fetch the list of widgets and + # another 1.5ms to wrap them. + if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then + local tmpdir=$TMPDIR + else + local tmpdir=/tmp + fi + local keymap tmp=$tmpdir/p10k.bindings.$sysparams[pid] + { + for keymap in $keymaps; do bindkey -M $keymap; done >$tmp + local -aU widget_list=( + zle-isearch-exit + zle-isearch-update + zle-line-init + zle-line-finish + zle-history-line-set + zle-keymap-select + send-break + $_POWERLEVEL9K_HOOK_WIDGETS + ${${${(f)"$(<$tmp)"}##* }:#(*\"|.*)} + ) + } always { + zf_rm -f -- $tmp + } + fi + + local widget + for widget in $widget_list; do + if (( ! $+functions[_p9k_widget_$widget] )); then + functions[_p9k_widget_$widget]='_p9k_widget '${(q)widget}' "$@"' + fi + if [[ $widget == zle-* && + $widgets[$widget] == user:azhw:* && + $functions[add-zle-hook-widget] ]]; then + add-zle-hook-widget $widget _p9k_widget_$widget + else + # The leading dot is to work around bugs in zsh-syntax-highlighting. + zle -A $widget ._p9k_orig_$widget + zle -N $widget _p9k_widget_$widget + fi + done 2>/dev/null # `zle -A` fails for inexisting widgets and complains to stderr + + case ${widgets[._p9k_orig_zle-line-pre-redraw]:-} in + user:-z4h-zle-line-pre-redraw) + function _p9k_widget_zle-line-pre-redraw() { + -z4h-zle-line-pre-redraw "$@" + _p9k_widget_zle-line-pre-redraw-impl + } + ;; + ?*) + function _p9k_widget_zle-line-pre-redraw() { + zle ._p9k_orig_zle-line-pre-redraw -- "$@" + local -i res=$? + _p9k_widget_zle-line-pre-redraw-impl + return res + } + ;; + '') + function _p9k_widget_zle-line-pre-redraw() { + _p9k_widget_zle-line-pre-redraw-impl + } + ;; + esac +} + +function _p9k_restore_prompt() { + eval "$__p9k_intro" + zle -F $1 + exec {1}>&- + _p9k__restore_prompt_fd=0 + + (( _p9k__must_restore_prompt )) || return 0 + _p9k__must_restore_prompt=0 + + unset _p9k__line_finished + _p9k__refresh_reason=restore + _p9k_set_prompt + _p9k__refresh_reason= + + _p9k__expanded=0 + _p9k_reset_prompt +} + +prompt__p9k_internal_nothing() { _p9k__prompt+='${_p9k__sss::=}'; } +instant_prompt__p9k_internal_nothing() { prompt__p9k_internal_nothing; } + +# _p9k_build_gap_post line_number +_p9k_build_gap_post() { + if [[ $1 == 1 ]]; then + local kind_l=first kind_u=FIRST + else + local kind_l=newline kind_u=NEWLINE + fi + _p9k_get_icon '' MULTILINE_${kind_u}_PROMPT_GAP_CHAR + local char=${_p9k__ret:- } + _p9k_prompt_length $char + if (( _p9k__ret != 1 || $#char != 1 )); then + >&2 print -rP -- "%F{red}WARNING!%f %BMULTILINE_${kind_u}_PROMPT_GAP_CHAR%b is not one character long. Will use ' '." + >&2 print -rP -- "Either change the value of %BPOWERLEVEL9K_MULTILINE_${kind_u}_PROMPT_GAP_CHAR%b or remove it." + char=' ' + fi + local style + _p9k_color prompt_multiline_${kind_l}_prompt_gap BACKGROUND "" + [[ -n $_p9k__ret ]] && _p9k_background $_p9k__ret + style+=$_p9k__ret + _p9k_color prompt_multiline_${kind_l}_prompt_gap FOREGROUND "" + [[ -n $_p9k__ret ]] && _p9k_foreground $_p9k__ret + style+=$_p9k__ret + _p9k_escape_style $style + style=$_p9k__ret + local exp=_POWERLEVEL9K_MULTILINE_${kind_u}_PROMPT_GAP_EXPANSION + (( $+parameters[$exp] )) && exp=${(P)exp} || exp='${P9K_GAP}' + [[ $char == '.' ]] && local s=',' || local s='.' + _p9k__ret=$'${${_p9k__g+\n}:-'$style'${${${_p9k__m:#-*}:+' + _p9k__ret+='${${_p9k__'$1'g+${(pl.$((_p9k__m+1)).. .)}}:-' + if [[ $exp == '${P9K_GAP}' ]]; then + _p9k__ret+='${(pl'$s'$((_p9k__m+1))'$s$s$char$s')}' + else + _p9k__ret+='${${P9K_GAP::=${(pl'$s'$((_p9k__m+1))'$s$s$char$s')}}+}' + _p9k__ret+='${:-"'$exp'"}' + style=1 + fi + _p9k__ret+='}' + if (( __p9k_ksh_arrays )); then + _p9k__ret+=$'$_p9k__rprompt${_p9k_t[$((!_p9k__ind))]}}:-\n}' + else + _p9k__ret+=$'$_p9k__rprompt${_p9k_t[$((1+!_p9k__ind))]}}:-\n}' + fi + [[ -n $style ]] && _p9k__ret+='%b%k%f' + _p9k__ret+='}' +} + +_p9k_init_lines() { + local -a left_segments=($_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS) + local -a right_segments=($_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS) + + if (( _POWERLEVEL9K_PROMPT_ON_NEWLINE )); then + left_segments+=(newline _p9k_internal_nothing) + fi + + local -i num_left_lines=$((1 + ${#${(@M)left_segments:#newline}})) + local -i num_right_lines=$((1 + ${#${(@M)right_segments:#newline}})) + if (( num_right_lines > num_left_lines )); then + repeat $((num_right_lines - num_left_lines)) left_segments=(newline $left_segments) + local -i num_lines=num_right_lines + else + if (( _POWERLEVEL9K_RPROMPT_ON_NEWLINE )); then + repeat $((num_left_lines - num_right_lines)) right_segments=(newline $right_segments) + else + repeat $((num_left_lines - num_right_lines)) right_segments+=newline + fi + local -i num_lines=num_left_lines + fi + + local -i i + for i in {1..$num_lines}; do + local -i left_end=${left_segments[(i)newline]} + local -i right_end=${right_segments[(i)newline]} + _p9k_line_segments_left+="${(pj:\0:)left_segments[1,left_end-1]}" + _p9k_line_segments_right+="${(pj:\0:)right_segments[1,right_end-1]}" + (( left_end > $#left_segments )) && left_segments=() || shift left_end left_segments + (( right_end > $#right_segments )) && right_segments=() || shift right_end right_segments + + _p9k_get_icon '' LEFT_SEGMENT_SEPARATOR + _p9k_get_icon 'prompt_empty_line' LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL $_p9k__ret + _p9k_escape $_p9k__ret + _p9k_line_prefix_left+='${_p9k__'$i'l-${${:-${_p9k__bg::=NONE}${_p9k__i::=0}${_p9k__sss::=%f'$_p9k__ret'}}+}' + _p9k_line_suffix_left+='%b%k$_p9k__sss%b%k%f' + + _p9k_escape ${(g::)_POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL} + [[ -n $_p9k__ret ]] && _p9k_line_never_empty_right+=1 || _p9k_line_never_empty_right+=0 + _p9k_line_prefix_right+='${_p9k__'$i'r-${${:-${_p9k__bg::=NONE}${_p9k__i::=0}${_p9k__sss::='$_p9k__ret'}}+}' + _p9k_line_suffix_right+='$_p9k__sss%b%k%f}' # gets overridden for _p9k_emulate_zero_rprompt_indent + if (( i == num_lines )); then + # it's safe to use _p9k_prompt_length on the last line because it cannot have prompt connection + _p9k_prompt_length ${(e)_p9k__ret} + (( _p9k__ret )) || _p9k_line_never_empty_right[-1]=0 + fi + done + + _p9k_get_icon '' LEFT_SEGMENT_END_SEPARATOR + if [[ -n $_p9k__ret ]]; then + _p9k__ret+=%b%k%f + # Not escaped for historical reasons. + _p9k__ret='${:-"'$_p9k__ret'"}' + if (( _POWERLEVEL9K_PROMPT_ON_NEWLINE )); then + _p9k_line_suffix_left[-2]+=$_p9k__ret + else + _p9k_line_suffix_left[-1]+=$_p9k__ret + fi + fi + + for i in {1..$num_lines}; do _p9k_line_suffix_left[i]+='}'; done + + if (( num_lines > 1 )); then + for i in {1..$((num_lines-1))}; do + _p9k_build_gap_post $i + _p9k_line_gap_post+=$_p9k__ret + done + + if [[ $+_POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then + _p9k_get_icon '' MULTILINE_FIRST_PROMPT_PREFIX + if [[ -n $_p9k__ret ]]; then + [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f + # Not escaped for historical reasons. + _p9k__ret='${_p9k__1l_frame-"'$_p9k__ret'"}' + _p9k_line_prefix_left[1]=$_p9k__ret$_p9k_line_prefix_left[1] + fi + fi + + if [[ $+_POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then + _p9k_get_icon '' MULTILINE_LAST_PROMPT_PREFIX + if [[ -n $_p9k__ret ]]; then + [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f + # Not escaped for historical reasons. + _p9k__ret='${_p9k__'$num_lines'l_frame-"'$_p9k__ret'"}' + _p9k_line_prefix_left[-1]=$_p9k__ret$_p9k_line_prefix_left[-1] + fi + fi + + _p9k_get_icon '' MULTILINE_FIRST_PROMPT_SUFFIX + if [[ -n $_p9k__ret ]]; then + [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f + _p9k_line_suffix_right[1]+='${_p9k__1r_frame-'${(qqq)_p9k__ret}'}' + _p9k_line_never_empty_right[1]=1 + fi + + _p9k_get_icon '' MULTILINE_LAST_PROMPT_SUFFIX + if [[ -n $_p9k__ret ]]; then + [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f + _p9k_line_suffix_right[-1]+='${_p9k__'$num_lines'r_frame-'${(qqq)_p9k__ret}'}' + # it's safe to use _p9k_prompt_length on the last line because it cannot have prompt connection + _p9k_prompt_length $_p9k__ret + (( _p9k__ret )) && _p9k_line_never_empty_right[-1]=1 + fi + + if (( num_lines > 2 )); then + if [[ $+_POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then + _p9k_get_icon '' MULTILINE_NEWLINE_PROMPT_PREFIX + if [[ -n $_p9k__ret ]]; then + [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f + for i in {2..$((num_lines-1))}; do + # Not escaped for historical reasons. + _p9k_line_prefix_left[i]='${_p9k__'$i'l_frame-"'$_p9k__ret'"}'$_p9k_line_prefix_left[i] + done + fi + fi + + _p9k_get_icon '' MULTILINE_NEWLINE_PROMPT_SUFFIX + if [[ -n $_p9k__ret ]]; then + [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f + for i in {2..$((num_lines-1))}; do + _p9k_line_suffix_right[i]+='${_p9k__'$i'r_frame-'${(qqq)_p9k__ret}'}' + done + _p9k_line_never_empty_right[2,-2]=${(@)_p9k_line_never_empty_right[2,-2]/0/1} + fi + fi + fi +} + +_p9k_all_params_eq() { + local key + for key in ${parameters[(I)${~1}]}; do + [[ ${(P)key} == $2 ]] || return + done +} + +_p9k_init_display() { + _p9k_display_k=(empty_line 1 ruler 3) + local -i n=3 i + local name + for i in {1..$#_p9k_line_segments_left}; do + local -i j=$((-$#_p9k_line_segments_left+i-1)) + _p9k_display_k+=( + $i $((n+=2)) $j $n + $i/left_frame $((n+=2)) $j/left_frame $n + $i/right_frame $((n+=2)) $j/right_frame $n + $i/left $((n+=2)) $j/left $n + $i/right $((n+=2)) $j/right $n + $i/gap $((n+=2)) $j/gap $n) + for name in ${${(@0)_p9k_line_segments_left[i]}%_joined}; do + _p9k_display_k+=($i/left/$name $((n+=2)) $j/left/$name $n) + done + for name in ${${(@0)_p9k_line_segments_right[i]}%_joined}; do + _p9k_display_k+=($i/right/$name $((n+=2)) $j/right/$name $n) + done + done +} + +_p9k_init_prompt() { + _p9k_t=($'\n' $'%{\n%}' '') + _p9k_prompt_overflow_bug && _p9k_t[2]=$'%{%G\n%}' + + _p9k_init_lines + + _p9k_gap_pre='${${:-${_p9k__x::=0}${_p9k__y::=1024}${_p9k__p::=$_p9k__lprompt$_p9k__rprompt}' + repeat 10; do + _p9k_gap_pre+='${_p9k__m::=$(((_p9k__x+_p9k__y)/2))}' + _p9k_gap_pre+='${_p9k__xy::=${${(%):-$_p9k__p%$_p9k__m(l./$_p9k__m;$_p9k__y./$_p9k__x;$_p9k__m)}##*/}}' + _p9k_gap_pre+='${_p9k__x::=${_p9k__xy%;*}}' + _p9k_gap_pre+='${_p9k__y::=${_p9k__xy#*;}}' + done + _p9k_gap_pre+='${_p9k__m::=$((_p9k__clm-_p9k__x-_p9k__ind-1))}' + _p9k_gap_pre+='}+}' + + _p9k_prompt_prefix_left='${${_p9k__clm::=$COLUMNS}+}${${COLUMNS::=1024}+}' + _p9k_prompt_prefix_right='${_p9k__'$#_p9k_line_segments_left'-${${_p9k__clm::=$COLUMNS}+}${${COLUMNS::=1024}+}' + _p9k_prompt_suffix_left='${${COLUMNS::=$_p9k__clm}+}' + _p9k_prompt_suffix_right='${${COLUMNS::=$_p9k__clm}+}}' + + if _p9k_segment_in_use vi_mode || _p9k_segment_in_use prompt_char; then + _p9k_prompt_prefix_left+='${${_p9k__keymap::=${KEYMAP:-$_p9k__keymap}}+}' + fi + if { _p9k_segment_in_use vi_mode && (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )) } || + { _p9k_segment_in_use prompt_char && (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )) }; then + _p9k_prompt_prefix_left+='${${_p9k__zle_state::=${ZLE_STATE:-$_p9k__zle_state}}+}' + fi + _p9k_prompt_prefix_left+='%b%k%f' + + # Bug fixed in: https://github.com/zsh-users/zsh/commit/3eea35d0853bddae13fa6f122669935a01618bf9. + # If affects most terminals when RPROMPT is non-empty and ZLE_RPROMPT_INDENT is zero. + # We can work around it as long as RPROMPT ends with a space. + if [[ -n $_p9k_line_segments_right[-1] && $_p9k_line_never_empty_right[-1] == 0 && + $ZLE_RPROMPT_INDENT == 0 ]] && + _p9k_all_params_eq '_POWERLEVEL9K_*WHITESPACE_BETWEEN_RIGHT_SEGMENTS' ' ' && + _p9k_all_params_eq '_POWERLEVEL9K_*RIGHT_RIGHT_WHITESPACE' ' ' && + _p9k_all_params_eq '_POWERLEVEL9K_*RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL' '' && + [[ $ZSH_VERSION != (5.7.<2->*|5.<8->*|<6->.*) ]]; then + _p9k_emulate_zero_rprompt_indent=1 + _p9k_prompt_prefix_left+='${${:-${_p9k__real_zle_rprompt_indent:=$ZLE_RPROMPT_INDENT}${ZLE_RPROMPT_INDENT::=1}${_p9k__ind::=0}}+}' + _p9k_line_suffix_right[-1]='${_p9k__sss:+${_p9k__sss% }%E}}' + else + _p9k_emulate_zero_rprompt_indent=0 + _p9k_prompt_prefix_left+='${${_p9k__ind::=${${ZLE_RPROMPT_INDENT:-1}/#-*/0}}+}' + fi + + if (( _POWERLEVEL9K_TERM_SHELL_INTEGRATION )); then + _p9k_prompt_prefix_left+=$'%{\e]133;A\a%}' + _p9k_prompt_suffix_left+=$'%{\e]133;B\a%}' + if (( $+_z4h_iterm_cmd && _z4h_can_save_restore_screen == 1 )); then + _p9k_prompt_prefix_left+=$'%{\ePtmux;\e\e]133;A\a\e\\%}' + _p9k_prompt_suffix_left+=$'%{\ePtmux;\e\e]133;B\a\e\\%}' + fi + fi + + if (( _POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT > 0 )); then + _p9k_t+=${(pl.$_POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT..\n.)} + else + _p9k_t+='' + fi + _p9k_empty_line_idx=$#_p9k_t + if (( __p9k_ksh_arrays )); then + _p9k_prompt_prefix_left+='${_p9k_t[${_p9k__empty_line_i:-'$#_p9k_t'}-1]}' + else + _p9k_prompt_prefix_left+='${_p9k_t[${_p9k__empty_line_i:-'$#_p9k_t'}]}' + fi + + local -i num_lines=$#_p9k_line_segments_left + if (( $+terminfo[cuu1] )); then + _p9k_escape $terminfo[cuu1] + if (( __p9k_ksh_arrays )); then + local scroll=$'${_p9k_t[${_p9k__ruler_i:-1}-1]:+\n'$_p9k__ret'}' + else + local scroll=$'${_p9k_t[${_p9k__ruler_i:-1}]:+\n'$_p9k__ret'}' + fi + if (( num_lines > 1 )); then + local -i line_index= + for line_index in {1..$((num_lines-1))}; do + scroll='${_p9k__'$line_index-$'\n}'$scroll'${_p9k__'$line_index-$_p9k__ret'}' + done + fi + _p9k_prompt_prefix_left+='%{${_p9k__ipe-'$scroll'}%}' + fi + + _p9k_get_icon '' RULER_CHAR + local ruler_char=$_p9k__ret + _p9k_prompt_length $ruler_char + (( _p9k__ret == 1 && $#ruler_char == 1 )) || ruler_char=' ' + _p9k_color prompt_ruler BACKGROUND "" + if [[ -z $_p9k__ret && $ruler_char == ' ' ]]; then + local ruler=$'\n' + else + _p9k_background $_p9k__ret + local ruler=%b$_p9k__ret + _p9k_color prompt_ruler FOREGROUND "" + _p9k_foreground $_p9k__ret + ruler+=$_p9k__ret + [[ $ruler_char == '.' ]] && local sep=',' || local sep='.' + ruler+='${(pl'$sep'${$((_p9k__clm-_p9k__ind))/#-*/0}'$sep$sep$ruler_char$sep')}%k%f' + if (( __p9k_ksh_arrays )); then + ruler+='${_p9k_t[$((!_p9k__ind))]}' + else + ruler+='${_p9k_t[$((1+!_p9k__ind))]}' + fi + fi + _p9k_t+=$ruler + _p9k_ruler_idx=$#_p9k_t + if (( __p9k_ksh_arrays )); then + _p9k_prompt_prefix_left+='${(e)_p9k_t[${_p9k__ruler_i:-'$#_p9k_t'}-1]}' + else + _p9k_prompt_prefix_left+='${(e)_p9k_t[${_p9k__ruler_i:-'$#_p9k_t'}]}' + fi + + ( _p9k_segment_in_use time && (( _POWERLEVEL9K_TIME_UPDATE_ON_COMMAND )) ) + _p9k_reset_on_line_finish=$((!$?)) + + _p9k_t+=$_p9k_gap_pre + _p9k_gap_pre='${(e)_p9k_t['$(($#_p9k_t - __p9k_ksh_arrays))']}' + _p9k_t+=$_p9k_prompt_prefix_left + _p9k_prompt_prefix_left='${(e)_p9k_t['$(($#_p9k_t - __p9k_ksh_arrays))']}' +} + +_p9k_init_ssh() { + # The following code is based on Pure: + # https://github.com/sindresorhus/pure/blob/e8abf9d37185ec9b7b4398ca9c5eba555a1028eb/pure.zsh. + # + # License: https://github.com/sindresorhus/pure/blob/e8abf9d37185ec9b7b4398ca9c5eba555a1028eb/license. + + [[ -n $P9K_SSH && $_P9K_SSH_TTY == $TTY ]] && return + typeset -gix P9K_SSH=0 + typeset -gx _P9K_SSH_TTY=$TTY + if [[ -n $SSH_CLIENT || -n $SSH_TTY || -n $SSH_CONNECTION ]]; then + P9K_SSH=1 + return 0 + fi + + # When changing user on a remote system, the $SSH_CONNECTION environment variable can be lost. + # Attempt detection via `who`. + (( $+commands[who] )) || return + + local ipv6='(([0-9a-fA-F]+:)|:){2,}[0-9a-fA-F]+' # Simplified, only checks partial pattern. + local ipv4='([0-9]{1,3}\.){3}[0-9]+' # Simplified, allows invalid ranges. + # Assume two non-consecutive periods represents a hostname. Matches `x.y.z`, but not `x.y`. + local hostname='([.][^. ]+){2}' + + local w + w="$(who -m 2>/dev/null)" || w=${(@M)${(f)"$(who 2>/dev/null)"}:#*[[:space:]]${TTY#/dev/}[[:space:]]*} + + # Usually the remote address is surrounded by parenthesis but not on all systems (e.g., Busybox). + [[ $w =~ "\(?($ipv4|$ipv6|$hostname)\)?\$" ]] && P9K_SSH=1 +} + +_p9k_init_toolbox() { + [[ -z $P9K_TOOLBOX_NAME ]] || return 0 + if [[ -f /run/.containerenv && -r /run/.containerenv ]]; then + local name=(${(Q)${${(@M)${(f)"$(|4801)}\1$DEFAULT_USER\1$P9K_SSH\1$+commands[uname]\1' + _p9k__param_pat+=$'$__p9k_root_dir\1$functions[p10k-on-init]\1$functions[p10k-on-pre-prompt]\1' + _p9k__param_pat+=$'$functions[p10k-on-post-widget]\1$functions[p10k-on-post-prompt]\1' + _p9k__param_pat+=$'$+commands[git]\1$terminfo[colors]\1${+_z4h_iterm_cmd}\1' + _p9k__param_pat+=$'$_z4h_can_save_restore_screen' + local MATCH + IFS=$'\1' _p9k__param_pat+="${(@)${(@o)parameters[(I)POWERLEVEL9K_*]}:/(#m)*/\${${(q)MATCH}-$IFS\}}" + IFS=$'\2' _p9k__param_sig="${(e)_p9k__param_pat}" +} + +function _p9k_set_os() { + _p9k_os=$1 + _p9k_get_icon prompt_os_icon $2 + _p9k_os_icon=$_p9k__ret +} + +function _p9k_init_cacheable() { + _p9k_init_icons + _p9k_init_params + _p9k_init_prompt + _p9k_init_display + + # https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda#backward-compatibility + if [[ $VTE_VERSION != (<1-4602>|4801) ]]; then + _p9k_term_has_href=1 + fi + + local elem func + local -i i=0 + + for i in {1..$#_p9k_line_segments_left}; do + for elem in ${${${(@0)_p9k_line_segments_left[i]}%_joined}//-/_}; do + local var=POWERLEVEL9K_${${(U)elem}//İ/I}_SHOW_ON_COMMAND + (( $+parameters[$var] )) || continue + _p9k_show_on_command+=( + $'(|*[/\0])('${(j.|.)${(P)var}}')' + $((1+_p9k_display_k[$i/left/$elem])) + _p9k__${i}l$elem) + done + for elem in ${${${(@0)_p9k_line_segments_right[i]}%_joined}//-/_}; do + local var=POWERLEVEL9K_${${(U)elem}//İ/I}_SHOW_ON_COMMAND + (( $+parameters[$var] )) || continue + local cmds=(${(P)var}) + _p9k_show_on_command+=( + $'(|*[/\0])('${(j.|.)${(P)var}}')' + $((1+$_p9k_display_k[$i/right/$elem])) + _p9k__${i}r$elem) + done + done + + if [[ $_POWERLEVEL9K_TRANSIENT_PROMPT != off ]]; then + local sep=$'\1' + _p9k_transient_prompt='%b%k%s%u%(?'$sep + _p9k_color prompt_prompt_char_OK_VIINS FOREGROUND 76 + _p9k_foreground $_p9k__ret + _p9k_transient_prompt+=$_p9k__ret + _p9k_transient_prompt+='${${P9K_CONTENT::="❯"}+}' + _p9k_param prompt_prompt_char_OK_VIINS CONTENT_EXPANSION '${P9K_CONTENT}' + _p9k_transient_prompt+='${:-"'$_p9k__ret'"}' + _p9k_transient_prompt+=$sep + _p9k_color prompt_prompt_char_ERROR_VIINS FOREGROUND 196 + _p9k_foreground $_p9k__ret + _p9k_transient_prompt+=$_p9k__ret + _p9k_transient_prompt+='${${P9K_CONTENT::="❯"}+}' + _p9k_param prompt_prompt_char_ERROR_VIINS CONTENT_EXPANSION '${P9K_CONTENT}' + _p9k_transient_prompt+='${:-"'$_p9k__ret'"}' + _p9k_transient_prompt+=')%b%k%f%s%u ' + if (( _POWERLEVEL9K_TERM_SHELL_INTEGRATION )); then + _p9k_transient_prompt=$'%{\e]133;A\a%}'$_p9k_transient_prompt$'%{\e]133;B\a%}' + if (( $+_z4h_iterm_cmd && _z4h_can_save_restore_screen == 1 )); then + _p9k_transient_prompt=$'%{\ePtmux;\e\e]133;A\a\e\\%}'$_p9k_transient_prompt$'%{\ePtmux;\e\e]133;B\a\e\\%}' + fi + fi + fi + + _p9k_uname="$(uname)" + [[ $_p9k_uname == Linux ]] && _p9k_uname_o="$(uname -o 2>/dev/null)" + _p9k_uname_m="$(uname -m)" + + if [[ $_p9k_uname == Linux && $_p9k_uname_o == Android ]]; then + _p9k_set_os Android ANDROID_ICON + else + case $_p9k_uname in + SunOS) _p9k_set_os Solaris SUNOS_ICON;; + Darwin) _p9k_set_os OSX APPLE_ICON;; + CYGWIN*|MSYS*|MINGW*) _p9k_set_os Windows WINDOWS_ICON;; + FreeBSD|OpenBSD|DragonFly) _p9k_set_os BSD FREEBSD_ICON;; + Linux) + _p9k_os='Linux' + local os_release_id + if [[ -r /etc/os-release ]]; then + local lines=(${(f)"$( 0 )); then + local state + for state in ${(k)__p9k_vcs_states}; do + _p9k_param prompt_vcs_$state CONTENT_EXPANSION x + if [[ -z $_p9k__ret ]]; then + _p9k_vcs_index=-1 + break + fi + done + fi + if (( _p9k_vcs_index == -1 )); then + _p9k_vcs_index=0 + _p9k_vcs_line_index=0 + _p9k_vcs_side= + fi + fi +} + +_p9k_init_vcs() { + if ! _p9k_segment_in_use vcs || (( ! $#_POWERLEVEL9K_VCS_BACKENDS )); then + (( $+functions[gitstatus_stop_p9k_] )) && gitstatus_stop_p9k_ POWERLEVEL9K + unset _p9k_preinit + return + fi + + _p9k_vcs_info_init + if (( $+functions[_p9k_preinit] )); then + if (( $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then + () { + trap 'return 130' INT + { + gitstatus_start_p9k_ POWERLEVEL9K + } always { + trap ':' INT + } + } + fi + (( $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) || _p9k__instant_prompt_disabled=1 + return 0 + fi + (( _POWERLEVEL9K_DISABLE_GITSTATUS )) && return + (( $_POWERLEVEL9K_VCS_BACKENDS[(I)git] )) || return + + local gitstatus_dir=${_POWERLEVEL9K_GITSTATUS_DIR:-${__p9k_root_dir}/gitstatus} + + typeset -g _p9k_preinit="function _p9k_preinit() { + (( $+commands[git] )) || { unfunction _p9k_preinit; return 1 } + [[ \$ZSH_VERSION == ${(q)ZSH_VERSION} ]] || return + [[ -r ${(q)gitstatus_dir}/gitstatus.plugin.zsh ]] || return + builtin source ${(q)gitstatus_dir}/gitstatus.plugin.zsh _p9k_ || return + GITSTATUS_AUTO_INSTALL=${(q)GITSTATUS_AUTO_INSTALL} \ + GITSTATUS_DAEMON=${(q)GITSTATUS_DAEMON} \ + GITSTATUS_CACHE_DIR=${(q)GITSTATUS_CACHE_DIR} \ + GITSTATUS_NUM_THREADS=${(q)GITSTATUS_NUM_THREADS} \ + GITSTATUS_LOG_LEVEL=${(q)GITSTATUS_LOG_LEVEL} \ + GITSTATUS_ENABLE_LOGGING=${(q)GITSTATUS_ENABLE_LOGGING} \ + gitstatus_start_p9k_ \ + -s $_POWERLEVEL9K_VCS_STAGED_MAX_NUM \ + -u $_POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM \ + -d $_POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM \ + -c $_POWERLEVEL9K_VCS_CONFLICTED_MAX_NUM \ + -m $_POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY \ + ${${_POWERLEVEL9K_VCS_RECURSE_UNTRACKED_DIRS:#0}:+-e} \ + -a POWERLEVEL9K + }" + builtin source $gitstatus_dir/gitstatus.plugin.zsh _p9k_ || return + () { + trap 'return 130' INT + { + gitstatus_start_p9k_ \ + -s $_POWERLEVEL9K_VCS_STAGED_MAX_NUM \ + -u $_POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM \ + -d $_POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM \ + -c $_POWERLEVEL9K_VCS_CONFLICTED_MAX_NUM \ + -m $_POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY \ + ${${_POWERLEVEL9K_VCS_RECURSE_UNTRACKED_DIRS:#0}:+-e} \ + POWERLEVEL9K + } always { + trap ':' INT + } + } + (( $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) || _p9k__instant_prompt_disabled=1 +} + +function _p9k_iterm2_precmd() { + builtin zle && return + if (( _p9k__iterm_cmd )) && [[ -t 1 ]]; then + (( _p9k__iterm_cmd == 1 )) && builtin print -n '\e]133;C;\a' + builtin printf '\e]133;D;%s\a' $1 + fi + typeset -gi _p9k__iterm_cmd=1 +} + +function _p9k_iterm2_preexec() { + [[ -t 1 ]] && builtin print -n '\e]133;C;\a' + typeset -gi _p9k__iterm_cmd=2 +} + +_p9k_init() { + _p9k_init_vars + _p9k_restore_state || _p9k_init_cacheable + + typeset -g P9K_OS_ICON=$_p9k_os_icon + + local -a _p9k__async_segments_compute + + local -i i + local elem + + _p9k__prompt_side=left + _p9k__segment_index=1 + for i in {1..$#_p9k_line_segments_left}; do + for elem in ${${(@0)_p9k_line_segments_left[i]}%_joined}; do + local f_init=_p9k_prompt_${elem}_init + (( $+functions[$f_init] )) && $f_init + (( ++_p9k__segment_index )) + done + done + + _p9k__prompt_side=right + _p9k__segment_index=1 + for i in {1..$#_p9k_line_segments_right}; do + for elem in ${${(@0)_p9k_line_segments_right[i]}%_joined}; do + local f_init=_p9k_prompt_${elem}_init + (( $+functions[$f_init] )) && $f_init + (( ++_p9k__segment_index )) + done + done + + if [[ -n $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE || + -n $_POWERLEVEL9K_IP_INTERFACE || + -n $_POWERLEVEL9K_VPN_IP_INTERFACE ]]; then + _p9k_prompt_net_iface_init + fi + + if [[ -n $_p9k__async_segments_compute ]]; then + functions[_p9k_async_segments_compute]=${(pj:\n:)_p9k__async_segments_compute} + _p9k_worker_start + fi + + local k v + for k v in ${(kv)_p9k_display_k}; do + [[ $k == -* ]] && continue + _p9k__display_v[v]=$k + _p9k__display_v[v+1]=show + done + _p9k__display_v[2]=hide + _p9k__display_v[4]=hide + + if (( $+functions[iterm2_decorate_prompt] )); then + _p9k__iterm2_decorate_prompt=$functions[iterm2_decorate_prompt] + function iterm2_decorate_prompt() { + typeset -g ITERM2_PRECMD_PS1=$PROMPT + typeset -g ITERM2_SHOULD_DECORATE_PROMPT= + } + fi + if (( $+functions[iterm2_precmd] )); then + _p9k__iterm2_precmd=$functions[iterm2_precmd] + functions[iterm2_precmd]='local _p9k_status=$?; zle && return; () { return $_p9k_status; }; '$_p9k__iterm2_precmd + fi + + if (( _POWERLEVEL9K_TERM_SHELL_INTEGRATION && + ! $+_z4h_iterm_cmd && + ! $+functions[iterm2_decorate_prompt] && + ! $+functions[iterm2_precmd] )); then + typeset -gi _p9k__iterm_cmd=0 + fi + + if _p9k_segment_in_use todo; then + if [[ -n ${_p9k__todo_command::=${commands[todo.sh]}} ]]; then + local todo_global=/etc/todo/config + elif [[ -n ${_p9k__todo_command::=${commands[todo-txt]}} ]]; then + local todo_global=/etc/todo-txt/config + fi + if [[ -n $_p9k__todo_command ]]; then + _p9k__todo_file="$(exec -a $_p9k__todo_command ${commands[bash]:-:} 3>&1 &>/dev/null -c " + [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo/config + [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/todo.cfg + [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo.cfg + [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${XDG_CONFIG_HOME:-\$HOME/.config}/todo/config + [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=${(qqq)_p9k__todo_command:h}/todo.cfg + [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${TODOTXT_GLOBAL_CFG_FILE:-${(qqq)todo_global}} + [ -r \"\$TODOTXT_CFG_FILE\" ] || exit + source \"\$TODOTXT_CFG_FILE\" + printf "%s" \"\$TODO_FILE\" >&3")" + fi + fi + + if _p9k_segment_in_use dir && + [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name && $+commands[jq] == 0 ]]; then + print -rP -- '%F{yellow}WARNING!%f %BPOWERLEVEL9K_SHORTEN_STRATEGY=truncate_with_package_name%b requires %F{green}jq%f.' + print -rP -- 'Either install %F{green}jq%f or change the value of %BPOWERLEVEL9K_SHORTEN_STRATEGY%b.' + fi + + _p9k_init_vcs + + if (( _p9k__instant_prompt_disabled )); then + (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )) && unset __p9k_instant_prompt_erased + _p9k_delete_instant_prompt + _p9k_dumped_instant_prompt_sigs=() + fi + + if (( $+__p9k_instant_prompt_sourced && __p9k_instant_prompt_sourced != __p9k_instant_prompt_version )); then + _p9k_delete_instant_prompt + _p9k_dumped_instant_prompt_sigs=() + fi + + if (( $+__p9k_instant_prompt_erased )); then + unset __p9k_instant_prompt_erased + if [[ -w $TTY ]]; then + local tty=$TTY + elif [[ -w /dev/tty ]]; then + local tty=/dev/tty + else + local tty=/dev/null + fi + { + >&2 echo -E - "" + >&2 echo -E - "${(%):-[%1FERROR%f]: When using instant prompt, Powerlevel10k must be loaded before the first prompt.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):-You can:}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- - %BRecommended%b: Change the way Powerlevel10k is loaded from %B$__p9k_zshrc_u%b.}" + if (( _p9k_term_has_href )); then + >&2 echo - "${(%):- See \e]8;;https://github.com/romkatv/powerlevel10k/blob/master/README.md#installation\ahttps://github.com/romkatv/powerlevel10k/blob/master/README.md#installation\e]8;;\a.}" + else + >&2 echo - "${(%):- See https://github.com/romkatv/powerlevel10k/blob/master/README.md#installation.}" + fi + if (( $+zsh_defer_options )); then + >&2 echo -E - "" + >&2 echo -E - "${(%):- NOTE: Do not use %1Fzsh-defer%f to load %Upowerlevel10k.zsh-theme%u.}" + elif (( $+functions[zinit] )); then + >&2 echo -E - "" + >&2 echo -E - "${(%):- NOTE: If using %2Fzinit%f to load %3F'romkatv/powerlevel10k'%f, %Bdo not apply%b %1Fice wait%f.}" + elif (( $+functions[zplugin] )); then + >&2 echo -E - "" + >&2 echo -E - "${(%):- NOTE: If using %2Fzplugin%f to load %3F'romkatv/powerlevel10k'%f, %Bdo not apply%b %1Fice wait%f.}" + fi + >&2 echo -E - "" + >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}" + >&2 echo -E - "${(%):- defining the following parameter:}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" + >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- - Do nothing.}" + >&2 echo -E - "" + >&2 echo -E - "${(%):- * You %Bwill%b see this error message every time you start zsh.}" + >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" + >&2 echo -E - "" + } 2>>$tty + fi +} + +_p9k_deinit() { + (( $+functions[_p9k_preinit] )) && unfunction _p9k_preinit + (( $+functions[gitstatus_stop_p9k_] )) && gitstatus_stop_p9k_ POWERLEVEL9K + _p9k_worker_stop + if (( _p9k__state_dump_fd )); then + zle -F $_p9k__state_dump_fd + exec {_p9k__state_dump_fd}>&- + fi + if (( _p9k__restore_prompt_fd )); then + zle -F $_p9k__restore_prompt_fd + exec {_p9k__restore_prompt_fd}>&- + fi + if (( _p9k__redraw_fd )); then + zle -F $_p9k__redraw_fd + exec {_p9k__redraw_fd}>&- + fi + (( $+_p9k__iterm2_precmd )) && functions[iterm2_precmd]=$_p9k__iterm2_precmd + (( $+_p9k__iterm2_decorate_prompt )) && functions[iterm2_decorate_prompt]=$_p9k__iterm2_decorate_prompt + unset -m '(_POWERLEVEL9K_|P9K_|_p9k_)*~(P9K_SSH|_P9K_SSH_TTY|P9K_TOOLBOX_NAME|P9K_TTY|_P9K_TTY)' + [[ -n $__p9k_locale ]] || unset __p9k_locale +} + +typeset -gi __p9k_enabled=0 +typeset -gi __p9k_configured=0 +typeset -gri __p9k_instant_prompt_disabled=1 + +# `typeset -g` doesn't roundtrip in zsh prior to 5.4. +if [[ $ZSH_VERSION == (5.<4->*|<6->.*) ]]; then + typeset -gri __p9k_dumps_enabled=1 +else + typeset -gri __p9k_dumps_enabled=0 +fi + +_p9k_do_nothing() { true; } + +_p9k_precmd_first() { + eval "$__p9k_intro" + if [[ -n $KITTY_SHELL_INTEGRATION && KITTY_SHELL_INTEGRATION[(wIe)no-prompt-mark] -eq 0 ]]; then + KITTY_SHELL_INTEGRATION+=' no-prompt-mark' + (( $+__p9k_force_term_shell_integration )) || typeset -gri __p9k_force_term_shell_integration=1 + fi + typeset -ga precmd_functions=(${precmd_functions:#_p9k_precmd_first}) +} + +_p9k_setup() { + (( __p9k_enabled )) && return + + prompt_opts=(percent subst) + if (( ! $+__p9k_instant_prompt_active )); then + prompt_opts+=sp + prompt_opts+=cr + fi + + prompt_powerlevel9k_teardown + __p9k_enabled=1 + typeset -ga preexec_functions=(_p9k_preexec1 $preexec_functions _p9k_preexec2) + typeset -ga precmd_functions=(_p9k_do_nothing _p9k_precmd_first $precmd_functions _p9k_precmd) +} + +prompt_powerlevel9k_setup() { + _p9k_restore_special_params + eval "$__p9k_intro" + _p9k_setup +} + +prompt_powerlevel9k_teardown() { + _p9k_restore_special_params + eval "$__p9k_intro" + add-zsh-hook -D precmd '(_p9k_|powerlevel9k_)*' + add-zsh-hook -D preexec '(_p9k_|powerlevel9k_)*' + PROMPT='%m%# ' + RPROMPT= + if (( __p9k_enabled )); then + _p9k_deinit + __p9k_enabled=0 + fi +} + +typeset -gr __p9k_p10k_usage="Usage: %2Fp10k%f %Bcommand%b [options] + +Commands: + + %Bconfigure%b run interactive configuration wizard + %Breload%b reload configuration + %Bsegment%b print a user-defined prompt segment + %Bdisplay%b show, hide or toggle prompt parts + %Bhelp%b print this help message + +Print help for a specific command: + + %2Fp10k%f %Bhelp%b command" + +typeset -gr __p9k_p10k_segment_usage="Usage: %2Fp10k%f %Bsegment%b [-h] [{+|-}re] [-s state] [-b bg] [-f fg] [-i icon] [-c cond] [-t text] + +Print a user-defined prompt segment. Can be called only during prompt rendering. + +Options: + -t text segment's main content; will undergo prompt expansion: '%%F{blue}%%*%%f' will + show as %F{blue}%*%f; default is empty + -i icon segment's icon; default is empty + -r icon is a symbolic reference that needs to be resolved; for example, 'LOCK_ICON' + +r icon is already resolved and should be printed literally; for example, '⭐'; + this is the default; you can also use \$'\u2B50' if you don't want to have + non-ascii characters in source code + -b bg background color; for example, 'blue', '4', or '#0000ff'; empty value means + transparent background, as in '%%k'; default is black + -f fg foreground color; for example, 'blue', '4', or '#0000ff'; empty value means + default foreground color, as in '%%f'; default is empty + -s state segment's state for the purpose of applying styling options; if you want to + to be able to use POWERLEVEL9K parameters to specify different colors or icons + depending on some property, use different states for different values of that + property + -c condition; if empty after parameter expansion and process substitution, the + segment is hidden; this is an advanced feature, use with caution; default is '1' + -e segment's main content will undergo parameter expansion and process + substitution; the content will be surrounded with double quotes and thus + should quote its own double quotes; this is an advanced feature, use with + caution + +e segment's main content should not undergo parameter expansion and process + substitution; this is the default + -h print this help message + +Example: 'core' segment tells you if there is a file name 'core' in the current directory. + +- Segment's icon is '⭐'. +- Segment's text is the file's size in bytes. +- If you have permissions to delete the file, state is DELETABLE. If not, it's PROTECTED. + + zmodload -F zsh/stat b:zstat + + function prompt_core() { + local size=() + if ! zstat -A size +size core 2>/dev/null; then + # No 'core' file in the current directory. + return + fi + if [[ -w . ]]; then + local state=DELETABLE + else + local state=PROTECTED + fi + p10k segment -s \$state -i '⭐' -f blue -t \${size[1]}b + } + +To enable this segment, add 'core' to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or +POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. + +Example customizations: + + # Override default foreground. + POWERLEVEL9K_CORE_FOREGROUND=red + + # Override foreground when DELETABLE. + POWERLEVEL9K_CORE_DELETABLE_BACKGROUND=green + + # Override icon when PROTECTED. + POWERLEVEL9K_CORE_PROTECTED_VISUAL_IDENTIFIER_EXPANSION='❎' + + # Don't show file size when PROTECTED. + POWERLEVEL9K_CORE_PROTECTED_CONTENT_EXPANSION=''" + +typeset -gr __p9k_p10k_configure_usage="Usage: %2Fp10k%f %Bconfigure%b + +Run interactive configuration wizard." + +typeset -gr __p9k_p10k_reload_usage="Usage: %2Fp10k%f %Breload%b + +Reload configuration." + +typeset -gr __p9k_p10k_finalize_usage="Usage: %2Fp10k%f %Bfinalize%b + +Perform the final stage of initialization. Must be called at the very end of zshrc." + +typeset -gr __p9k_p10k_display_usage="Usage: %2Fp10k%f %Bdisplay%b part-pattern=state-list... + + Show, hide or toggle prompt parts. If called from zle, the current + prompt is refreshed. + +Usage: %2Fp10k%f %Bdisplay%b -a [part-pattern]... + + Populate array \`reply\` with states of prompt parts matching the patterns. + If no patterns are supplied, assume \`*\`. + +Usage: %2Fp10k%f %Bdisplay%b -r + + Redisplay prompt. + +Parts: + empty_line empty line (duh) + ruler ruler; if POWERLEVEL9K_RULER_CHAR=' ', it's essentially another + new_line + N prompt line number N, 1-based; counting from the top if positive, + from the bottom if negative + N/left_frame left frame on the Nth line + N/left left prompt on the Nth line + N/gap gap between left and right prompts on the Nth line + N/right right prompt on the Nth line + N/right_frame right frame on the Nth line + N/left/S segment S within N/left (dir, time, etc.) + N/right/S segment S within N/right (dir, time, etc.) + +Part States: + show the part is displayed + hide the part is not displayed + print the part is printed in precmd; only applicable to empty_line and + ruler; unlike show, the effects of print cannot be undone with hide; + print used to look better after \`clear\` but this is no longer the + case; it's best to avoid it unless you know what you are doing + +part-pattern is a glob pattern for parts. Examples: + + */kubecontext all kubecontext prompt segments, regardless of where + they are + 1/(right|right_frame) all prompt segments and frame from the right side of + the first line + +state-list is a comma-separated list of states. Must have at least one element. +If more than one, states will rotate. + +Example: Bind Ctrl+P to toggle right prompt. + + function toggle-right-prompt() { p10k display '*/right'=hide,show; } + zle -N toggle-right-prompt + bindkey '^P' toggle-right-prompt + +Example: Print the current state of all prompt parts: + + typeset -A reply + p10k display -a '*' + printf '%%-32s = %%q\n' \${(@kv)reply} | sort +" + +# 0 -- reset-prompt not blocked +# 1 -- reset-prompt blocked and not needed +# 2 -- reset-prompt blocked and needed +typeset -gi __p9k_reset_state + +function p10k() { + [[ $# != 1 || $1 != finalize ]] || { p10k-instant-prompt-finalize; return 0 } + + eval "$__p9k_intro_no_reply" + + if (( !ARGC )); then + print -rP -- $__p9k_p10k_usage >&2 + return 1 + fi + + case $1 in + segment) + local REPLY + local -a reply + shift + local -i OPTIND + local OPTARG opt state bg=0 fg icon cond text ref=0 expand=0 + while getopts ':s:b:f:i:c:t:reh' opt; do + case $opt in + s) state=$OPTARG;; + b) bg=$OPTARG;; + f) fg=$OPTARG;; + i) icon=$OPTARG;; + c) cond=${OPTARG:-'${:-}'};; + t) text=$OPTARG;; + r) ref=1;; + e) expand=1;; + +r) ref=0;; + +e) expand=0;; + h) print -rP -- $__p9k_p10k_segment_usage; return 0;; + ?) print -rP -- $__p9k_p10k_segment_usage >&2; return 1;; + esac + done + if (( OPTIND <= ARGC )); then + print -rP -- $__p9k_p10k_segment_usage >&2 + return 1 + fi + if [[ -z $_p9k__prompt_side ]]; then + print -rP -- "%1F[ERROR]%f %Bp10k segment%b: can be called only during prompt rendering." >&2 + if (( !ARGC )); then + print -rP -- "" + print -rP -- "For help, type:" >&2 + print -rP -- "" + print -rP -- " %2Fp10k%f %Bhelp%b %Bsegment%b" >&2 + fi + return 1 + fi + (( ref )) || icon=$'\1'$icon + typeset -i _p9k__has_upglob + "_p9k_${_p9k__prompt_side}_prompt_segment" "prompt_${_p9k__segment_name}${state:+_${${(U)state}//İ/I}}" \ + "$bg" "${fg:-$_p9k_color1}" "$icon" "$expand" "$cond" "$text" + return 0 + ;; + display) + if (( ARGC == 1 )); then + print -rP -- $__p9k_p10k_display_usage >&2 + return 1 + fi + shift + local -i k dump + local opt prev new pair list name var + while getopts ':har' opt; do + case $opt in + r) + if (( __p9k_reset_state > 0 )); then + __p9k_reset_state=2 + else + __p9k_reset_state=-1 + fi + ;; + a) dump=1;; + h) print -rP -- $__p9k_p10k_display_usage; return 0;; + ?) print -rP -- $__p9k_p10k_display_usage >&2; return 1;; + esac + done + if (( dump )); then + reply=() + shift $((OPTIND-1)) + (( ARGC )) || set -- '*' + for opt; do + for k in ${(u@)_p9k_display_k[(I)$opt]:/(#m)*/$_p9k_display_k[$MATCH]}; do + reply+=($_p9k__display_v[k,k+1]) + done + done + if (( __p9k_reset_state == -1 )); then + _p9k_reset_prompt + fi + return 0 + fi + local REPLY + local -a reply + for opt in "${@:$OPTIND}"; do + pair=(${(s:=:)opt}) + list=(${(s:,:)${pair[2]}}) + if [[ ${(b)pair[1]} == $pair[1] ]]; then # this branch is purely for optimization + local ks=($_p9k_display_k[$pair[1]]) + else + local ks=(${(u@)_p9k_display_k[(I)$pair[1]]:/(#m)*/$_p9k_display_k[$MATCH]}) + fi + for k in $ks; do + if (( $#list == 1 )); then # this branch is purely for optimization + [[ $_p9k__display_v[k+1] == $list[1] ]] && continue + new=$list[1] + else + new=${list[list[(I)$_p9k__display_v[k+1]]+1]:-$list[1]} + [[ $_p9k__display_v[k+1] == $new ]] && continue + fi + _p9k__display_v[k+1]=$new + name=$_p9k__display_v[k] + if [[ $name == (empty_line|ruler) ]]; then + var=_p9k__${name}_i + [[ $new == show ]] && unset $var || typeset -gi $var=3 + elif [[ $name == (#b)(<->)(*) ]]; then + var=_p9k__${match[1]}${${${${match[2]//\/}/#left/l}/#right/r}/#gap/g} + [[ $new == hide ]] && typeset -g $var= || unset $var + fi + if (( __p9k_reset_state > 0 )); then + __p9k_reset_state=2 + else + __p9k_reset_state=-1 + fi + done + done + if (( __p9k_reset_state == -1 )); then + _p9k_reset_prompt + fi + ;; + configure) + if (( ARGC > 1 )); then + print -rP -- $__p9k_p10k_configure_usage >&2 + return 1 + fi + local REPLY + local -a reply + p9k_configure "$@" || return + ;; + reload) + if (( ARGC > 1 )); then + print -rP -- $__p9k_p10k_reload_usage >&2 + return 1 + fi + (( $+_p9k__force_must_init )) || return 0 + _p9k__force_must_init=1 + ;; + help) + local var=__p9k_p10k_$2_usage + if (( $+parameters[$var] )); then + print -rP -- ${(P)var} + return 0 + elif (( ARGC == 1 )); then + print -rP -- $__p9k_p10k_usage + return 0 + else + print -rP -- $__p9k_p10k_usage >&2 + return 1 + fi + ;; + finalize) + print -rP -- $__p9k_p10k_finalize_usage >&2 + return 1 + ;; + clear-instant-prompt) + if (( $+__p9k_instant_prompt_active )); then + _p9k_clear_instant_prompt + unset __p9k_instant_prompt_active + fi + return 0 + ;; + *) + print -rP -- $__p9k_p10k_usage >&2 + return 1 + ;; + esac +} + +# Hook for zplugin. +powerlevel10k_plugin_unload() { prompt_powerlevel9k_teardown; } + +function p10k-instant-prompt-finalize() { + unsetopt local_options + (( ${+__p9k_instant_prompt_active} )) && unsetopt prompt_cr prompt_sp || setopt prompt_cr prompt_sp +} + +autoload -Uz add-zsh-hook + +zmodload zsh/datetime +zmodload zsh/mathfunc +zmodload zsh/parameter 2>/dev/null # https://github.com/romkatv/gitstatus/issues/58#issuecomment-553407177 +zmodload zsh/system +zmodload zsh/termcap +zmodload zsh/terminfo +zmodload zsh/zleparameter +zmodload -F zsh/stat b:zstat +zmodload -F zsh/net/socket b:zsocket +zmodload -F zsh/files b:zf_mv b:zf_rm + +if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file && -n $__p9k_instant_prompt_dump_file ]]; then + _p9k_delete_instant_prompt + zf_rm -f -- $__p9k_dump_file{,.zwc} 2>/dev/null + zf_rm -f -- $__p9k_instant_prompt_dump_file{,.zwc} 2>/dev/null +fi + +unset VSCODE_SHELL_INTEGRATION + +_p9k_init_ssh +_p9k_init_toolbox +prompt_powerlevel9k_setup diff --git a/airootfs/etc/skel/powerlevel10k/internal/parser.zsh b/airootfs/etc/skel/powerlevel10k/internal/parser.zsh new file mode 100644 index 0000000..6c16adc --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/internal/parser.zsh @@ -0,0 +1,382 @@ +typeset -grA __p9k_pb_cmd_skip=( + '}' 'always' # handled specially + '{' '' + '{' '' + '|' '' + '||' '' + '&' '' + '&&' '' + '|&' '' + '&!' '' + '&|' '' + ')' '' + '(' '' + '()' '' + '!' '' + ';' '' + 'if' '' + 'fi' '' + 'elif' '' + 'else' '' + 'then' '' + 'while' '' + 'until' '' + 'do' '' + 'done' '' + 'esac' '' + 'end' '' + 'coproc' '' + 'nocorrect' '' + 'noglob' '' + 'time' '' + '[[' '\]\]' + '((' '\)\)' + 'case' '\)|esac' + ';;' '\)|esac' + ';&' '\)|esac' + ';|' '\)|esac' + 'foreach' '\(*\)' +) + +typeset -grA __p9k_pb_precommand=( + '-' '' + 'builtin' '' + 'command' '' + 'exec' '-[^a]#[a]' + 'nohup' '' + 'setsid' '' + 'eatmydata' '' + 'catchsegv' '' + 'pkexec' '--user' + 'doas' '-[^aCu]#[acU]' + 'nice' '-[^n]#[n]|--adjustment' + 'stdbuf' '-[^ioe]#[ioe]|--(input|output|error)' + 'sudo' '-[^aghpuUCcrtT]#[aghpuUCcrtT]|--(close-from|group|host|prompt|role|type|other-user|command-timeout|user)' + 'ssh-agent' '-[^aEPt]#[aEPt]' + 'tabbed' '-[^gnprtTuU]#[gnprtTuU]' + 'chronic' '' + 'ifne' '' +) + +typeset -grA __p9k_pb_redirect=( + '&>' '' + '>' '' + '>&' '' + '<' '' + '<&' '' + '<>' '' + '&>|' '' + '>|' '' + '&>>' '' + '>>' '' + '>>&' '' + '&>>|' '' + '>>|' '' + '<<<' '' +) + +typeset -grA __p9k_pb_term=( + '|' '' + '||' '' + ';' '' + '&' '' + '&&' '' + '|&' '' + '&!' '' + '&|' '' + ';;' '' + ';&' '' + ';|' '' + '(' '' + ')' '' + '()' '' # handled specially + '}' '' # handled specially +) + +typeset -grA __p9k_pb_term_skip=( + '(' '\)' + ';;' '\)|esac' + ';&' '\)|esac' + ';|' '\)|esac' +) + +# Usage: _p9k_parse_buffer [token-limit] +# +# Parses the specified command line buffer and pupulates array P9K_COMMANDS +# with commands from it. Terminates early and returns 1 if there are more +# tokens than the specified limit. +# +# Broken: +# +# --------------- +# : $(x) +# --------------- +# : `x` +# --------------- +# ${x/} +# --------------- +# - -- x +# --------------- +# command -p -p x +# --------------- +# * +# --------------- +# x=$y; $x +# --------------- +# alias x=y; y +# --------------- +# x < ]] || return 2 + + local rcquotes + [[ -o rcquotes ]] && rcquotes=rcquotes + + eval "$__p9k_intro" + setopt no_nomatch $rcquotes + + typeset -ga P9K_COMMANDS=() + + local -r id='(<->|[[:alpha:]_][[:IDENT:]]#)' + local -r var="\$$id|\${$id}|\"\$$id\"|\"\${$id}\"" + + local -i e ic c=${2:-'1 << 62'} + local skip n s r state token cmd prev + local -a aln alp alf v + + if [[ -o interactive_comments ]]; then + ic=1 + local tokens=(${(Z+C+)1}) + else + local tokens=(${(z)1}) + fi + + { + while (( $#tokens )); do + (( e = $#state )) + + while (( $#tokens == alp[-1] )); do + aln[-1]=() + alp[-1]=() + if (( $#tokens == alf[-1] )); then + alf[-1]=() + (( e = 0 )) + fi + done + + while (( c-- > 0 )) || return; do + token=$tokens[1] + tokens[1]=() + if (( $+galiases[$token] )); then + (( $aln[(eI)p$token] )) && break + s=$galiases[$token] + n=p$token + elif (( e )); then + break + elif (( $+aliases[$token] )); then + (( $aln[(eI)p$token] )) && break + s=$aliases[$token] + n=p$token + elif [[ $token == ?*.?* ]] && (( $+saliases[${token##*.}] )); then + r=${token##*.} + (( $aln[(eI)s$r] )) && break + s=${saliases[$r]%% #} + n=s$r + else + break + fi + aln+=$n + alp+=$#tokens + [[ $s == *' ' ]] && alf+=$#tokens + (( ic )) && tokens[1,0]=(${(Z+C+)s}) || tokens[1,0]=(${(z)s}) + done + + case $token in + '<<'(|-)) + state=h + continue + ;; + *('`'|['<>=$']'(')*) + if [[ $token == ('`'[^'`']##'`'|'"`'[^'`']##'`"'|'$('[^')']##')'|'"$('[^')']##')"'|['<>=']'('[^')']##')') ]]; then + s=${${token##('"'|)(['$<>']|)?}%%?('"'|)} + (( ic )) && tokens+=(';' ${(Z+C+)s}) || tokens+=(';' ${(z)s}) + fi + ;; + esac + + case $state in + *r) + state[-1]= + continue + ;; + a) + if [[ $token == $skip ]]; then + if [[ $token == '{' ]]; then + P9K_COMMANDS+=$cmd + cmd= + state= + else + skip='{' + fi + continue + else + state=t + fi + ;& # fall through + t|p*) + if (( $+__p9k_pb_term[$token] )); then + if [[ $token == '()' ]]; then + state= + else + P9K_COMMANDS+=$cmd + if [[ $token == '}' ]]; then + state=a + skip=always + else + skip=$__p9k_pb_term_skip[$token] + state=${skip:+s} + fi + fi + cmd= + continue + elif [[ $state == t ]]; then + continue + elif [[ $state == *x ]]; then + if (( $+__p9k_pb_redirect[$token] )); then + prev= + state[-1]=r + continue + else + state[-1]= + fi + fi + ;; + s) + if [[ $token == $~skip ]]; then + state= + fi + continue + ;; + h) + while (( $#tokens )); do + (( e = ${tokens[(i)${(Q)token}]} )) + if [[ $tokens[e-1] == ';' && $tokens[e+1] == ';' ]]; then + tokens[1,e]=() + break + else + tokens[1,e]=() + fi + done + while (( $#alp && alp[-1] >= $#tokens )); do + aln[-1]=() + alp[-1]=() + done + state=t + continue + ;; + esac + + if (( $+__p9k_pb_redirect[${token#<0-255>}] )); then + state+=r + continue + fi + + if [[ $token == *'$'* ]]; then + if [[ $token == $~var ]]; then + n=${${token##[^[:IDENT:]]}%%[^[:IDENT:]]} + [[ $token == *'"' ]] && v=("${(P)n}") || v=(${(P)n}) + tokens[1,0]=(${(@qq)v}) + continue + fi + fi + + case $state in + '') + if (( $+__p9k_pb_cmd_skip[$token] )); then + skip=$__p9k_pb_cmd_skip[$token] + [[ $token == '}' ]] && state=a || state=${skip:+s} + continue + fi + if [[ $token == *=* ]]; then + v=${(S)token/#(<->|([[:alpha:]_][[:IDENT:]]#(|'['*[^\\](\\\\)#']')))(|'+')=} + if (( $#v < $#token )); then + if [[ $v == '(' ]]; then + state=s + skip='\)' + fi + continue + fi + fi + : ${token::=${(Q)${~token}}} + ;; + p2) + if [[ -n $prev ]]; then + prev= + else + : ${token::=${(Q)${~token}}} + if [[ $token == '{'$~id'}' ]]; then + state=p2x + prev=$token + else + state=p + fi + continue + fi + ;& # fall through + p) + if [[ -n $prev ]]; then + token=$prev + prev= + else + : ${token::=${(Q)${~token}}} + case $token in + '{'$~id'}') prev=$token; state=px; continue;; + [^-]*) ;; + --) state=p1; continue;; + $~skip) state=p2; continue;; + *) continue;; + esac + fi + ;; + p1) + if [[ -n $prev ]]; then + token=$prev + prev= + else + : ${token::=${(Q)${~token}}} + if [[ $token == '{'$~id'}' ]]; then + state=p1x + prev=$token + continue + fi + fi + ;; + esac + + if (( $+__p9k_pb_precommand[$token] )); then + prev= + state=p + skip=$__p9k_pb_precommand[$token] + cmd+=$token$'\0' + else + state=t + [[ $token == ('(('*'))'|'`'*'`'|'$'*|['<>=']'('*')'|*$'\0'*) ]] || cmd+=$token$'\0' + fi + done + } always { + [[ $state == (px|p1x) ]] && cmd+=$prev + P9K_COMMANDS+=$cmd + P9K_COMMANDS=(${(u)P9K_COMMANDS%$'\0'}) + } +} diff --git a/airootfs/etc/skel/powerlevel10k/internal/wizard.zsh b/airootfs/etc/skel/powerlevel10k/internal/wizard.zsh new file mode 100644 index 0000000..a89b40f --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/internal/wizard.zsh @@ -0,0 +1,2205 @@ +local -i force=0 + +local opt +while getopts 'f' opt; do + case $opt in + f) force=1;; + +f) force=0;; + \?) return 1;; + esac +done + +if (( OPTIND <= ARGC )); then + print -lr -- "wizard.zsh: invalid arguments: $@" >&2 + return 1 +fi + +local -i in_z4h_wizard=0 +[[ $force == 0 && $+functions[z4h] == 1 && -n $Z4H && -e $Z4H/welcome ]] && in_z4h_wizard=1 + +local -i success=0 + +local -ri force + +local -r font_base_url='https://github.com/romkatv/powerlevel10k-media/raw/master' + +local -ri prompt_indent=2 + +local -rA pure_original=(grey 242 red 1 yellow 3 blue 4 magenta 5 cyan 6 white 7) +local -rA pure_snazzy=(grey 242 red '#FF5C57' yellow '#F3F99D' blue '#57C7FF' magenta '#FF6AC1' cyan '#9AEDFE' white '#F1F1F0') +local -ra bg_color=(240 238 236 234) +local -ra sep_color=(248 246 244 242) +local -ra prefix_color=(250 248 246 244) + +local -r left_circle='\uE0B6' +local -r right_circle='\uE0B4' +local -r left_arc='\uE0B7' +local -r right_arc='\uE0B5' +local -r left_triangle='\uE0B2' +local -r right_triangle='\uE0B0' +local -r left_angle='\uE0B3' +local -r right_angle='\uE0B1' +local -r fade_in='░▒▓' +local -r fade_out='▓▒░' +local -r vertical_bar='\u2502' + +local -r cursor='%1{\e[07m \e[27m%}' + +local -r time_24h='16:23:42' +local -r time_12h='04:23:42 PM' + +local -ra lean_left=( + '%$frame_color[$color]F╭─ ' '${extra_icons[1]:+%f$extra_icons[1] }%31F$extra_icons[2]%B%39F~%b%31F/%B%39Fsrc%b%f $prefixes[1]%76F$extra_icons[3]master%f ' + '%$frame_color[$color]F╰─' '%76F$prompt_char%f ${buffer:-$cursor}' +) + +local -ra lean_right=( + ' $prefixes[2]%101F$extra_icons[4]5s%f${time:+ $prefixes[3]%66F$extra_icons[5]$time%f}' ' %$frame_color[$color]F─╮%f' + '' ' %$frame_color[$color]F─╯%f' +) + +local -ra lean_8colors_left=( + '%$frame_color[$color]F╭─ ' '${extra_icons[1]:+%f$extra_icons[1] }%4F$extra_icons[2]%4F~/src%f $prefixes[1]%2F$extra_icons[3]master%f ' + '%$frame_color[$color]F╰─' '%2F$prompt_char%f ${buffer:-$cursor}' +) + +local -ra lean_8colors_right=( + ' $prefixes[2]%3F$extra_icons[4]5s%f${time:+ $prefixes[3]%6F$extra_icons[5]$time%f}' ' %$frame_color[$color]F─╮%f' + '' ' %$frame_color[$color]F─╯%f' +) + +local -ra classic_left=( + '%$frame_color[$color]F╭─' '%F{$bg_color[$color]}$left_tail%K{$bg_color[$color]} ${extra_icons[1]:+%255F$extra_icons[1] %$sep_color[$color]F$left_subsep%f }%31F$extra_icons[2]%B%39F~%b%K{$bg_color[$color]}%31F/%B%39Fsrc%b%K{$bg_color[$color]} %$sep_color[$color]F$left_subsep%f %$prefix_color[$color]F$prefixes[1]%76F$extra_icons[3]master %k%$bg_color[$color]F$left_head%f' + '%$frame_color[$color]F╰─' '%f ${buffer:-$cursor}' +) + +local -ra classic_right=( + '%$bg_color[$color]F$right_head%K{$bg_color[$color]}%f %$prefix_color[$color]F$prefixes[2]%101F5s $extra_icons[4]${time:+%$sep_color[$color]F$right_subsep %$prefix_color[$color]F$prefixes[3]%66F$time $extra_icons[5]}%k%F{$bg_color[$color]}$right_tail%f' '%$frame_color[$color]F─╮%f' + '' '%$frame_color[$color]F─╯%f' +) + +local -ra pure_left=( + '' '%F{$pure_color[blue]}~/src%f %F{$pure_color[grey]}master%f ${pure_use_rprompt-%F{$pure_color[yellow]\}5s%f }' + '' '%F{$pure_color[magenta]}$prompt_char%f ${buffer:-$cursor}' +) + +local -ra pure_right=( + '${pure_use_rprompt+%F{$pure_color[yellow]\}5s%f${time:+ }}${time:+%F{$pure_color[grey]\}$time%f}' '' + '' '' +) + +local -ra rainbow_left=( + '%$frame_color[$color]F╭─' '%F{${${extra_icons[1]:+7}:-4}}$left_tail${extra_icons[1]:+%K{7\}%232F $extra_icons[1] %K{4\}%7F$left_sep}%K{4}%254F $extra_icons[2]%B%255F~%b%K{4}%254F/%B%255Fsrc%b%K{4} %K{2}%4F$left_sep %0F$prefixes[1]$extra_icons[3]master %k%2F$left_head%f' + '%$frame_color[$color]F╰─' '%f ${buffer:-$cursor}' +) + +local -ra rainbow_right=( + '%3F$right_head%K{3} %0F$prefixes[2]5s $extra_icons[4]%3F${time:+%7F$right_sep%K{7\} %0F$prefixes[3]$time $extra_icons[5]%7F}%k$right_tail%f' '%$frame_color[$color]F─╮%f' + '' '%$frame_color[$color]F─╯%f' +) + +function prompt_length() { + local -i COLUMNS=1024 + local -i x y=$#1 m + if (( y )); then + while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do + x=y + (( y *= 2 )) + done + while (( y > x + 1 )); do + (( m = x + (y - x) / 2 )) + (( ${${(%):-$1%$m(l.x.y)}[-1]} = m )) + done + fi + typeset -g REPLY=$x +} + +function print_prompt() { + [[ $parameters[extra_icons] == scalar* ]] && eval "local -a extra_icons=$extra_icons" + [[ $parameters[pure_color] == scalar* ]] && eval "local -A pure_color=$pure_color" + [[ $parameters[prefixes] == scalar* ]] && eval "local -a prefixes=$prefixes" + + local left=${style}_left + local right=${style}_right + left=("${(@P)left}") + right=("${(@P)right}") + (( disable_rprompt )) && right=() + eval "left=(${(@)left:/(#b)(*)/\"$match[1]\"})" + eval "right=(${(@)right:/(#b)(*)/\"$match[1]\"})" + if (( num_lines == 1)); then + left=($left[2] $left[4]) + right=($right[1] $right[3]) + else + local c=76 + [[ $style == pure ]] && c=$pure_color[magenta] + [[ $style == lean_8colors ]] && c=2 + (( left_frame )) || left=('' $left[2] '' "%F{$c}$prompt_char%f ${buffer:-$cursor}") + (( right_frame )) || right=($right[1] '' '' '') + fi + local -i left_indent=prompt_indent + local -i right_indent=prompt_indent + prompt_length ${(g::):-$left[1]$left[2]$right[1]$right[2]} + local -i width=REPLY + while (( wizard_columns - width <= left_indent + right_indent )); do + if (( right_indent )); then + (( --right_indent )) + elif (( left_indent )); then + (( --left_indent )) + else + print -P ' [%3Fnot enough horizontal space to display this%f]' + return 0 + fi + done + local -i i + for ((i = 1; i < $#left; i+=2)); do + local l=${(g::):-$left[i]$left[i+1]} + local r=${(g::):-$right[i]$right[i+1]} + prompt_length $l$r + local -i gap=$((wizard_columns - left_indent - right_indent - REPLY)) + (( num_lines == 2 && i == 1 )) && local fill=$gap_char || local fill=' ' + print -n -- ${(pl:$left_indent:: :)} + print -nP -- $l + print -nP -- "%$frame_color[$color]F${(pl:$gap::$fill:)}%f" + print -P -- $r + done +} + +function href() { + local url=${${1//\%/%%}//\\/\\\\} + if (( _p9k_term_has_href )); then + print -r -- '%{\e]8;;'$url'\a%}'$url'%{\e]8;;\a%}' + else + print -r -- $url + fi +} + +function flowing() { + (( ${wizard_columns:-0} )) || local -i wizard_columns=COLUMNS + local opt + local -i centered indentation + while getopts 'ci:' opt; do + case $opt in + i) indentation=$OPTARG;; + c) centered=1;; + +c) centered=0;; + \?) exit 1;; + esac + done + shift $((OPTIND-1)) + local line word lines=() + for word in "$@"; do + prompt_length ${(g::):-"$line $word"} + if (( REPLY > wizard_columns )); then + [[ -z $line ]] || lines+=$line + line= + fi + if [[ -n $line ]]; then + line+=' ' + elif (( $#lines )); then + line=${(pl:$indentation:: :)} + fi + line+=$word + done + [[ -z $line ]] || lines+=$line + for line in $lines; do + prompt_length ${(g::)line} + (( centered && REPLY < wizard_columns )) && print -n -- ${(pl:$(((wizard_columns - REPLY) / 2)):: :)} + print -P -- $line + done +} + +function clear() { + if (( $+commands[clear] )) && command clear 2>/dev/null; then + return + fi + echoti clear 2>/dev/null + print -n -- "\e[H\e[2J\e[3J" +} + +function hide_cursor() { + (( $+terminfo[cnorm] )) || return + echoti civis 2>/dev/null +} + +function show_cursor() { + local cnorm=${terminfo[cnorm]-} + if [[ $cnorm == *$'\e[?25h'(|'\e'*) ]]; then + print -n '\e[?25h' + else + print -n $cnorm + fi +} + +function consume_input() { + local key + while true; do + [[ -t 2 ]] + read -t0 -k key || break + done 2>/dev/null +} + +function quit() { + consume_input + if [[ $1 == '-c' ]]; then + print -Pr -- '' + print -Pr -- '%b%k%f%u%s' + print -Pr -- '%F{3}--- stack trace (most recent call first) ---%f' + print -lr -- $funcfiletrace + print -Pr -- '%F{3}--- end of stack trace ---%f' + print -Pr -- '' + print -Pr -- 'Press %BENTER%b to continue.' + hide_cursor + read -s + fi + restore_screen + print + if (( force )); then + flowing Powerlevel10k configuration wizard has been aborted. To run it again, type: + print -P "" + print -P " %2Fp10k%f %Bconfigure%b" + print -P "" + else + flowing \ + Powerlevel10k configuration wizard has been aborted. It will run again \ + next time unless you define at least one Powerlevel10k configuration option. \ + To define an option that does nothing except for disabling Powerlevel10k \ + configuration wizard, type the following command: + print -P "" + print -P " %2Fecho%f %3F'POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true'%f >>! $__p9k_zshrc_u" + print -P "" + flowing To run Powerlevel10k configuration wizard right now, type: + print -P "" + print -P " %2Fp10k%f %Bconfigure%b" + print -P "" + fi + function quit() {} + stty echo 2>/dev/null + show_cursor + exit 1 +} + +local screen_widgets=() +local -i max_priority +local -i prompt_idx +local choice + +function add_widget() { + local priority=$1 + shift + local render="${(j: :)${(@q)*}}" + screen_widgets+=("$priority" "$render") + (( priority <= max_priority )) || max_priority=priority +} + +function render_screen_pass() { + local -i pass=$1 + local -i prev_pass cur_pass + local prev_render cur_render + for cur_pass cur_render in "${(@)screen_widgets}" 0 ''; do + if (( prev_pass <= pass && (cur_pass == 0 || cur_pass > pass) )); then + eval $prev_render + fi + prev_pass=cur_pass + prev_render=$cur_render + done +} + +function get_columns() { return 'COLUMNS > 88 ? 88 : COLUMNS' } +functions -M get_columns 0 0 + +function render_screen() { + { + hide_cursor + while true; do + while true; do + typeset -gi wizard_columns='get_columns()' + typeset -gi wizard_lines=LINES + if (( wizard_columns < __p9k_wizard_columns )); then + clear + flowing -c %1FNot enough horizontal space.%f + print + flowing Make terminal window %Bwider%b or press %BCtrl-C%b to abort Powerlevel10k configuration wizard. + elif (( wizard_lines < __p9k_wizard_lines )); then + clear + flowing -c %1FNot enough vertical space.%f + print + flowing Make terminal window %Btaller%b or press %BCtrl-C%b to abort Powerlevel10k configuration wizard. + else + break + fi + while (( get_columns() == wizard_columns && LINES == wizard_lines )); do + sleep 1 + done + done + + local -a passes + () { + local -i pass + local render + for pass render in "${(@)screen_widgets}"; do + passes+=$pass + done + passes=(${(onu)passes}) + } + + local -i pass + for pass in $passes; do + local content="$(render_screen_pass $pass)" + local lines=("${(@f)content}") + (( $#lines > wizard_lines )) && continue + clear + print -rn -- $content + return 0 + done + + clear + flowing -c %1FNot enough vertical space.%f + print + flowing Make terminal window %Btaller%b or press %BCtrl-C%b to abort Powerlevel10k configuration wizard. + while (( get_columns() == wizard_columns && LINES == wizard_lines )); do + sleep 1 + done + done + } always { + show_cursor + } +} + +function add_prompt_n() { + add_widget 0 "$@" print_prompt + local var + for var; do + eval "local ${(q)var}" + done + if (( num_lines == 2 )); then + add_widget $(( 100 - ++prompt_idx )) print -P ' [%3Fnot enough vertical space to display this%f]' + fi +} + +function add_prompt() { + add_widget 0 print + add_widget 1 + add_prompt_n "$@" + add_widget 0 print + add_widget 2 +} + +function ask() { + local choices=$1 + local -i lines columns wizard_lines wizard_columns + add_widget 0 print -P "(q) Quit and do nothing." + add_widget 0 print + add_widget $((max_priority + 1)) + add_widget 0 print -P "%BChoice [${choices}q]: %b" + while true; do + =true + if (( LINES != lines || get_columns() != columns )); then + render_screen + lines=wizard_lines + columns=wizard_columns + fi + typeset -g choice= + if read -t1 -k choice; then + choice=${(L)choice} + if [[ $choice == q ]]; then + quit + fi + if [[ $choices == *$choice* ]]; then + screen_widgets=() + max_priority=0 + prompt_idx=0 + return + fi + fi + done +} + +local -i greeting_printed=0 + +function print_greeting() { + (( greeting_printed )) && return + if (( in_z4h_wizard )); then + flowing -c %3FZsh for Humans%f uses %4FPowerlevel10k%f to print command \ + line prompt. This wizard will ask you a few questions and configure \ + prompt for you. + elif (( force )); then + flowing -c This is %4FPowerlevel10k configuration wizard%f. \ + It will ask you a few questions and configure your prompt. + else + flowing -c This is %4FPowerlevel10k configuration wizard%f. \ + You are seeing it because you haven\'t defined any \ + Powerlevel10k configuration options. It will ask \ + you a few questions and configure your prompt. + fi + print -P "" +} + +function iterm_get() { + /usr/libexec/PlistBuddy -c "Print :$1" ~/Library/Preferences/com.googlecode.iterm2.plist +} + +local terminal iterm2_font_size iterm2_old_font=0 can_install_font=0 + +() { + [[ $P9K_SSH == 0 ]] || return + if [[ "$(uname)" == Linux && "$(uname -o)" == Android ]]; then + (( $+commands[termux-reload-settings] )) || return + (( $+commands[curl] )) || return + if [[ -f ~/.termux/font.ttf ]]; then + [[ -r ~/.termux/font.ttf ]] || return + [[ -w ~/.termux/font.ttf ]] || return + ! grep -q 'MesloLGS NF' ~/.termux/font.ttf 2>/dev/null || return + fi + if [[ -f ~/.termux ]]; then + [[ -d ~/.termux && -w ~/.termux ]] || return + else + [[ -w ~ ]] || return + fi + terminal=Termux + return 0 + fi + if [[ "$(uname)" == Darwin && $TERM_PROGRAM == iTerm.app ]]; then + (( $+commands[curl] )) || return + [[ $TERM_PROGRAM_VERSION == [2-9]* ]] || return + if [[ -f ~/Library/Fonts ]]; then + [[ -d ~/Library/Fonts && -w ~/Library/Fonts ]] || return + else + [[ -d ~/Library && -w ~/Library ]] || return + fi + [[ -x /usr/libexec/PlistBuddy ]] || return + [[ -x /usr/bin/plutil ]] || return + [[ -x /usr/bin/defaults ]] || return + [[ -f ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return + [[ -r ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return + [[ -w ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return + local guid1 && guid1="$(iterm_get '"Default Bookmark Guid"' 2>/dev/null)" || return + local guid2 && guid2="$(iterm_get '"New Bookmarks":0:"Guid"' 2>/dev/null)" || return + local font && font="$(iterm_get '"New Bookmarks":0:"Normal Font"' 2>/dev/null)" || return + [[ $guid1 == $guid2 ]] || return + [[ $font != 'MesloLGS-NF-Regular '<-> ]] || return + [[ $font == (#b)*' '(<->) ]] || return + [[ $font == 'MesloLGSNer-Regular '<-> ]] && iterm2_old_font=1 + iterm2_font_size=$match[1] + terminal=iTerm2 + return 0 + fi + return 1 +} && can_install_font=1 + +function run_command() { + local msg=$1 + shift + [[ -n $msg ]] && print -nP -- "$msg ..." + local err && err="$("$@" 2>&1)" || { + print -P " %1FERROR%f" + print -P "" + print -nP "%BCommand:%b " + print -r -- "${(@q)*}" + if [[ -n $err ]]; then + print -P "" + print -r -- $err + fi + quit -c + } + [[ -n $msg ]] && print -P " %2FOK%f" +} + +function install_font() { + clear + case $terminal in + Termux) + command mkdir -p -- ~/.termux || quit -c + run_command "Downloading %BMesloLGS NF Regular.ttf%b" \ + curl -fsSL -o ~/.termux/font.ttf "$font_base_url/MesloLGS%20NF%20Regular.ttf" + run_command "Reloading %BTermux%b settings" termux-reload-settings + ;; + iTerm2) + command mkdir -p -- ~/Library/Fonts || quit -c + local style + for style in Regular Bold Italic 'Bold Italic'; do + local file="MesloLGS NF ${style}.ttf" + run_command "Downloading %B$file%b" \ + curl -fsSL -o ~/Library/Fonts/$file.tmp "$font_base_url/${file// /%20}" + command mv -f -- ~/Library/Fonts/$file{.tmp,} || quit -c + done + print -nP -- "Changing %BiTerm2%b settings ..." + local size=$iterm2_font_size + [[ $size == 12 ]] && size=13 + local k t v settings=( + '"Normal Font"' string '"MesloLGS-NF-Regular '$size'"' + '"Terminal Type"' string '"xterm-256color"' + '"Horizontal Spacing"' real 1 + '"Vertical Spacing"' real 1 + '"Minimum Contrast"' real 0 + '"Use Bold Font"' bool 1 + '"Use Bright Bold"' bool 1 + '"Use Italic Font"' bool 1 + '"ASCII Anti Aliased"' bool 1 + '"Non-ASCII Anti Aliased"' bool 1 + '"Use Non-ASCII Font"' bool 0 + '"Ambiguous Double Width"' bool 0 + '"Draw Powerline Glyphs"' bool 1 + '"Only The Default BG Color Uses Transparency"' bool 1 + ) + for k t v in $settings; do + /usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:$k $v" \ + ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null && continue + run_command "" /usr/libexec/PlistBuddy -c \ + "Add :\"New Bookmarks\":0:$k $t $v" ~/Library/Preferences/com.googlecode.iterm2.plist + done + print -P " %2FOK%f" + print -nP "Updating %BiTerm2%b settings cache ..." + run_command "" /usr/bin/defaults read com.googlecode.iterm2 + sleep 3 + print -P " %2FOK%f" + sleep 1 + clear + hide_cursor + print + flowing +c "%2FMeslo Nerd Font%f" successfully installed. + print -P "" + () { + local out + out=$(/usr/bin/defaults read 'Apple Global Domain' NSQuitAlwaysKeepsWindows 2>/dev/null) || return + [[ $out == 1 ]] || return + out="$(iterm_get OpenNoWindowsAtStartup 2>/dev/null)" || return + [[ $out == false ]] + } + if (( $? )); then + flowing +c Please "%Brestart iTerm2%b" for the changes to take effect. + print -P "" + flowing +c -i 5 " 1. Click" "%BiTerm2 → Quit iTerm2%b" or press "%B⌘ Q%b." + flowing +c -i 5 " 2. Open %BiTerm2%b." + print -P "" + flowing +c "It's" important to "%Brestart iTerm2%b" by following the instructions above. \ + "It's" "%Bnot enough%b" to close iTerm2 by clicking on the red circle. You must \ + click "%BiTerm2 → Quit iTerm2%b" or press "%B⌘ Q%b." + else + flowing +c Please "%Brestart your computer%b" for the changes to take effect. + fi + while true; do sleep 60 2>/dev/null; done + ;; + esac + + return 0 +} + +function ask_font() { + (( can_install_font )) || return 0 + add_widget 0 print_greeting + if (( iterm2_old_font )); then + add_widget 0 flowing -c A new version of '%2FMeslo Nerd Font%f' is available. '%BInstall?%b' + else + add_widget 0 flowing -c %BInstall '%b%2FMeslo Nerd Font%f%B?%b' + fi + add_widget 0 print + add_widget 0 print -P "%B(y) Yes (recommended).%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(n) No. Use the current font.%b" + add_widget 0 print + add_widget 1 + ask yn + greeting_printed=1 + case $choice in + y) + ask_remove_font || return + install_font + ;; + n) ;; + esac + return 0 +} + +function print_file_path() { + local file=$1 + if (( ${(m)#file} > wizard_columns - 2 )); then + file[wizard_columns-4,-1]='...' + fi + add_widget 0 print -P " %B${file//\%/%%}%b" +} + +function ask_remove_font() { + local font + local -a fonts + local -i protected + for font in {,/System,~}/Library/Fonts/**/*[Mm]eslo*.(ttf|otf)(N:A); do + [[ -f $font && -r $font ]] || continue + [[ $font == ~/Library/Fonts/'MesloLGS NF '(Regular|Bold|Italic|Bold\ Italic).ttf ]] && continue + [[ "$(<$font)" == *"MesloLGS NF"$'\0'* ]] || continue + fonts+=$font + [[ -w ${font:h} ]] || protected=1 + done + (( $#fonts )) || return 0 + add_widget 0 flowing -c A variant of "%2FMeslo Nerd Font%f" is already installed. + add_widget 0 print -P "" + for font in $fonts; do + add_widget 0 print_file_path $font + done + add_widget 0 print -P "" + if (( protected )); then + if (( $#fonts == 1 )); then + add_widget 0 flowing Please %Bdelete%b this file and run '%2Fp10k%f %Bconfigure%b.' + else + add_widget 0 flowing Please %Bdelete%b these files and run '%2Fp10k%f %Bconfigure%b.' + fi + add_widget 0 print + restore_screen + local pass render + for pass render in "${(@)screen_widgets}"; do + (( pass == 0 )) && eval $render + done + exit 1 + fi + if (( $#fonts == 1 )); then + add_widget 0 flowing -c "%BDelete this file?%b" + else + add_widget 0 flowing -c "%BDelete these files?%b" + fi + add_widget 0 print -P "" + add_widget 0 print -P "%B(y) Yes (recommended).%b" + add_widget 0 print -P "" + add_widget 0 print -P "(r) Restart from the beginning." + ask yr + case $choice in + r) return 1;; + y) zf_rm -f -- $fonts || quit -c;; + esac + return 0 +} + +function ask_diamond() { + local extra + add_widget 0 print_greeting + add_widget 0 flowing -c %BDoes this look like a%b %2Fdiamond%f '%B(rotated square)?%b' + add_widget 0 flowing -c reference: "$(href https://graphemica.com/%E2%97%86)" + add_widget 0 print + add_widget 0 flowing -c -- "---> \uE0B2\uE0B0 <---" + add_widget 0 print + add_widget 3 + add_widget 0 print -P "%B(y) Yes.%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(n) No.%b" + add_widget 0 print + add_widget 2 + if (( can_install_font )); then + extra+=r + add_widget 0 print -P "(r) Restart from the beginning." + fi + ask yn$extra + greeting_printed=1 + case $choice in + r) return 1;; + y) cap_diamond=1;; + n) cap_diamond=0;; + esac + return 0 +} + +function ask_lock() { + [[ -n $2 ]] && add_widget 0 flowing -c "$2" + add_widget 0 flowing -c "%BDoes this look like a %b%2Flock%f%B?%b" + add_widget 0 flowing -c "reference: $(href https://fontawesome.com/icons/lock)" + add_widget 0 print + add_widget 0 flowing -c -- "---> $1 <---" + add_widget 0 print + add_widget 3 + add_widget 0 print -P "%B(y) Yes.%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(n) No.%b" + add_widget 0 print + add_widget 2 + add_widget 0 print -P "(r) Restart from the beginning." + ask ynr + case $choice in + r) return 1;; + y) cap_lock=1;; + n) cap_lock=0;; + esac + return 0 +} + +function ask_python() { + add_widget 0 flowing -c %BDoes this look like a "%b%2FPython logo%f%B?%b" + add_widget 0 flowing -c reference: "$(href https://fontawesome.com/icons/python)" + add_widget 0 print -P "" + add_widget 0 flowing -c -- "---> \uE63C <---" + add_widget 0 print -P "" + add_widget 3 + add_widget 0 print -P "%B(y) Yes.%b" + add_widget 0 print -P "" + add_widget 1 + add_widget 0 print -P "%B(n) No.%b" + add_widget 0 print -P "" + add_widget 2 + add_widget 0 print -P "(r) Restart from the beginning." + ask ynr + case $choice in + r) return 1;; + y) cap_python=1;; + n) cap_python=0;; + esac + return 0 +} + +function ask_quotes() { + add_widget 0 flowing -c %BDoes this look like%b "%2F><%f" %Bbut taller and "fatter?%b" + add_widget 0 print -P "" + add_widget 0 flowing -c -- "---> \u276F\u276E <---" + add_widget 0 print -P "" + add_widget 3 + add_widget 0 print -P "%B(y) Yes.%b" + add_widget 0 print -P "" + add_widget 1 + add_widget 0 print -P "%B(n) No.%b" + add_widget 0 print -P "" + add_widget 2 + add_widget 0 print -P "(r) Restart from the beginning." + ask ynr + case $choice in + r) return 1;; + y) cap_quotes=1;; + n) cap_quotes=0;; + esac + return 0 +} + +function ask_arrow() { + [[ -n $2 ]] && add_widget 0 flowing -c "$2" + add_widget 0 flowing -c %BDoes this look like an%b "%2Fupwards arrow%f%B?%b" + add_widget 0 flowing -c reference: "$(href https://graphemica.com/%F0%9F%A0%89)" + add_widget 0 print -P "" + add_widget 0 flowing -c -- "---> $1 <---" + add_widget 0 print -P "" + add_widget 3 + add_widget 0 print -P "%B(y) Yes.%b" + add_widget 0 print -P "" + add_widget 1 + add_widget 0 print -P "%B(n) No.%b" + add_widget 0 print -P "" + add_widget 2 + add_widget 0 print -P "(r) Restart from the beginning." + ask ynr + case $choice in + r) return 1;; + y) cap_arrow=1;; + n) cap_arrow=0;; + esac + return 0 +} + +function ask_icon_padding() { + if [[ $POWERLEVEL9K_MODE == (powerline|compatible|ascii) ]]; then + POWERLEVEL9K_ICON_PADDING=none + return 0 + fi + + local text="X" + text+="%1F${icons[VCS_GIT_ICON]// }%fX" + text+="%2F${icons[VCS_GIT_GITHUB_ICON]// }%fX" + text+="%3F${icons[TIME_ICON]// }%fX" + text+="%4F${icons[RUBY_ICON]// }%fX" + text+="%5F${icons[HOME_ICON]// }%fX" + text+="%6F${icons[HOME_SUB_ICON]// }%fX" + text+="%1F${icons[FOLDER_ICON]// }%fX" + text+="%2F${icons[RAM_ICON]// }%fX" + + add_widget 0 flowing -c %BDo all these icons "%b%2Ffit between the crosses%f%B?%b" + add_widget 0 print -P "" + add_widget 0 flowing -c -- "---> $text <---" + add_widget 0 print -P "" + add_widget 3 + add_widget 0 flowing +c -i 5 "%B(y) Yes." Icons are very close to the crosses but there is "%b%2Fno overlap%f%B.%b" + add_widget 0 print -P "" + add_widget 1 + add_widget 0 flowing +c -i 5 "%B(n) No." Some icons "%b%2Foverlap%f%B" neighbouring crosses.%b + add_widget 0 print -P "" + add_widget 2 + add_widget 0 print -P "(r) Restart from the beginning." + ask ynr + case $choice in + r) return 1;; + y) + POWERLEVEL9K_ICON_PADDING=none + options+='small icons' + ;; + n) + POWERLEVEL9K_ICON_PADDING=moderate + options+='large icons' + up_triangle+=' ' + down_triangle+=' ' + slanted_bar='\uE0BD ' + ;; + esac + return 0 +} + +function ask_style() { + if (( terminfo[colors] < 256 )); then + style=lean_8colors + left_frame=0 + right_frame=0 + frame_color=(0 7 2 4) + color_name=(Black White Green Blue) + options+=lean_8colors + return 0 + fi + local extra + add_widget 0 flowing -c "%BPrompt Style%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(1) Lean.%b" + add_prompt style=lean left_frame=0 right_frame=0 + add_widget 0 print -P "%B(2) Classic.%b" + add_prompt style=classic + add_widget 0 print -P "%B(3) Rainbow.%b" + add_prompt style=rainbow + if [[ $POWERLEVEL9K_MODE != ascii ]]; then + extra+=4 + add_widget 0 print -P "%B(4) Pure.%b" + add_prompt style=pure + fi + add_widget 0 print -P "(r) Restart from the beginning." + ask 123${extra}r + case $choice in + r) return 1;; + 1) style=lean; left_frame=0; right_frame=0; options+=lean;; + 2) style=classic; options+=classic;; + 3) style=rainbow; options+=rainbow;; + 4) style=pure; empty_line=1; options+=pure;; + esac + return 0 +} + +function ask_charset() { + [[ $style == (lean*|classic|rainbow) && $POWERLEVEL9K_MODE != ascii ]] || return 0 + add_widget 0 flowing -c "%BCharacter Set%b" + add_widget 0 print -P "" + add_widget 1 + add_widget 0 print -P "%B(1) Unicode.%b" + add_prompt + add_widget 0 print -P "%B(2) ASCII.%b" + add_prompt \ + left_sep= \ + right_sep= \ + left_subsep='|' \ + right_subsep='|' \ + left_head= \ + right_head= \ + prompt_char='>' \ + left_frame=0 \ + right_frame=0 + add_widget 0 print -P "(r) Restart from the beginning." + ask 12r + case $choice in + r) return 1;; + 1) options+=unicode;; + 2) + options+=ascii + left_sep= + right_sep= + left_subsep='|' + right_subsep='|' + left_head= + right_head= + prompt_char='>' + left_frame=0 + right_frame=0 + POWERLEVEL9K_MODE=ascii + POWERLEVEL9K_ICON_PADDING=none + cap_diamond=0 + cap_python=0 + cap_arrow=0 + cap_lock=0 + cap_quotes=0 + ;; + esac + return 0 +} + +function ask_color_scheme() { + (( terminfo[colors] < 256 )) && return + if [[ $style == lean ]]; then + add_widget 0 flowing -c "%BPrompt Colors%b" + add_widget 0 print -P "" + add_widget 1 + add_widget 0 print -P "%B(1) 256 colors.%b" + add_prompt style=lean + add_widget 0 print -P "%B(2) 8 colors.%b" + add_prompt style=lean_8colors + add_widget 0 print -P "(r) Restart from the beginning." + ask 12r + case $choice in + r) return 1;; + 1) style=lean;; + 2) + style=lean_8colors + frame_color=(0 7 2 4) + color_name=(Black White Green Blue) + ;; + esac + options=(${options:#lean} $style) + elif [[ $style == pure && $has_truecolor == 1 ]]; then + add_widget 0 flowing -c "%BPrompt Colors%b" + add_widget 0 print -P "" + add_widget 1 + add_widget 0 print -P "%B(1) Original.%b" + add_prompt "pure_color=(${(j: :)${(@q)${(@kv)pure_original}}})" + add_widget 0 print -P "%B(2) Snazzy.%b" + add_prompt "pure_color=(${(j: :)${(@q)${(@kv)pure_snazzy}}})" + add_widget 0 print -P "(r) Restart from the beginning." + ask 12r + case $choice in + r) return 1;; + 1) + pure_color=(${(kv)pure_original}) + options+=original + ;; + 2) + pure_color=(${(kv)pure_snazzy}) + options+=snazzy + ;; + esac + fi + return 0 +} + +function ask_color() { + [[ $style != classic ]] && return + add_widget 0 flowing -c "%BPrompt Color%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(1) $color_name[1].%b" + add_prompt color=1 + add_widget 0 print -P "%B(2) $color_name[2].%b" + add_prompt color=2 + add_widget 0 print -P "%B(3) $color_name[3].%b" + add_prompt color=3 + add_widget 0 print -P "%B(4) $color_name[4].%b" + add_prompt color=4 + add_widget 0 print -P "(r) Restart from the beginning." + ask 1234r + case $choice in + r) return 1;; + [1-4]) color=$choice;; + esac + options+=${${(L)color_name[color]}//ı/i} + return 0 +} + +function print_frame_marker() { + local label="(1) $color_name[1]." + local -i n='wizard_columns - 7' + local -i m=$((n - $#label)) + print -P "${(l:$n:: :)}frame" + print -P "%B$label%b${(l:$m:: :)} |" + print -P "${(l:$n:: :)} v" +} + +function ask_ornaments_color() { + [[ $style != (rainbow|lean*) || $num_lines == 1 ]] && return + [[ $gap_char == ' ' && $left_frame == 0 && $right_frame == 0 ]] && return + local ornaments=() + [[ $gap_char != ' ' ]] && ornaments+=Connection + (( left_frame || right_frame )) && ornaments+=Frame + add_widget 0 flowing -c "%B${(j: & :)ornaments} Color%b" + if (( left_frame || right_frame )); then + add_widget 0 print_frame_marker + add_widget 3 print -P "%B(1) $color_name[1].%b" + add_prompt_n color=1 + add_widget 0 print + add_widget 2 + else + add_widget 1 + add_widget 0 print -P "%B(1) $color_name[1].%b" + add_prompt color=1 + fi + add_widget 0 print -P "%B(2) $color_name[2].%b" + add_prompt color=2 + add_widget 0 print -P "%B(3) $color_name[3].%b" + add_prompt color=3 + add_widget 0 print -P "%B(4) $color_name[4].%b" + add_prompt color=4 + add_widget 0 print -P "(r) Restart from the beginning." + ask 1234r + case $choice in + r) return 1;; + [1-4]) color=$choice;; + esac + options+=${${(L)color_name[color]}//ı/i}-ornaments + return 0 +} + +function ask_time() { + local extra + add_widget 0 flowing -c "%BShow current time?%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(n) No.%b" + add_prompt time= + add_widget 0 print -P "%B(1) 12-hour format.%b" + add_prompt time=$time_12h + add_widget 0 print -P "%B(2) 24-hour format.%b" + add_prompt time=$time_24h + add_widget 0 print -P "(r) Restart from the beginning." + ask n12r + case $choice in + r) return 1;; + n) time=;; + 1) time=$time_12h; options+='12h time';; + 2) time=$time_24h; options+='24h time';; + esac + return 0 +} + +function ask_use_rprompt() { + [[ $style != pure ]] && return + add_widget 0 flowing -c "%BNon-permanent content location%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(1) Left.%b" + add_prompt + add_widget 0 print -P "%B(2) Right.%b" + add_prompt pure_use_rprompt= + add_widget 0 print -P "(r) Restart from the beginning." + ask 12r + case $choice in + r) return 1;; + 1) ;; + 2) pure_use_rprompt=; options+=rprompt;; + esac + return 0 +} + +function os_icon_name() { + local uname="$(uname)" + if [[ $uname == Linux && "$(uname -o 2>/dev/null)" == Android ]]; then + echo ANDROID_ICON + else + case $uname in + SunOS) echo SUNOS_ICON;; + Darwin) echo APPLE_ICON;; + CYGWIN_NT-*|MSYS_NT-*|MINGW64_NT-*|MINGW32_NT-*) echo WINDOWS_ICON;; + FreeBSD|OpenBSD|DragonFly) echo FREEBSD_ICON;; + Linux) + local os_release_id + if [[ -r /etc/os-release ]]; then + local lines=(${(f)"$(*|<6->.*) ]]; then + instant_prompt=off + options+=instant_prompt=auto-off + return 0 + fi + if (( $+functions[z4h] )); then + instant_prompt=quiet + options+=instant_prompt=auto-quiet + return + fi + add_widget 0 flowing -c "%BInstant Prompt Mode%b" + add_widget 0 print_instant_prompt_link + add_widget 1 + add_widget 0 print + add_widget 2 + add_widget 0 flowing +c -i 5 "%B(1) Verbose (recommended).%b" + add_widget 0 print + add_widget 1 + add_widget 0 flowing +c -i 5 "%B(2) Quiet.%b" Choose this if you\'ve read and understood \ + instant prompt documentation. + add_widget 0 print + add_widget 1 + add_widget 0 flowing +c -i 5 "%B(3) Off.%b" Choose this if you\'ve tried instant prompt \ + and found it incompatible with your zsh configuration files. + add_widget 0 print + add_widget 2 + add_widget 0 print -P "(r) Restart from the beginning." + ask 123r + case $choice in + r) return 1;; + 1) instant_prompt=verbose; options+=instant_prompt=verbose;; + 2) instant_prompt=quiet; options+=instant_prompt=quiet;; + 3) instant_prompt=off; options+=instant_prompt=off;; + esac + return 0 +} + +function ask_transient_prompt() { + local disable_rprompt=$((num_lines == 1)) + local p=76 + [[ $style == pure ]] && p=$pure_color[magenta] + [[ $style == lean_8colors ]] && p=2 + p="%F{$p}$prompt_char%f" + add_widget 0 flowing -c "%BEnable Transient Prompt?%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "%B(y) Yes.%b" + add_widget 0 print + add_widget 1 + add_widget 0 print -P "${(pl:$prompt_indent:: :)}$p %2Fgit%f pull" + add_widget 3 + add_widget 0 print -P "${(pl:$prompt_indent:: :)}$p %2Fgit%f branch x" + (( empty_line )) && add_widget 0 print + add_prompt_n buffer="%2Fgit%f checkout x$cursor" + add_widget 0 print + add_widget 2 + add_widget 0 print -P "%B(n) No.%b" + add_widget 0 print + add_widget 1 + add_widget 0 buffer="%2Fgit%f pull" print_prompt + add_widget 3 + (( empty_line )) && { add_widget 0 print; add_widget 3 } + add_prompt_n buffer="%2Fgit%f branch x" + (( empty_line )) && add_widget 0 print + add_prompt_n buffer="%2Fgit%f checkout x$cursor" + add_widget 0 print + add_widget 2 + add_widget 0 print -P "(r) Restart from the beginning." + ask ynr + case $choice in + r) return 1;; + y) transient_prompt=1; options+=transient_prompt;; + n) transient_prompt=0;; + esac + return 0 +} + +function ask_config_overwrite() { + config_backup= + config_backup_u=0 + if [[ ! -e $__p9k_cfg_path ]]; then + return 0 + fi + add_widget 0 flowing -c Powerlevel10k config file already exists. + add_widget 0 flowing -c "%BOverwrite" "%b%2F${__p9k_cfg_path_u//\\/\\\\}%f%B?%b" + add_widget 0 print -P "" + add_widget 0 print -P "%B(y) Yes.%b" + add_widget 0 print -P "" + add_widget 0 print -P "(r) Restart from the beginning." + ask yr + case $choice in + r) return 1;; + y) + if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then + local tmpdir=$TMPDIR + local tmpdir_u='$TMPDIR' + else + local tmpdir=/tmp + local tmpdir_u=/tmp + fi + if (( ! $+commands[mktemp] )) || + ! config_backup=$(mktemp $tmpdir/$__p9k_cfg_basename.XXXXXXXXXX 2>/dev/null); then + config_backup=$tmpdir/$__p9k_cfg_basename.$EPOCHREALTIME + fi + cp $__p9k_cfg_path $config_backup || quit -c + config_backup_u=$tmpdir_u/${(q-)config_backup:t} + ;; + esac + return 0 +} + +function ask_zshrc_edit() { + zshrc_content= + zshrc_backup= + zshrc_backup_u= + zshrc_has_cfg=0 + zshrc_has_instant_prompt=0 + write_zshrc=0 + + if (( $+functions[z4h] )); then + zshrc_has_cfg=1 + zshrc_has_instant_prompt=1 + return + fi + + check_zshrc_integration || quit -c + [[ $instant_prompt == off ]] && zshrc_has_instant_prompt=1 + (( zshrc_has_cfg && zshrc_has_instant_prompt )) && return + + add_widget 0 flowing -c %BApply changes to "%b%2F${__p9k_zshrc_u//\\/\\\\}%f%B?%b" + add_widget 0 print -P "" + add_widget 1 + local modifiable=y + if [[ ! -w $__p9k_zd ]]; then + modifiable= + add_widget 0 flowing -c %3FWARNING:%f %2F${__p9k_zd_u//\\/\\\\}%f %3Fis readonly.%f + add_widget 0 print -P "" + elif [[ -e $__p9k_zshrc && ! -w $__p9k_zshrc ]]; then + local -a stat + zstat -A stat +uid -- $__p9k_zshrc || quit -c + if (( stat[1] == EUID )); then + add_widget 0 flowing -c %3FNOTE:%f %2F${__p9k_zshrc_u//\\/\\\\}%f %3Fis readonly.%f + else + modifiable= + add_widget 0 flowing -c \ + %3FWARNING:%f %2F${__p9k_zshrc_u//\\/\\\\}%f %3Fis readonly and \ + not owned by the user. Cannot modify it.%f + fi + add_widget 0 print -P "" + fi + if [[ $modifiable == y ]]; then + add_widget 0 print -P "%B(y) Yes (recommended).%b" + else + add_widget 0 print -P "%1F(y) Yes (disabled).%f" + fi + add_widget 0 print -P "" + add_widget 0 flowing +c -i 5 "%B(n) No." I know which changes to apply and will do it myself.%b + add_widget 0 print -P "" + add_widget 0 print -P "(r) Restart from the beginning." + ask ${modifiable}nr + case $choice in + r) return 1;; + n) return 0;; + y) + write_zshrc=1 + if [[ -n $zshrc_content ]]; then + if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then + local tmpdir=$TMPDIR + local tmpdir_u='$TMPDIR' + else + local tmpdir=/tmp + local tmpdir_u=/tmp + fi + if (( ! $+commands[mktemp] )) || + ! zshrc_backup="$(mktemp $tmpdir/.zshrc.XXXXXXXXXX 2>/dev/null)"; then + zshrc_backup=$tmpdir/.zshrc.$EPOCHREALTIME + fi + cp -p $__p9k_zshrc $zshrc_backup || quit -c + local -i writable=1 + if [[ ! -w $zshrc_backup ]]; then + chmod u+w -- $zshrc_backup || quit -c + writable=0 + fi + print -r -- $zshrc_content >$zshrc_backup || quit -c + (( writable )) || chmod u-w -- $zshrc_backup || quit -c + zshrc_backup_u=$tmpdir_u/${(q-)zshrc_backup:t} + fi + ;; + esac + return 0 +} + +function generate_config() { + local base && base="$(<$__p9k_root_dir/config/p10k-${style//_/-}.zsh)" || return + local lines=("${(@f)base}") + + function sub() { + lines=("${(@)lines/#(#b)([[:space:]]#)typeset -g POWERLEVEL9K_$1=*/$match[1]typeset -g POWERLEVEL9K_$1=$2}") + } + + function uncomment() { + lines=("${(@)lines/#(#b)([[:space:]]#)\# $1( |)/$match[1]$1$match[2]$match[2]}") + } + + function rep() { + lines=("${(@)lines//$1/$2}") + } + + if [[ $style == pure ]]; then + rep "local grey=242" "local grey='$pure_color[grey]'" + rep "local red=1" "local red='$pure_color[red]'" + rep "local yellow=3" "local yellow='$pure_color[yellow]'" + rep "local blue=4" "local blue='$pure_color[blue]'" + rep "local magenta=5" "local magenta='$pure_color[magenta]'" + rep "local cyan=6" "local cyan='$pure_color[cyan]'" + rep "local white=7" "local white='$pure_color[white]'" + else + sub MODE $POWERLEVEL9K_MODE + + sub ICON_PADDING $POWERLEVEL9K_ICON_PADDING + + if [[ $POWERLEVEL9K_MODE == compatible ]]; then + sub STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION "'х'" + sub STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION "'х'" + sub STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION "'х'" + fi + + if [[ $POWERLEVEL9K_MODE == (compatible|powerline) ]]; then + uncomment 'typeset -g POWERLEVEL9K_LOCK_ICON' + sub LOCK_ICON "'∅'" + uncomment 'typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION' + sub NORDVPN_VISUAL_IDENTIFIER_EXPANSION "'nord'" + uncomment 'typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION' + sub RANGER_VISUAL_IDENTIFIER_EXPANSION "'▲'" + uncomment 'typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION' + sub KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION "'○'" + uncomment 'typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION' + sub AZURE_VISUAL_IDENTIFIER_EXPANSION "'az'" + uncomment 'typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION' + sub AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION "'eb'" + uncomment 'typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION' + sub BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION "'≡'" + fi + + if [[ $POWERLEVEL9K_MODE == (awesome-patched|awesome-fontconfig) && $cap_python == 0 ]]; then + uncomment 'typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION' + uncomment 'typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION' + uncomment 'typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION' + uncomment 'typeset -g POWERLEVEL9K_PYTHON_ICON' + sub VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION "'🐍'" + sub ANACONDA_VISUAL_IDENTIFIER_EXPANSION "'🐍'" + sub PYENV_VISUAL_IDENTIFIER_EXPANSION "'🐍'" + sub PYTHON_ICON "'🐍'" + fi + + case $POWERLEVEL9K_MODE in + nerdfont-complete) + sub BATTERY_STAGES "'\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578'" + ;; + nerdfont-v3) + sub BATTERY_STAGES "'\UF008E\UF007A\UF007B\UF007C\UF007D\UF007E\UF007F\UF0080\UF0081\UF0082\UF0079'" + ;; + esac + + if [[ $style == (classic|rainbow) ]]; then + if [[ $style == classic ]]; then + sub BACKGROUND $bg_color[$color] + sub LEFT_SUBSEGMENT_SEPARATOR "'%$sep_color[$color]F$left_subsep'" + sub RIGHT_SUBSEGMENT_SEPARATOR "'%$sep_color[$color]F$right_subsep'" + sub VCS_LOADING_FOREGROUND $sep_color[$color] + rep '%248F' "%$prefix_color[$color]F" + else + sub LEFT_SUBSEGMENT_SEPARATOR "'$left_subsep'" + sub RIGHT_SUBSEGMENT_SEPARATOR "'$right_subsep'" + fi + sub RULER_FOREGROUND $frame_color[$color] + sub MULTILINE_FIRST_PROMPT_GAP_FOREGROUND $frame_color[$color] + sub MULTILINE_FIRST_PROMPT_PREFIX "'%$frame_color[$color]F╭─'" + sub MULTILINE_NEWLINE_PROMPT_PREFIX "'%$frame_color[$color]F├─'" + sub MULTILINE_LAST_PROMPT_PREFIX "'%$frame_color[$color]F╰─'" + sub MULTILINE_FIRST_PROMPT_SUFFIX "'%$frame_color[$color]F─╮'" + sub MULTILINE_NEWLINE_PROMPT_SUFFIX "'%$frame_color[$color]F─┤'" + sub MULTILINE_LAST_PROMPT_SUFFIX "'%$frame_color[$color]F─╯'" + sub LEFT_SEGMENT_SEPARATOR "'$left_sep'" + sub RIGHT_SEGMENT_SEPARATOR "'$right_sep'" + sub LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL "'$left_tail'" + sub LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL "'$left_head'" + sub RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL "'$right_head'" + sub RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL "'$right_tail'" + fi + + if [[ -n ${(j::)extra_icons} ]]; then + local branch_icon=${icons[VCS_BRANCH_ICON]// } + sub VCS_BRANCH_ICON "'$branch_icon '" + uncomment os_icon + else + uncomment 'typeset -g POWERLEVEL9K_DIR_CLASSES' + uncomment 'typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION' + uncomment 'typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION' + uncomment 'typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION' + sub VCS_VISUAL_IDENTIFIER_EXPANSION '' + sub COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION '' + sub TIME_VISUAL_IDENTIFIER_EXPANSION '' + fi + + if [[ -n ${(j::)prefixes} ]]; then + uncomment 'typeset -g POWERLEVEL9K_VCS_PREFIX' + uncomment 'typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX' + uncomment 'typeset -g POWERLEVEL9K_CONTEXT_PREFIX' + uncomment 'typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX' + uncomment 'typeset -g POWERLEVEL9K_TIME_PREFIX' + uncomment 'typeset -g POWERLEVEL9K_TOOLBOX_PREFIX' + if [[ $style == (lean|classic) ]]; then + [[ $style == classic ]] && local fg="%$prefix_color[$color]F" || local fg="%f" + sub VCS_PREFIX "'${fg}on '" + sub COMMAND_EXECUTION_TIME_PREFIX "'${fg}took '" + sub CONTEXT_PREFIX "'${fg}with '" + sub KUBECONTEXT_PREFIX "'${fg}at '" + sub TIME_PREFIX "'${fg}at '" + sub TOOLBOX_PREFIX "'${fg}in '" + fi + fi + + sub MULTILINE_FIRST_PROMPT_GAP_CHAR "'$gap_char'" + + if [[ $style == (classic|rainbow) && $num_lines == 2 ]]; then + if (( ! right_frame )); then + sub MULTILINE_FIRST_PROMPT_SUFFIX '' + sub MULTILINE_NEWLINE_PROMPT_SUFFIX '' + sub MULTILINE_LAST_PROMPT_SUFFIX '' + fi + if (( ! left_frame )); then + sub MULTILINE_FIRST_PROMPT_PREFIX '' + sub MULTILINE_NEWLINE_PROMPT_PREFIX '' + sub MULTILINE_LAST_PROMPT_PREFIX '' + sub STATUS_OK false + sub STATUS_ERROR false + fi + fi + + if [[ $style == lean* ]]; then + sub RULER_FOREGROUND $frame_color[$color] + sub MULTILINE_FIRST_PROMPT_GAP_FOREGROUND $frame_color[$color] + if (( right_frame )); then + sub MULTILINE_FIRST_PROMPT_SUFFIX "'%$frame_color[$color]F─╮'" + sub MULTILINE_NEWLINE_PROMPT_SUFFIX "'%$frame_color[$color]F─┤'" + sub MULTILINE_LAST_PROMPT_SUFFIX "'%$frame_color[$color]F─╯'" + sub RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL "' '" + fi + if (( left_frame )); then + sub MULTILINE_FIRST_PROMPT_PREFIX "'%$frame_color[$color]F╭─'" + sub MULTILINE_NEWLINE_PROMPT_PREFIX "'%$frame_color[$color]F├─'" + sub MULTILINE_LAST_PROMPT_PREFIX "'%$frame_color[$color]F╰─'" + sub LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL "' '" + fi + fi + + if [[ $style == (classic|rainbow) ]]; then + if (( num_lines == 2 && ! left_frame )); then + uncomment prompt_char + else + uncomment vi_mode + fi + fi + + if [[ $POWERLEVEL9K_MODE == ascii ]]; then + sub 'STATUS_OK_VISUAL_IDENTIFIER_EXPANSION' "'ok'" + sub 'STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION' "'ok'" + sub 'STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION' "'err'" + sub 'STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION' "" + sub 'STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION' "'err'" + sub 'BATTERY_STAGES' "('battery')" + sub 'PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION' "'>'" + sub 'PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION' "'<'" + sub 'PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION' "'V'" + sub 'PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION' "'^'" + rep "-i '⭐'" "-i '*'" + rep '…' '..' + rep '⇣' '<' + rep '⇡' '>' + rep '⇠' '<-' + rep '⇢' '->' + rep '─' '-' + fi + fi + + if (( $+pure_use_rprompt )); then + local segment + for segment in command_execution_time virtualenv context; do + rep " $segment" " tmp_$segment" + uncomment $segment + rep " tmp_$segment " " # $segment" + done + fi + + if [[ -n $time ]]; then + uncomment time + if [[ $time == $time_12h ]]; then + sub TIME_FORMAT "'%D{%I:%M:%S %p}'" + fi + fi + + if (( num_lines == 1 )); then + local -a tmp + local line + for line in "$lines[@]"; do + [[ $line == (' newline'*|*'===[ Line #'*) ]] || tmp+=$line + done + lines=("$tmp[@]") + fi + + (( empty_line )) && sub PROMPT_ADD_NEWLINE true || sub PROMPT_ADD_NEWLINE false + + sub INSTANT_PROMPT $instant_prompt + (( transient_prompt )) && sub TRANSIENT_PROMPT always + + local header=${(%):-"# Generated by Powerlevel10k configuration wizard on %D{%Y-%m-%d at %H:%M %Z}."}$'\n' + header+="# Based on romkatv/powerlevel10k/config/p10k-${style//_/-}.zsh" + if [[ $commands[sum] == ('/bin'|'/usr/bin'|'/usr/local/bin')'/sum' ]]; then + local -a sum + if sum=($(sum <<<${base//$'\r\n'/$'\n'} 2>/dev/null)) && (( $#sum == 2 )); then + header+=", checksum $sum[1]" + fi + fi + header+=$'.\n' + local line="# Wizard options: $options[1]" + local opt + for opt in $options[2,-1]; do + if (( $#line + $#opt > 85 )); then + header+=$line + header+=$',\n' + line="# $opt" + else + line+=", $opt" + fi + done + header+=$line + header+=$'.\n# Type `p10k configure` to generate another config.\n#' + + command mkdir -p -- ${__p9k_cfg_path:h} || return + + if [[ -e $__p9k_cfg_path ]]; then + unlink $__p9k_cfg_path || return + fi + print -lr -- "$header" "$lines[@]" >$__p9k_cfg_path +} + +function change_zshrc() { + (( write_zshrc )) || return 0 + + local tmp=$__p9k_zshrc.${(%):-%n}.tmp.$$ + [[ ! -e $__p9k_zshrc ]] || cp -p $__p9k_zshrc $tmp || return + + { + local -i writable=1 + if [[ -e $tmp && ! -w $tmp ]]; then + chmod u+w -- $tmp || return + writable=0 + fi + + print -n >$tmp || return + + if (( !zshrc_has_instant_prompt )); then + >>$tmp print -r -- "# Enable Powerlevel10k instant prompt. Should stay close to the top of ${(%)__p9k_zshrc_u}. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +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" || return + fi + if [[ -n $zshrc_content ]]; then + (( zshrc_has_instant_prompt )) || print >>$tmp || return + >>$tmp print -r -- $zshrc_content || return + fi + if (( !zshrc_has_cfg )); then + >>$tmp print -r -- " +# To customize prompt, run \`p10k configure\` or edit ${(%)__p9k_cfg_path_u}. +[[ ! -f ${(%)__p9k_cfg_path_u} ]] || source ${(%)__p9k_cfg_path_u}" || return + fi + (( writable )) || chmod u-w -- $tmp || return + command mv -f -- $tmp $__p9k_zshrc || return + } always { + zf_rm -f -- $tmp + } + + if [[ -n $zshrc_backup_u ]]; then + print -rP "" + flowing +c See "%B${__p9k_zshrc_u//\\/\\\\}%b" changes: + print -rP " + %2Fdiff%f %B$zshrc_backup_u%b %B$__p9k_zshrc_u%b" + fi + return 0 +} + +function check_zshrc_integration() { + typeset -g zshrc_content= + typeset -gi zshrc_has_cfg=0 zshrc_has_instant_prompt=0 + [[ -e $__p9k_zshrc ]] || return 0 + zshrc_content="$(<$__p9k_zshrc)" || return + local lines=(${(f)zshrc_content}) + local f0=$__p9k_cfg_path_o + local f1=${(q)f0} + local f2=${(q-)f0} + local f3=${(qq)f0} + local f4=${(qqq)f0} + local g1=${${(q)__p9k_cfg_path_o}/#(#b)${(q)HOME}\//'~/'} + local h0='${ZDOTDIR:-~}/.p10k.zsh' + local h1='${ZDOTDIR:-$HOME}/.p10k.zsh' + local h2='"${ZDOTDIR:-$HOME}/.p10k.zsh"' + local h3='"${ZDOTDIR:-$HOME}"/.p10k.zsh' + local h4='${ZDOTDIR}/.p10k.zsh' + local h5='"${ZDOTDIR}/.p10k.zsh"' + local h6='"${ZDOTDIR}"/.p10k.zsh' + local h7='$ZDOTDIR/.p10k.zsh' + local h8='"$ZDOTDIR/.p10k.zsh"' + local h9='"$ZDOTDIR"/.p10k.zsh' + local h10='$POWERLEVEL9K_CONFIG_FILE' + local h11='"$POWERLEVEL9K_CONFIG_FILE"' + if [[ -n ${(@M)lines:#(#b)[^#]#([^[:IDENT:]]|)source[[:space:]]##($f1|$f2|$f3|$f4|$g1|$h0|$h1|$h2|$h3|$h4|$h5|$h6|$h7|$h8|$h9|$h10|$h11)(|[[:space:]]*|'#'*)} ]]; then + zshrc_has_cfg=1 + fi + local pre='${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh' + if [[ -n ${(@M)lines:#(#b)[^#]#([^[:IDENT:]]|)source[[:space:]]##($pre|\"$pre\")(|[[:space:]]*|'#'*)} ]]; then + zshrc_has_instant_prompt=1 + fi + return 0 +} + +() { + (( force )) && return + _p9k_can_configure -q || return 0 + local zshrc_content zshrc_has_cfg zshrc_has_instant_prompt + check_zshrc_integration 2>/dev/null || return 0 + (( zshrc_has_cfg )) || return 0 + [[ -s $__p9k_cfg_path ]] || return 0 + print -P "" + flowing \ + Powerlevel10k configuration file "($__p9k_cfg_path_u)" was not sourced. This \ + might have been caused by errors in zsh startup files, most likely in \ + $__p9k_zshrc_u. See above for any indication of such errors and fix them. If \ + there are no errors, try running Powerlevel10k configuration wizard: + print -P '' + print -P ' %2Fp10k%f %Bconfigure%b' + print -P '' + flowing \ + If you do nothing, you will see this message again when you start zsh. You can \ + suppress it by defining %BPOWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true%b in \ + $__p9k_zshrc_u. + print -P '' + return 1 +} || return + +if (( $+terminfo[smcup] && $+terminfo[rmcup] )) && echoti smcup 2>/dev/null; then + function restore_screen() { + echoti rmcup 2>/dev/null + function restore_screen() {} + } +else + function restore_screen() {} +fi + +{ # always + +if (( force )); then + _p9k_can_configure || return +else + _p9k_can_configure -q || return +fi + +zmodload zsh/terminfo zsh/datetime || return + +if [[ $ZSH_VERSION == (5.7.<1->*|5.<8->*|<6->.*) && $COLORTERM == (24bit|truecolor) ]]; then + local -ir has_truecolor=1 +else + local -ir has_truecolor=0 +fi + +stty -echo 2>/dev/null + +while true; do + local instant_prompt=verbose zshrc_content= zshrc_backup= zshrc_backup_u= + local -i zshrc_has_cfg=0 zshrc_has_instant_prompt=0 write_zshrc=0 + local POWERLEVEL9K_MODE= POWERLEVEL9K_ICON_PADDING=moderate style= config_backup= config_backup_u= + local gap_char=' ' prompt_char='❯' down_triangle='\uE0BC' up_triangle='\uE0BA' slanted_bar='\u2571' + local left_subsep= right_subsep= left_tail= right_tail= left_head= right_head= time= + local -i num_lines=2 empty_line=0 color=2 left_frame=1 right_frame=1 transient_prompt=0 + local -i cap_diamond=0 cap_python=0 cap_arrow=0 cap_lock=0 cap_quotes=0 + local -a extra_icons=('' '' '') + local -a frame_color=(244 242 240 238) + local -a color_name=(Lightest Light Dark Darkest) + local -a prefixes=('' '') + local -a options=() + if (( has_truecolor )); then + local -A pure_color=(${(kv)pure_snazzy}) + else + local -A pure_color=(${(kv)pure_original}) + fi + + unset pure_use_rprompt + + if [[ $TERM != (dumb|linux) && $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then + ask_font || continue + ask_diamond || continue + if [[ $AWESOME_GLYPHS_LOADED == 1 ]]; then + POWERLEVEL9K_MODE=awesome-mapped-fontconfig + else + ask_lock '\uF023' || continue + if (( ! cap_lock )); then + ask_lock '\uE138' "Let's try another one." || continue + if (( cap_lock )); then + if (( cap_diamond )); then + POWERLEVEL9K_MODE=awesome-patched + ask_python || continue + else + POWERLEVEL9K_MODE=flat + fi + else + if (( cap_diamond )); then + POWERLEVEL9K_MODE=powerline + else + ask_quotes || continue + (( cap_quotes )) && POWERLEVEL9K_MODE=compatible || POWERLEVEL9K_MODE=ascii + fi + fi + elif (( ! cap_diamond )); then + POWERLEVEL9K_MODE=awesome-fontconfig + else + ask_arrow '\uFC35' || continue + if (( cap_arrow )); then + POWERLEVEL9K_MODE=nerdfont-complete + else + ask_arrow '\UF0737' "Let's try another one." || continue + if (( cap_arrow )); then + POWERLEVEL9K_MODE=nerdfont-v3 + else + POWERLEVEL9K_MODE=awesome-fontconfig + ask_python || continue + fi + fi + fi + fi + else + POWERLEVEL9K_MODE=ascii + fi + + if [[ $POWERLEVEL9K_MODE == powerline ]]; then + options+=powerline + elif (( cap_diamond )); then + options+="$POWERLEVEL9K_MODE + powerline" + else + options+="$POWERLEVEL9K_MODE" + fi + (( cap_python )) && options[-1]+=' + python' + if (( cap_diamond )); then + left_sep=$right_triangle + right_sep=$left_triangle + left_subsep=$right_angle + right_subsep=$left_angle + left_head=$right_triangle + right_head=$left_triangle + else + left_sep= + right_sep= + left_head= + right_head= + if [[ $POWERLEVEL9K_MODE == ascii ]]; then + left_subsep='|' + right_subsep='|' + prompt_char='>' + left_frame=0 + right_frame=0 + else + left_subsep=$vertical_bar + right_subsep=$vertical_bar + fi + fi + + _p9k_init_icons + ask_icon_padding || continue + _p9k_init_icons + + ask_style || continue + ask_charset || continue + ask_color_scheme || continue + ask_color || continue + ask_use_rprompt || continue + ask_time || continue + ask_separators || continue + ask_heads || continue + ask_tails || continue + ask_num_lines || continue + ask_gap_char || continue + ask_frame || continue + ask_ornaments_color || continue + ask_empty_line || continue + ask_extra_icons || continue + ask_prefixes || continue + ask_transient_prompt || continue + ask_instant_prompt || continue + ask_config_overwrite || continue + ask_zshrc_edit || continue + break +done + +restore_screen + +if (( !in_z4h_wizard )); then + print + + flowing +c New config: "%U${__p9k_cfg_path_u//\\/\\\\}%u." + if [[ -n $config_backup ]]; then + flowing +c Backup of the old config: "%U${config_backup_u//\\/\\\\}%u." + fi + if [[ -n $zshrc_backup ]]; then + flowing +c Backup of "%U${__p9k_zshrc_u//\\/\\\\}%u:" "%U${zshrc_backup_u//\\/\\\\}%u." + fi +fi + +generate_config || return +change_zshrc || return + +if (( !in_z4h_wizard )); then + print -rP "" + flowing +c File feature requests and bug reports at "$(href https://github.com/romkatv/powerlevel10k/issues)" + print -rP "" +fi + +success=1 + +} always { + (( success )) || quit + consume_input + stty echo 2>/dev/null + show_cursor + restore_screen +} diff --git a/airootfs/etc/skel/powerlevel10k/internal/worker.zsh b/airootfs/etc/skel/powerlevel10k/internal/worker.zsh new file mode 100644 index 0000000..269e8aa --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/internal/worker.zsh @@ -0,0 +1,219 @@ +# invoked in worker: _p9k_worker_main +function _p9k_worker_main() { + mkfifo -- $_p9k__worker_file_prefix.fifo || return + echo -nE - s$_p9k_worker_pgid$'\x1e' || return + exec <$_p9k__worker_file_prefix.fifo || return + zf_rm -- $_p9k__worker_file_prefix.fifo || return + + local -i reset + local req fd + local -a ready + local _p9k_worker_request_id + local -A _p9k_worker_fds # fd => id$'\x1f'callback + local -A _p9k_worker_inflight # id => inflight count + + function _p9k_worker_reply() { + print -nr -- e${(pj:\n:)@}$'\x1e' || kill -- -$_p9k_worker_pgid + } + + # usage: _p9k_worker_async + function _p9k_worker_async() { + local fd async=$1 + sysopen -r -o cloexec -u fd <(() { eval $async; } && print -n '\x1e') || return + (( ++_p9k_worker_inflight[$_p9k_worker_request_id] )) + _p9k_worker_fds[$fd]=$_p9k_worker_request_id$'\x1f'$2 + } + + trap '' PIPE + + { + while zselect -a ready 0 ${(k)_p9k_worker_fds}; do + [[ $ready[1] == -r ]] || return + for fd in ${ready:1}; do + if [[ $fd == 0 ]]; then + local buf= + [[ -t 0 ]] # https://www.zsh.org/mla/workers/2020/msg00207.html + if sysread -t 0 'buf[$#buf+1]'; then + while [[ $buf != *$'\x1e' ]]; do + sysread 'buf[$#buf+1]' || return + done + else + (( $? == 4 )) || return + fi + for req in ${(ps:\x1e:)buf}; do + _p9k_worker_request_id=${req%%$'\x1f'*} + () { eval $req[$#_p9k_worker_request_id+2,-1] } + (( $+_p9k_worker_inflight[$_p9k_worker_request_id] )) && continue + print -rn -- d$_p9k_worker_request_id$'\x1e' || return + done + else + local REPLY= + while true; do + if sysread -i $fd 'REPLY[$#REPLY+1]'; then + [[ $REPLY == *$'\x1e' ]] || continue + else + (( $? == 5 )) || return + break + fi + done + local cb=$_p9k_worker_fds[$fd] + _p9k_worker_request_id=${cb%%$'\x1f'*} + unset "_p9k_worker_fds[$fd]" + exec {fd}>&- + if [[ $REPLY == *$'\x1e' ]]; then + REPLY[-1]="" + () { eval $cb[$#_p9k_worker_request_id+2,-1] } + fi + if (( --_p9k_worker_inflight[$_p9k_worker_request_id] == 0 )); then + unset "_p9k_worker_inflight[$_p9k_worker_request_id]" + print -rn -- d$_p9k_worker_request_id$'\x1e' || return + fi + fi + done + done + } always { + kill -- -$_p9k_worker_pgid + } +} + +# invoked in master: _p9k_worker_invoke +function _p9k_worker_invoke() { + [[ -n $_p9k__worker_resp_fd ]] || return + local req=$1$'\x1f'$2$'\x1e' + if [[ -n $_p9k__worker_req_fd && $+_p9k__worker_request_map[$1] == 0 ]]; then + _p9k__worker_request_map[$1]= + print -rnu $_p9k__worker_req_fd -- $req + else + _p9k__worker_request_map[$1]=$req + fi +} + +function _p9k_worker_cleanup() { + # __p9k_intro bugs out here in some cases for some reason. + emulate -L zsh + [[ $_p9k__worker_shell_pid == $sysparams[pid] ]] && _p9k_worker_stop + return 0 +} + +function _p9k_worker_stop() { + # See comments in _p9k_worker_cleanup. + emulate -L zsh + add-zsh-hook -D zshexit _p9k_worker_cleanup + [[ -n $_p9k__worker_resp_fd ]] && zle -F $_p9k__worker_resp_fd + [[ -n $_p9k__worker_resp_fd ]] && exec {_p9k__worker_resp_fd}>&- + [[ -n $_p9k__worker_req_fd ]] && exec {_p9k__worker_req_fd}>&- + [[ -n $_p9k__worker_pid ]] && kill -- -$_p9k__worker_pid 2>/dev/null + [[ -n $_p9k__worker_file_prefix ]] && zf_rm -f -- $_p9k__worker_file_prefix.fifo + _p9k__worker_pid= + _p9k__worker_req_fd= + _p9k__worker_resp_fd= + _p9k__worker_shell_pid= + _p9k__worker_request_map=() + return 0 +} + +function _p9k_worker_receive() { + eval "$__p9k_intro" + + [[ -z $_p9k__worker_resp_fd ]] && return + + { + (( $# <= 1 )) || return + + local buf resp + + [[ -t $_p9k__worker_resp_fd ]] # https://www.zsh.org/mla/workers/2020/msg00207.html + if sysread -i $_p9k__worker_resp_fd -t 0 'buf[$#buf+1]'; then + while [[ $buf == *[^$'\x05\x1e']$'\x05'# ]]; do + sysread -i $_p9k__worker_resp_fd 'buf[$#buf+1]' || return + done + else + (( $? == 4 )) || return + fi + + local -i reset max_reset + for resp in ${(ps:\x1e:)${buf//$'\x05'}}; do + local arg=$resp[2,-1] + case $resp[1] in + d) + local req=$_p9k__worker_request_map[$arg] + if [[ -n $req ]]; then + _p9k__worker_request_map[$arg]= + print -rnu $_p9k__worker_req_fd -- $req || return + else + unset "_p9k__worker_request_map[$arg]" + fi + ;; + e) + () { eval $arg } + (( reset > max_reset )) && max_reset=reset + ;; + s) + [[ -z $_p9k__worker_req_fd ]] || return + [[ $arg == <1-> ]] || return + _p9k__worker_pid=$arg + sysopen -w -o cloexec -u _p9k__worker_req_fd $_p9k__worker_file_prefix.fifo || return + local req= + for req in $_p9k__worker_request_map; do + print -rnu $_p9k__worker_req_fd -- $req || return + done + _p9k__worker_request_map=({${(k)^_p9k__worker_request_map},''}) + ;; + *) + return 1 + ;; + esac + done + + if (( max_reset == 2 )); then + _p9k__refresh_reason=worker + _p9k_set_prompt + _p9k__refresh_reason='' + fi + (( max_reset )) && _p9k_reset_prompt + return 0 + } always { + (( $? )) && _p9k_worker_stop + } +} + +function _p9k_worker_start() { + setopt monitor || return + { + [[ -n $_p9k__worker_resp_fd ]] && return + + if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then + local tmpdir=$TMPDIR + else + local tmpdir=/tmp + fi + _p9k__worker_file_prefix=$tmpdir/p10k.worker.$EUID.$sysparams[pid].$EPOCHSECONDS + + sysopen -r -o cloexec -u _p9k__worker_resp_fd <( + exec 0$_p9k__worker_file_prefix.log + setopt xtrace + else + exec 2>/dev/null + fi + builtin cd -q / || return + zmodload zsh/zselect || return + ! { zselect -t0 || (( $? != 1 )) } || return + local _p9k_worker_pgid=$sysparams[pid] + _p9k_worker_main & + { + trap '' PIPE + while syswrite $'\x05'; do zselect -t 1000; done + zf_rm -f $_p9k__worker_file_prefix.fifo + kill -- -$_p9k_worker_pgid + } & + exec =true) || return + _p9k__worker_pid=$sysparams[procsubstpid] + zle -F $_p9k__worker_resp_fd _p9k_worker_receive + _p9k__worker_shell_pid=$sysparams[pid] + add-zsh-hook zshexit _p9k_worker_cleanup + } always { + (( $? )) && _p9k_worker_stop + } +} diff --git a/airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme b/airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme new file mode 100644 index 0000000..92079d4 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme @@ -0,0 +1,83 @@ +# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 +################################################################ +# Powerlevel10k Theme +# https://github.com/romkatv/powerlevel10k +# +# Forked from Powerlevel9k Theme +# https://github.com/bhilburn/powerlevel9k +# +# Which in turn was forked from Agnoster Theme +# https://github.com/robbyrussell/oh-my-zsh/blob/74177c5320b2a1b2f8c4c695c05984b57fd7c6ea/themes/agnoster.zsh-theme +################################################################ + +# Temporarily change options. +'builtin' 'local' '-a' '__p9k_src_opts' +[[ ! -o 'aliases' ]] || __p9k_src_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || __p9k_src_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || __p9k_src_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +(( $+__p9k_root_dir )) || typeset -gr __p9k_root_dir=${POWERLEVEL9K_INSTALLATION_DIR:-${${(%):-%x}:A:h}} +(( $+__p9k_intro )) || { + # Leading spaces before `local` are important. Otherwise Antigen will remove `local` (!!!). + # __p9k_trapint is to work around bugs in zsh: https://www.zsh.org/mla/workers/2020/msg00612.html. + # Likewise for `trap ":"` instead of the plain `trap ""`. + typeset -gr __p9k_intro_base='emulate -L zsh -o no_hist_expand -o extended_glob -o no_prompt_bang -o prompt_percent -o no_prompt_subst -o no_aliases -o no_bg_nice -o typeset_silent -o no_rematch_pcre + (( $+__p9k_trapped )) || { local -i __p9k_trapped; trap : INT; trap "trap ${(q)__p9k_trapint:--} INT" EXIT } + local -a match mbegin mend + local -i MBEGIN MEND OPTIND + local MATCH OPTARG IFS=$'\'' \t\n\0'\' + typeset -gr __p9k_intro_locale='[[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]] && _p9k_init_locale && { [[ -n $LC_ALL ]] && local LC_ALL=$__p9k_locale || local LC_CTYPE=$__p9k_locale }' + typeset -gr __p9k_intro_no_locale="${${__p9k_intro_base/ match / match reply }/ MATCH / MATCH REPLY }" + typeset -gr __p9k_intro_no_reply="$__p9k_intro_base; $__p9k_intro_locale" + typeset -gr __p9k_intro="$__p9k_intro_no_locale; $__p9k_intro_locale" +} + +zmodload zsh/langinfo + +function _p9k_init_locale() { + if (( ! $+__p9k_locale )); then + typeset -g __p9k_locale= + (( $+commands[locale] )) || return + local -a loc + loc=(${(@M)$(locale -a 2>/dev/null):#*.(utf|UTF)(-|)8}) || return + (( $#loc )) || return + typeset -g __p9k_locale=${loc[(r)(#i)C.UTF(-|)8]:-${loc[(r)(#i)en_US.UTF(-|)8]:-$loc[1]}} + fi + [[ -n $__p9k_locale ]] +} + +() { + eval "$__p9k_intro" + if (( $+__p9k_sourced )); then + (( $+functions[_p9k_setup] )) && _p9k_setup + return 0 + fi + typeset -gr __p9k_dump_file=${XDG_CACHE_HOME:-~/.cache}/p10k-dump-${(%):-%n}.zsh + if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file ]] && (( ! $+functions[_p9k_preinit] )) && source $__p9k_dump_file 2>/dev/null && (( $+functions[_p9k_preinit] )); then + _p9k_preinit + fi + typeset -gr __p9k_sourced=13 + if [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]]; then + if [[ -w $__p9k_root_dir && -w $__p9k_root_dir/internal && -w $__p9k_root_dir/gitstatus ]]; then + local f + for f in $__p9k_root_dir/{powerlevel9k.zsh-theme,powerlevel10k.zsh-theme,internal/p10k.zsh,internal/icons.zsh,internal/configure.zsh,internal/worker.zsh,internal/parser.zsh,gitstatus/gitstatus.plugin.zsh,gitstatus/install}; do + [[ $f.zwc -nt $f ]] && continue + zmodload -F zsh/files b:zf_mv b:zf_rm + local tmp=$f.tmp.$$.zwc + { + # `zf_mv -f src dst` fails on NTFS if `dst` is not writable, hence `zf_rm`. + zf_rm -f -- $f.zwc && zcompile -R -- $tmp $f && zf_mv -f -- $tmp $f.zwc + } always { + (( $? )) && zf_rm -f -- $tmp + } + done + fi + fi + builtin source $__p9k_root_dir/internal/p10k.zsh || true +} + +(( $+__p9k_instant_prompt_active )) && unsetopt prompt_cr prompt_sp || setopt prompt_cr prompt_sp + +(( ${#__p9k_src_opts} )) && setopt ${__p9k_src_opts[@]} +'builtin' 'unset' '__p9k_src_opts' diff --git a/airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme b/airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme new file mode 100644 index 0000000..328cd83 --- /dev/null +++ b/airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme @@ -0,0 +1 @@ +'builtin' 'source' "${POWERLEVEL9K_INSTALLATION_DIR:-${${(%):-%x}:A:h}}/powerlevel10k.zsh-theme" diff --git a/airootfs/etc/skel/.bashrc b/airootfs/root/.zshrc similarity index 54% rename from airootfs/etc/skel/.bashrc rename to airootfs/root/.zshrc index f9619bd..2f38d0e 100644 --- a/airootfs/etc/skel/.bashrc +++ b/airootfs/root/.zshrc @@ -1,6 +1,15 @@ -# -# ~/.bashrc -# +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. + +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 + +source ~/powerlevel10k/powerlevel10k.zsh-theme + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh # If not running interactively, don't do anything [[ $- != *i* ]] && return diff --git a/airootfs/usr/share/backgrounds/xfce/wallpaper6.png b/airootfs/usr/share/backgrounds/xfce/wallpaper6.png deleted file mode 100644 index fc51cbe4cace967c019d7507b09a45608d68fdda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643745 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

Ehdg*uzsU>S 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

Cdo4h znGk5Z==$K2xdjCU5rlg-?h0tb<~wHZaL%il@`esy?_G|hBi@Sgn;U=dd%nuSWn#Kv zv#B((1>&b}Cs^q2GhXJG)tF@x@@Tw*#f6S8mXwhirV{0hm51L0!Ve>)_f`Y`_Xma# zQ;_R`!xp<@-GG;d4oKL-1UA*w8;+ziV&GNT!JcYh>=a#P^puqR5DO8A`6g`9{ zW-HyWWy1d9N!19aY5He0n4qc9+OdZbVakf4;D2+xLD|0?w)v?n;BW(ANCZQ;(x*f)N@{VR)P8AH&xvxdX6@R63sx zXacNL&8xrrE_J+Q2c4_~7T~7&J|%7VcW2;Nmu>7xq~!4(TRveB|5L zzsF{vBMt6>q7n)juJt^Dui}XXN-L zDyZkzT^B?^3>^++$#`AJ+YR>8QJ9<3b3*VVaS0K`28l z+BJ?+QE)^o=N$ivXza85nqY_1nrJL%e$1nw9m@WWONn3h9cuE(>1^YV^~3u7M~Jp& zY{pr%SI0`UR6ypr#;@D6z~33=(bViSxx$U8-1nBc=WKYP@^wBuZ)x(CAqKUKt5hI2 zh7VG)Gvn

OR*$R+RPi9n?LbLBUaCZGNpJ@wP zfhTta(t16dCs<`axt}{6dV6(|xYGz>)~FLj*q0OVRJIV{Z>{e+$OqmCW-HwVNezPF>?HHW>kkzA0^-nE|J-&5MChal^{tWj=) zxnvr>ti)NH0kIw8#1#LBjQMS(3*3ZuOG?&eWfBYNyLRIMGAw&JG|uPQD1d%35w;R~ zc)<#R#6wX>UzRzhF;#);e)5J&PGMMICgGxX$%W`+mu4?wqLEKb|1GVtEz9gHwnY3} z&>|U|kW*JReK6I{9dA-$f|6!>T1xxZvJYh|lyM4K`qQ!(MQEoQ&3-`-D(1 zjRIaCcx=che?#cH&od?hVHQM4nP+bk*Nom%v2>~0ecn^SzW*7>{mkkkN+M5U)OKn| z$mgt_LcuR;2+Hc@~P3f7%pgQQ3nS@W_=uenuLB6wT3;;(;Z^sJ@sLnDeePrRC51+`Ik!yD&@ zXrCaw(vuRv zG;AjX!u{EL5-uGb92XGLj^OI|5w2c5Uy8S<3_@_IQH6jaa8L;vx3ll$;2;8m{}fXQ z_12%imJb9rW(Fs(&cG+Prl%M?qN(`qCBoA7i1Sla>tNh0zJsyUi(S#ZK$~O82NK-e zBeKZeh&r(30{xJw*FwsNKhxRAx9I-2>1%hrqz@Ap^K>IpI$=6+cGuqHc4rN&|x+omk7N3;uP=$S!5+k$YFQ%Mrs>mj}&Q!(>UJyxsA3 z!r5Wb+61upO9CVA=_SlXv^=m<*SbJ*38nL4XShEX{j;yVlj3yI5p+%wSt!RFxUH8n^6rb3VDA?k$ypA1DMheeudLdF#RV08FxvRW-2j2-%$5PyE7vuN^(=FgCMAN)|# z`{FtfP>p#Ck!4iHRM8*-z0rQ3lD1K^xbr|a#xb0%26c!8AgfBIa|ZYO3LYMWAU?kG z>jO_-F1*1J_(v(bsJ{3L!d(L)uCM@{5CDmg4qjaG9bWMx9X;*KI5bGNLuY}h-L`wk?&stF`{ z*P32w!%OSpUffuY$^F}QQWrLSVWi6RJ`O)i8bMM1eue*vYM1^$QH7Mo8}3S;aKJ-n zG$h;GNSaU6*=pPYWCkZ=+_8ht(A>37Cf#nsx6~qbgp&mVnSHaBY{9plArN@(t3M&1 zXt^W)lhFxjoM5`Vo{f^_?c0<3r5Em{xjvr}&>a7za6ge&vIo+DF^33cZji?I<`iew zGO?{7Y|{HhU!IpUPu`d;a66xM{xqH(`Y_B|cm!uAyHSzb1$oi9J-}tRuM+0z3SLYruf1k`u&1)hj_ zELM5b%5GmHKAa4M&W0OBh;#ozy2nmv`O%j@28XLBXYProV|YRo!;iWn7(7`NI2x$SZ1Iauo5E%AGD=LCAMIzNi=NWG4P!iSdIOlX@qHEx{p@7Sixx_huxq@%M z!Q{MFHdxtmF>peGuk&b^o^Wt&!i%S2P|p)ryzrRh0~@gb-G1M9ai4Gj|Lx$*&ypg` zkucX^^jNK*&U6Q`ED#CPub=~gO++4Y92UM3{6(|?eqUJEO~)q>bogt&W50(`nY%r3KvS;ShJ`Iy!>1s2Gs?x?S}F%q zEPnaFMSA0<^mGMAC0w5w=OdPKCQIIzQ{ddb0=?rK)ltBYs_bQGP3f!Ha$|t;FnyPf5+y47uxoC`4{`L8gtYO#C{$(!YeP;r2^ci3)+C{HGhUKPvldv%Q}A2I zvnVDz>xhf=gGF!k&Yn#?CY-hT-gTm7Ph|Wr3ZH|Q)rbn)5@YfrE32VnThr}t_zWAq zCm8}yq+&y7Fsfw=pa*pk6|Ifh%|&f@TWqbR_5VjOvfdHCd8|KAgc`0E;-D%)3o{@V zg!_H#E9q>V)QyUbSPBJ?Xj#K34TLxI5huDL8)iagf`LE^4$Ny7# zLXTO{F-%H~sp@qD`v2cx(%~H~=ny%tC=ZbbrAe`pWOL+|D>U9X`0CvvM%$;7DANjP z_YmTv1eC`xQ2baT^r1UNheq;)(C;;)iN1Qwi~(+Lw`C!=&Ur%ei?z2M4i)NCv19Z- zp2zuGCS8Qb&fmz4(1d){5)?~9BuZ?co9wCqD@=gQE#_Ry32}8neg@JdS|YWAWOhVF z>!);tSQEk_ipleTX{Dg9GOT&ygcQwzJ^m(E&53wsna?iu`ty7e5m-h;a|msN_BKjq z*y*f-*j?Ccb;JRFKb#N^&OflDfjb`)M~GN7w|f~BINpgAL$*~_iO+G-&KANlC_V5BuyV_I^%LTNH+|`|(~7f-ME$Tr53U|FxlULxVZ=s!V@a{P$}> zTkyYo>0f#x=2PeH8v%DXt2r4xlM z6@x>Ive2>0PK8WMt*u*EuFGk{(c5Gzb(gOYs%>{;0=cJZ(})MS8f0}NurB=$h0WM{ zjF~Bqc-9>?Jv|6^pr))#$hDG~9}f6GfLa0GLL6ZaU2LiOI4*7gxKVa#=Y>H~;m*b% zZz``d_tx(2cG<9NNQ`jkP5{B z(Sij3@E^(f|5gcHo3%WphXSrf&Bg_49<2HPYT|m zp}t@snpWOz{JC@hYfS|(BE5O+X9*Q6TdgEbJxGfBsEzNhixF-hXWIj3ASU=#gB1N_ zLHaXT)*ue;uH2+29Yp!?&e)2bP*O278ZXSb|IwBtg_-xXoDI(`^1qK_NQq#ws-&ii z4v*G!UiqrO{4do~uRoQ6jdwEjU1EqFy=PptEgwP7AAaj@*MUNWH)$2rKrE=CPdn2t z+$-bgo%Ee(xJ(pT#Dd^&GlZt{pxo_z_rt$q#Q6u!mVAPR3^Vo+P_@~Fgt+11yuLdA zqsIOvoJ#6-lhhu&>YIg;{uwxd3nSccNj9HZp>Gkl3lpyHIJ1e+iJtI-bWd>j<}hbAiUK7NiQGt|nyx>KW~se^kztXj%I~gBF?o z2%C4y-!AJ*o7lwL0b12cJ*~x;U`B-|VP_~7w7bMwCoPL8)JmIu6kPi$2j+g>sLRw# zGK=07KAeq#{zVG?74Pf2m51GjYf*w~3Jw{F)aluoOQS&o!rUnF<*LB2L*?zNbTCy< zKLPZmMJE7ybH{v_;&zul)5k7>@R(*=GU{H>JAwfa&`M#}J-R;V7P|?i`QbqwTZ|3- zdREMGz+lS$;AUEMhx%ZLGAVm}UeU&nVtvamO&yD*d01f)K)uEH;OQDql$TsNOQB!y!KdbVuE2h>+tR+8t zT`rwV>&R2m6N7tsg+!<|r~eGFLfEd!oF)Q|tFn3Xukhk&G0 zCh-ELZpxG+E2&+z6d*v$$sQ?h!#C$V0%j{vO%v?AO?4#39K0t>LUahSi)nu5kvDg+X8U8V{9! z8s$=()cOH5Ne~EQj4{!9(~i>s>k&Y_aAl>o@XsjqXX{aXHBO;tAyZFgsv*?=g-lpP z5UgW)vog%9)YT~B9mTQnOb>d-H)NsmhB>OSe55m`Yq)#MGVo}@)nyIx@x$Fo9^K07 z=1u)4Fc6c5N>C}-1$|a7Up=!M#n7E~W@nu41H@0kv{pReqSB$vSDd2GMDpJ<)#6AK zgnG4s#?HCbEzTUm&dAT|PA8zNU0AU$1b!Ib|CYVEZ+ZB8v+{5p?TzkXL_TUnI}jI zOV=nb^)EtFNe1wLxNE&Kws`cByPr&LJ^r%nzsWBxfH}NFA;+}T<)xkT*i^7Rye<$F z9AbMkbD*B$fj~HG*v;T88S<^zeckYL&s^V|yVJJ&Jk$mlY^81h8_}q&N&pxkVn{F6=Ebvp&teA3=9-XGdjsFgcxQ>b{;iFWXVo zM(oo;#EndG(!(h;eP znBloS*9{}r8=s4grvdDBDcJO}*;>AIN?%f}{eAjvqSTGfj{&U(wH=KE^^w1irg_lG zpBFNoR%-wFCydt{?w~*P8)dP@SmA^VMW4di-Lc8zTHNz>7|(oW$S_UM%!@C`Ajh359R4j(Frw(}w{dPM`nSXQ z?r+}>=0knk)rjcrDi(|K($@2^4Va>?Qp)lE9hZ|Xdr5;A7jCQCt&YmtR1y)3(p`!i z8lih<`mx-#zG9Az&wZ!$f9$;qSsLwRTnRB5kf;RE3vgC9CTA?$mVy`LJ>j6T#~>su z%)(P+0fHUb&S>6_=wxGdB7Jf74BX16s^`3bw~<+@1o$t2xfvINVHqR`IR-GUw=+-k zui!;Cqqso_3l~veVS8Uh-%q^qx~TT-J2`l<0#EhJPM=Kr1l;q@`VrrKB{k)UIP2ZG zg~aSkiwO)NSj`dqm4G{JIb241%}N7}0g-q}WLQZzrP~oesZ&01niSGJWWWzD83`SE z#)kxPo{(Kw-vy>+yrNM}zTFUWEUr)JN3yTX09TWhdM&EO`lb6Y=|71SO42(ZKYM;6 zFb8ndm{2~XJUt_{v3kl~A)Oaua79UCH6nPRs>ft}!4>;iB!GBcxqdwPb84s!fGaM! z^8!r5uSWo5P_-?7R5kcAWeHbm{)?EbSSZv}Pbe>wJ&zc^u>gYI(( z#@x5QOJ2Z)fH`Wo@(=663VRz*#vH&g?Rc7nozFWg$Jo-QvxW}w=D5MBpdb5p`%RZ0 zz9;4`I3$zq$>0D<$_OsDb25zU)3uU}Fl^SX!|a=XsI1)EWtUfzJ6lUEx}vaoQ8>l2 zCE0ed+gQx8WM=yu%?#6Zmv~o^EfajcTUA{9y4hU+o(aboc+adCh$OsEPcx~=LNUs@ zec{^4jL3aODw-nq(C>I#c5;>uoR0%rQWH@@N0@auYfHh^9`3 zFU_35cZD(8=)2zVk`U;rd0SAArQy)@Rnm^>35t+%P-HWF)4zpB!=v%(o#cocKF`9= z0a#GaT8_t>;JG;0-I%hM6%|zu0)?`I?IBN6Ri%ajuFx*FMaaVZqM8b0$-w04k1cG| zHhHPoVlWbb08~KiW5teCfq=70A4n05eySFXA(82;@}@l8VHuImmYQ)dLUyymo7LWf z)s}XHOI-$2j&!B3v8goXwKE(DbaH0%E6d7RbekWIqvXmEK5l z*dK%Gf<``C1$wh&U!;^n8#^ANOMpXo*Fh(j7>e(++Dr^22+W)_)oa0tVO4wpGA1-i z7Y^lUT~snp$=3CLySK`0ewLyG-w-R*uo<|eHUZzCzA1#{N}i*!|NlIRVdfEo1Pke6 zxF%`L1vef*9Ee^>!Q6dlS~lK$B@ag1Bn8IVoY6E_1V*%072i>SR(Swvg2@_T>Z%*T zm*|_x4?qE&dFX#^qgm9(fW)5?YnoM{EYs)EbYsdEU;Wh$7w&G=(9PKu)PNVP58X>W zoG#=2g+qBj*>gC;R1*vxJ|V0q2H*|47%KS)o(A)@`zD4Pvj1xakGQi5>VfRVnE=1q z6FIJ}rFd5v>qk$rR5OugzDU))H7~)EdSeWBI=l#F=9&TYA;mL<=^vR%>({Wv+!#8+`*Yku`&7pO#iK z&3l+XVl5~BcC#yeZyI*<@Xh^FF)nS^w@8%$xt%)Y7hlJp|Mdbqc`8d@^_tCEj4LD( z1LG@Bj^chw)~7p|9VElpdx8Uo*GuD_dGFu&s@fv+R9Mgjxbi5W^WxX+X8VR#43q8R z>W$nN4GwRDlGw?)2-xZ5uli#HE>7Z!BGgt%%E-zw@qi&5jxASSFgbZ(xv zEwc;WnPU=x^H_k%Le50Pd^*&0eWgUU}*>CTIgF!knj8V~6wCnx$I3JMna&hzp@pTp;E zfJnGaaeuq-z%e>j(uXI8sK(lOl`D!DJAx{Yy2!Gqv@~=Nv5HfaGAWGNA)yMu4;eMk z3;24(AjKOGF2$srl(@h_)c@$$k#9Iwu12$KvnF7EruLA_l96j zY5U#FHQ1TgS^I+1Ea?0i?gWbOa{NMh7Ysvv7H#b_GoQS)I}uDfI3OUGHi6{}JXC8v z^&^E(*IV(txm^Bm)PiIDcYlA!_hlIjYrO>C$s50oqD@_!zc{j!c(U?5LGT}FN9cb-(h{#e(T?9LOyzN zff_~23G=jK?>nIF!oq9R(w7o~fiv1C>7!oLpr)JDJ*4RWeqIV*CCQZ#5&dx93puSELC@x`=sVNf)^ z4|=w;Qz>g(Bz|fJtW!AeCL`GDXH*wt%=$e*3CJgPNsaubB`!m1NriY^>lf@zYA~_M z35T`_6T;ek@RO3VB6(j-CFKj)yFqq8kM;XGV{++uEsL`Ec2S zv+`$tiW@M?B<=j;fh-f6`c_MZDDDwcE9UZcLoJXR((R|8&p?XT{yvs4?U>bYZWN& zHjPY4SHrYGvyI=D%CPcZ|D>3#T{&jFChYEjjL#U^w;#PfniG{CXLUg5hlW?B3FY%ySki z`<59=Xp|B?*}Fz>xW~ zI#G2Uc}^_B#Ub#jswj9;OJq(2R|E$kfBasQGm&n6MpQLrNvY5{+X9+I;9!VlkARk> zaxOGMd{$xEe%r=GQ}w@o{{_WDT+1syLKNX3Yu(3}keo=DY35P4LpdZ@mDw)!VeQ}R zNYMorwh>O4%xRK(u*AIyF~R{yai6DF>}h?$O~aWMlT56=Rw#&v_4#B_=F2=>I>GJqj>pE2&D%L?$+vObd~p!4)O08SerMSwjiW*Vt0zHN%5Wt7`PWLWgV+>RUn~- zW|U|S$)axi92mlbz!!xPtl)S9%Zng zP-VzhjlK`NW&Io~aBdHXxP)hiRCg1pSdZX173aYyCAh3?Bh_Lff zWguwcFopV;-PR-hCWsR0*qKyx3%Z~e!B0+VxS;p0n76|FQxX9;e0DHS~k=rlar0j8Kwd=!~WMe#*sy$+al5j_^c6a@q+$tG)HvI}Vl3ul(z4O8ie)qX6SIRg=?%wwii)zDPtr!LG zJCAGBa7rub`G_D^$))_*3CFzA#om6c_sM~5D)qT26p}@F7QYxHc@)v-Ixy-J9d0hg z(cPGp^;Kh>NIRYTh80=$>DC{ygyOd5Hw5a>*lnyQH)SaU$|GjM0$1_R)ti16(@zRS zVZ)lQWW$PYW}q-qD(01JP44jg_e<=*jQE@ zs^A>oF(vKoqidDU6rhlrrp6Vd7o(3NiJ~;TQ!G1)mqN{t(g$g z2e7C%6zT|hx+U`f7T(R{N>*2Y^(Bx|sRzY+y{yN0@gH-E6icFy)#wvyRUtjM9L2np zB`1UT9p}1r#rAo@Ae-v+p61UqgLpu=TQfF?Hd)B%Y)4*P|^hjOSOO9c6kz4P|d zm}5Wqcv=a3wUx`RZS?*8G^+qXN|RuRqx_bu$}kst>QL^tHrjFsvd^f>yN$xkc(Mf( zW)4)+E@1TD96sw_7C3fKwn(NCBemmB>bNL*W|&rAx!7MT-xI~?vY#(k6*r$;i|rtd zAZUeMSMlIeK>yQ>v_|oQMUEeXM!{NclQuvY=|kDP-@Gc=8LBwK$N}l^ic*f+U}^e? z*Tow_zrR=9`=>FdvNq~MVNc;N6`~hVNBw1f6g`3D^sVI^X$0Bhu;;;_^~G+Y8C{U( zE9}}D8ostrDCipEDpTjr+|j4ePU}>gk@R;fruI#X+gT#`I|15d=^ip9C4U&Y)u7;Z z;HbITe(eaT_KKr3O~Z*)ZJv|_$RI%2sFh)?5Qk>$w&qi^UI5Zu)smm)9C_6C9e=99 zf~+p9zDLs_*rA3G{2ub7vtl?1d~kUp@6*5Wf)9zm#Tj_$ zTz{%2AM9(7ysOodXNU>?_T0bNe{rRDK7cDx9I z;^9Yp$TP&n0qOioo7R9YgW2_Bbr4wMJpV0L2jIUnSZ&up^OS9cI8`Gn;|h>e`Y2fnA$>YBO?lF5?RhYIjUXbzN`f#Fi*3t zGV4WUd*!^P_dic7I5^NH36gv-gY1~9ymGmef79x3(wXftVkLo8Jz-a~(>iExhVhn< zksxNqrq*dEc^VzZZaYeFQy{A0TPo^+f`ujHuW>FshzTvCt)m30^Q7aWI;PRF(178$ zsvQCdpH|4tlCY2#_k6Z8YrOfv+z7nKl~v{%tRX%*Yj`2Gmc`6#1}7%k#rYjH36&y6 zrAUm|9)fGn(<}C#r;d2G(HIyGIu>wZ8FHtLcSvbnV%s+yj*8%9_sGM?B;mZMC81p$ zWkjz1_d$b}UFx5Oe#poq`QGFpweFvLzjt>$)aH6Q9T)6f&i*Ody@j9 zaJ=y3FptxTxD`da7Y%oq=d+S|g2Z>vG|v_7_kYyM)fUNV@^~c5aiem|gAF*_2umtT zoNWt7FnH{M*g2-ktz4##SoC!b)1n|vaOFy4EeS?bM&5LeWe9z6^fJ13uu9j3M_9Vj zc7@59x2eT-qkg7tXQM9LFe-Rhkfqg!1Ld${c_68C)bJ~rT^gc*T&qxtazY}8Jhd@9 zR(gzLgMhEV+b+t#2B?q%8as7NMKoa;vthVTnwG~N^W<^WA5aCGB};y=oU0PU>vGUv zlwt`<)OFQC2`vh9kz(@au5J;2QeN}r;2>lH|DwWdmWtBv)3 zjXqPPOj=3z+~yyaPj(giNV${w6J2m|;cECzt$<&HxIfSRFg$rb(+@M?IfC0jaigbA z@Y{Rtajto=nIRShV6L}j|FB)HY7z~?7sgb@7l)gp%*q|fT-ML1*XjPP^XNz+i3}Grx=-Wm{a!7{z7yYr_ni6Kvvm zMm+ATEChBc^;DYX$g%*HqV*6mLFVYPMQbtL6CE;=;$Q>tsSK#KKg&L=SMFPf`E85X ztOekogwD(ss4&py zuukF_qLFCiLxpj|HX)&pZ>>(--TFv`B{sm9X9(HvxxYK5FzKa|m+QsQ*jPrdzc_`Aq!y_kdk#kDGLu95$xqI>iHIaR9x z>>mpsYz-EEsbVt<*>nvHV2VIyWB{5O`P1Rwo&T{o2CBpdRvWrpVP6m18pM`nPqLNW zQ>A|#?^VSmZTz4!V8?&u!o^qZ2D_|by^~7=5>1P!yEk6d^EykI`BtBC;NLwzYQ9-+ zus`2nqSF7>ijM)iqr2mU9xVoUzzK$eTgYFLt{#LJdV5r=KxI;el0|-RcoNA#dPe47 zsmy*VjL>cFcfcS8kY7}d2}-dMfYzn}ECg68F^TDB^uD4~V7;WYWWb73a)kUW*Hy#1 z>fU{;UWAJaL!OtB4YYcs3h2y}{G*%0$>mu*nX2oiwz~z(SAF|=UXET~H=?@Y%dd9|cj|C@QcZ%I`+TL+g`u)c*y6Bn_Ia%Soti# zpYFtr3A@kZb z>ew^D6gi|0h^1>V%Bo2KJ471Z0?C3z(>pSu9XiX^p=5{avtfua4jFalHV5+k<|FzPW*hdtU>N5qtxBT6bWgH%sJxwU z=cdH5)T{*J9>46uf;t!C<;fo`Key(C-HY(>aNo8SJej$X!DfFQu9wyOx`+io{-!8~i zr2;dAGwRjQhTK3^?i?!aa7#duuII{-$mMaPNRRakVrH#ss{;jkTe4~< z`&mLV*fk3vFk;7ezZMH)!a_0>_2Ji}iG`7r%;}kowzcHO$EvGm{ zCWRn0hP0>G$e0Sod5rfh%*sqCKL){TIRQ1B(@#8r$GgDI`JtntYyd?EYXFmG+0YzD zUU1?%78{ue3@Ilqp0eGYzR?WD-8IYPQ}Y)yw4hcL*9fkDK`t?yR1i`Ti2lPl>fr39 zdVB}*;t+`A-qo}oy+|Dqzx)(Vv#;{n|F%!|sP%N&;~!|>c02G2@qT^v;Uw&}#K$ml zRDpvZ+yBS&kbAY$*VOcQ=!AJNc-1mgKg~RD(roQt4KP@9 zEG*#EIM$Ue0PV1~52mdP7w>UG{zh9mV;^rx?aLECqJzkZ&crKeJGBy2C?bo^bC~;F z&FNKV+GJ)f3yk|DY3S0I#owZ4EP4Qth#4>vyH@cBKO!2dV1z>mWb^9W923n;rV~G5 z(?}vgCP9PJIn8-_non9tzaM9q4yqOj`xwFFyag;iWWX4QO!xBnxh-v}&AK9aCK7jg zy7Y-@)yKbzYUzc*^-zG*#_gY9R7@o^eSM@%-g5}-vzonFUZTUSpj8c%At6y6t)V5e zI8JVc`Y%95{hYv_xpM6u7)aD={rg83Q3Xi7D`zU)H-wqb2qrsmt>EWm0#<%C`IKsE5i{ zVrHqV>nlxeuWkD#m>7mFx~S@L*G1( z2@?Kh!Gg|lQ6J4lq{~hxak@fh@TC&3rHdy&Hx1CsOR^TLhYU`O@Tx;CGcweD_y;x! zFIBgav&>u4{|;#hUztAwPkBQU5qRP9e=~*w zqfDblOo#mQqTYEa-_e*o$RV|rm{uj>{{>wciO-RU%SX)*?BYQ>&=UR^r z9AwAmlwL#NO|817>kPH7wpCzt>0^=VDK5yr2TRwG=e#RN2wsUj8wq^=_<|e(5 zgMa>pWC-r6&QDCvRCC!1ek=znJSSSW1}b@Ts36L}-dHyZmr=B_ksd{*EhRANjH6Q4?PjmADT1(Uvn z&8$P90)N%QI?jh@fwQncj*w}?G717TUq)5}0v)*MPa3p~#XBqiuy0PT8l)=zGDk@A zQho!es*RtF3`ny(KpKA&dmnd+MmrT%wp{#d^ZwJc-gJ%ZwsHl9~l7iFB{d_bqg{?RE=6Ai&++Bas#r zHTN=PGG?%1uUS4z;$wA#7>#QYOQsX2|~NPr;k9a+kms)3+%zUPGvw-oBS%7{!^ z|E?PYQk#^65_mN!H!R}9Kf?e7>R#r+z!tFQ<7WdDT^QLn4X zAPx{Lg9AnpvGs_Ko|)Sh+?(Q?30AOi@BMv3z@6c9^aB}os){&+Z!Hu!O=BR**3%OR z6liqt;(|i!ONp=$1ms|}qxkvl-#~)6Im1)A^H{#<77a*-64$gZp*eGDXN&8St%xn` zf&)}t%yJglS&eGeBex7#NVvWs_nJ;~G7RzP@Kd`{s#0M1x*Ot4`ui~56=FL|nCBFOrGGHR5g#cv%s+5VFt}6(mt=BZa92K%ud~^e_>4?R;I&OAa;=#e?H*ig< zXncnCay5914WnH=VuWRG)eD^$DtFH{W24hX89j?;)HL&Qadq*s+l5BpA?JTa^Qb!( zpXi2w;CKFu=0QE!mP>2vg8&ISX_7#el@&|5pF(yyVgZAdJ7kBdQs6Od>U_Y79MkI%(dSQ2YhD^1e0(zOkE?>AP!xB zh647G+p}*q_yYOe8@BZoim0&|Ocx7SlS05UFw_c;u22H}jh)UaJxY}zXHqo)Kvij8 z1_QkCxrOxx0+Ie}$Q_XjWoOGGp|k$VC2MdGODELuB!nTiy9&_q?4(8>96;D!MSz-C z#ghj2f#$%Mq^p!I44zMq+;Bt$1wA&8nbhFgJu50G-0v4_3?Am^*4#lVWaHMj#6LPBVTkbD?! zhEt*yiGY<4HHsk`0mb57o%e@CB4UX`kh=`VD<$n7lvqodz#J|JG@VjWl(IhfVev_$ zM_doMv3Xlmk>0Gi_FcE4slzAJ)z#JB^Q)MU8-unig9rJ+(^bfNQfALcbC>Y^5gY-1 zI|kyqZ2+l>m$b!^XB(ShuPZ7ke*Q5AGl+Q+P_~Q)BuxlUuM{ ze865^d#>3bm7wLqr9-e&B=tjznG?r^8j#HL(kfC9R8N6TCbsNY{+0r|;Bh@Pod5>h zt}o(@s#<&*0-!#{bt@6o=bQ`3U>L79o-u;KucSy*C`Si=r!N5j&`<}Bf)YJ-dt^?3 z+W1GKy z#(>>qDnGc~OjKVSX0|JDbv^0i2RVHrm|_43hrHc(}00x>}uwOi|D4 ztEs}Khsc5U;RJFB+V}71hId$4ws7Qw;Ect-gJ_VAP>6$LYKfeTgeBedu*^42+PAbR zY+p;Of0&}@X`~P^oJYmOC&>O|Wdr#r%u(p9K#&$yLnsE}>-TfluAF6G+q(Kx zH0a0nVLUUofKPe7sEk?r$p;Q)xopR8K|ZkveJ@vJ&(lok=t|QE_DQ=j6xOKO0!sh2 zA8$Ma@$>JGzJAwOdL28x`ve!gy~^&EZGiyQ1pZBRS@L?a?UFzAr7)+Q?{ebBvm_8? z)vpQO_wt>q=hw)L{9|X)Z8CpR57ZM*>m?trr`0ahUu zd!NwJ7YEQ;?2cnFA8wuJsn}J@@)G3(pKwy(d|4dny|^$t8@0pem6a!__iVUs%`~;Y z`D~i2o9T5s(4Y<-NlN3huz+<|vxjJGwxUhVc)x1vM9B&{nB(DoN#aE&kF#);xD{NR zoJ*AM;OHOs|D)_rmai0TxYMR$umvP2%x_F+X?nv+K(Y$o5-714o=~%4nA{dMRDY2@ zSB^%e@j;fHQZ;Id_TD172JoXQ?4Pt`mc_2Ka$WtD?Wcrpai?HF$BMn{m+H-};Gv~6 zyY`gP2EQ^i6MX*|i~L;=woi}x+X+JTzaSK5;-iI7hpt}Izn393;UHr`O%Y9!w3`W+ zV4;+1Xb_jDSC^NV(RATL)+m~`;#wi@Nc`5oOp|zBr59DGXR5sWuF{OADho(}&jN^q zAtrh>8Ip2!xU+-AMG6>fjdyrutL;Kh4=u&v>;+=)R=dOe>Dh@}+HEI^^o5y#SK;rZQ`fZa$(WezKi%y?VOQZR_gilz|C`$$tcT`NI5 z6@%-8#840uj$O~f@jeF4?#pLV6V#t>95g>)hG53+6mw=N2Mt$si@t?7`;3!-u|Ff1 zTEmSo+(PjaJt~fv-LdSksujO%SUzc`{(JD@aG~vT)Z-}f=I6uB*hA&by>Wp!>572o zUTWbArTgM1UJJncYSZ@T4MQBrNV@pFHd!T#{VKu_@vqqX_7LW(L?15@p&U z9FR)~GB!HjE1HhzUKhxjC!Bg{PWAo z)d}#>@+V_tfI_bL;QjMw@>}4!UfWBtPwuNL(7e|-HU#b4gb&|}dYo+ZTwOg|xdX4i zq-+s9e9Pv5q%-);KE~DwsUf}v#e9Tn3>sb8N9sUjyC5#0r1ZDhSI`>;c!2C;w2tX| zgeAzr{nk!JR8!&Yv=Gn}4+gYYgiSCMzGwoZ9D;{>{HxxN?AovUWQ|zn8H6245*bH~ zg^?AU3B)keM1j0VC(FXebA1$v-W?8Up_5Q4mb}$WUI{J>3N$q@a(c&(-w4e4adtL& z#S6)X1!tH*^Ynme_^%G7Tl&)PqqGLWVY<*5ZgY+l7xM~Z_B8BW?dey-cA=KI- zOhwK?@<#!n5glgjysAZzdK(f3TiAiTN|6b6n?%T%d*9l%M|S4XIfbJ z){_3CbLR4H+GC+UfdoVCVm1`9=Uw=2xUuNN@2<=+c8K+(P!48{%m_ZC(#GPktJO;m z$RDN}KB#~BXAi-ZFHOfW{o{WMhS=9s8G1$p;dW?zt-KqF$^xoCKJ$+~QyLON)||I+ zxchrZn40fix*690>g$5QHI`LVZ}y4f5=9vKnDMwWRyFz`9Ms@dK)ZanKXI7Lyq&(q zfRzw`F}Sli^kr;x6rR|JhtYGr#?uii6OOIgKQ~L-Z~n4{;!p|aNrgIA@^rkC;G!fq z;jf@FC7j>Qn8MS0qDwW;$A|v_sn=CitCV_8`SD#PHjTn(S##jn+g*X)Lm<^v8>Ww( zje4=uWul6UzsZ+tyD*zH&0(Hs(^7^LqbsBG+%bR5kb!AVE}9sj-7dMH8w3PGW70_# zz_WDWyZp!&@i^(W@$d<;XxK3HM2jATdv{_@h%mo8ioOq~+RkG_ZPfxKN`ejAUCxM} zO6=9jFN0zXqKN#uf^RJhC0C|-X$9~SaiW*F&GEixLS)+H5aUOlFp|(v z0d+FtDGYgY=|+tKk7`zQYjs_%$*1g&IJ+EMv8|IelWC-(bvZvfF5D*jN}!!F+&z`m zhq=90!RB97!VbPczV2hGSM-RzRcu!K9F|9Mc!2#VQ5tbdFESy?R#!b3iXG?P&$lDV zf#xk+!L++pL_i=BP-C^fJaZmZ?wG7X%lx#Ykb*UBW!v z*_2KlE*jc{$Z~H%<(Iq*9Viz@1=+0g^w+BJwK0N zO7DJj?Nq8sae*R^U~OZ&@SvE^pYmVg=sLUG8TLsMYqSxrHU;8f4lF&GazN^NV-9gp zIA!TSb%bQ^!2DjTfXL4(VOp?0dnMnwK2D+4w3j_G@1Qu$wqI5E0uRi~tAz>U)+2Ja zLjC!P8AT$5OO?V>w<1rfFzB*s!_3PRWHZ`-l&*mm4M!TU9xC%Ehhp~^@&4GL(1T!z z0L~Ao(W&|sC0{>PmODjBm@3;WEYG3KYPgG?}2%(<{I` z1#x?uEjtWDS_We-s`6XR6&hcIe0OLWdnh|Na#?(VvAz3*fE-Qi!$HDCeX<1;U-S9G(2qU7W|MlA@(FoqFRYpx} zM{Dk{n?kX`|1hb)SECaTC#hQB<9olZJRqf0577PUOD^vMkm>^dM`(^Q2u5%=;}XDf#O4GkxARp0SW zJaE2$9q8QnfysrZw^;x~NQ!jvD^CrB!I%;}9Gx_L4GCIM{!deOR1*g zneX=ohS@}LTIxh@sF(BbgrfFEjF_YJGl)jNLxuQ{r|<$Ckr3;EoBo+WlIV5~m;kms#_fFR3qs1z!&s{4<_E-c97l|I&Usun`< ziFa5|yfOSZ4L;tUX13h_+ygb8o-5H;4tx+XJ@J)5J1oJ&Q3IbnKo4KHJo8Glg(I@# zxRQ&1=)uD(Z+;yH=z$0uV>Bpk`H_ez&q2sj%Eg8c>4U98hzkI*YwG|a#Q1~E($^us z7s4D3wcOq1%V?B&e|e<8Cr1i_)FQ$G^49O|R(j;9!f1s?aOV>6FFwIEpZ6_}4f|I1 zBy)bO-Xzy04#^>2>2n*MrHX91SAl4q??4Nw(E`oEpWint-lt@3f@^3GhXW6n^YKhb zp7MA3C-+EHLPDNzyNT}Cj+p?~73#p*yxia42TJ>TPZdJ^ z=hPD2`UF@cU-1Kx?l$I$f=#j!3 z2jOfZx0kKAT*Yyx<|!2j``YCR4;7Ga`M4m<`C%ifniY2PCI4^5BLFqZn2%l3#P|?_ zL_&CaK!F!R&5fpD5+F%+9X4r&D3LmCS*;eNk)DVDq+B;##ku4742KhE-8@Uo_h*G& z-SfUY5HOWFk!k!QQR1t#NR1d#{%Y(6strzs_o>wK3#U&nexFCYaiN?V?4emNs(;1kut zLMU0$qbGz;kf@cujO^2apA(OUv=8Gx=yu$oQqxwKhM2!0K8_O6{67&0;pSGc;Ef3! zbTxdj23gvTj=@bY+=WDf)65Wzs%Bgt^S??wP;~732L03G%UmeaU!rJu{Dgm`B~sVU z7pO5`6nn=W>0#!MS`uD1T_^0a*cYY=(NVbGtGpx@lR}(5CXCLeIMhYK*Jq`{pb8j^ z-N2kg^F*sBK>%|;O~C0wvREHc?bCtG7?6MT!^8j=bX$DnN&3gD%JACF{MSG1zJD%5 z=pcFbCi^kBQn9ytMG&v6pk<>E-w>Z(0{Pl-F7S|xD#C_{+}AH)gdw>2W@)x?7nq+q z4OsLqO~#7;3UX2yX4w|G-p}QewQ7M!{Y=1+5fx8MZv|{JjTB`(L28orO?fczaz7)Y zhiJhpa0{yn#Gw$uyJfQT&C9+&FYA|XEgb4s?--Wyiw2-pyNu@NvSRYD{hTz3giBw$ zpeI8SY<4Y1+OFM&w<7EXE{R{Eu&#uIfOJ@d~1=KK}?ca!u=WETtV3e4h zCAULnPrLUX2n?1j39pG{-cs>Z8yA0oBzkk-&?wKbhuhv5_ke~?^g`o9kfHi^=DA{6a!`~=$iizhcTJi!1^Vurp{T{P3o7VHcQ;>* zTR*v7Xngb~C;c>L5h;irxWF1^8GMtiv4ow|{aHb-3-gkMPtbxI2MCh@MRG!dwPvY? zawzO7u>p9Nm@pLU!BFNS`moJ*gRYFMiH`m6fK0O=)RLu8oDwQ{gi{iojEc7t@)9MB zNmw=Hb?e3{7{!JFF4xKexctc{JsIoR=n_I0>TmyQWZJ6VrbNd-hYq&q}XX%LX^lJ1s92}$Yhl8zzn8T~!~dq4Lr zZ}`qRyVlxk@1qlW`0pSCbT)JG17i5Y-sMD{Vh$MB3m^e}`nIa@dBSZCuD6sWVS@=O0@$B)zBXP6#2*eTTy_31Zk&0vjMtr)!2U0MKz`ZWgC~<` zn)oFIzn^*LA(;Knqc0UhjE~@X$cyIQ9NA~D7o_>?!rQelz@#BigcgL4y8BhVe7jGc zLB3vhxLii9>>er*$ll5(kJX(2K$2>2v1zbp#*c4AB%t3q0Kv)ncbv1qmgfuonuYu{ z9BlGJ>y-6xpy0Y8@nA;5ufZLP=12OWey*Mop1CQhf3_Z)nF^?in9+}z_z+Qa`*;-b zQ~!RVk})&J82%&q-%$>v^3Tqin;=$~)a(_X)38R2zOC8@T3U8j6>WMGXV}^O$u0Gb z@!YQ0=~%jt&w2HTI0B?RoqF(_e$e;N=ou1xOB97Mkj4%!(odm0ve_|0toik8-v|g) zk#q|_IYH|AG?fG3@mOL_wE~nwQGW3N(|FpHGB_JDea6Xj%VwLs;)G*W2Nd>j5fcNSg8*|8qZLju% z%%!GNHia+B;bS>_(MaR6hq$j(s$l!?MRy304*&j2FSikc_?;tI`+#MDNKHfURx445*qpYMro$`CCqyH z*=zF-h`eL45yVtwe2hXfB{QQ!T-BFx@NNUR*rozDo{GlQ$xQ?FiwFr*8gLNTOX4id?AsGjL?R%?mw#E3 z1u0mn1?btC1D~??n;bYgxpLPF%D*6Y^1i()vo=icc{pq+-~6yU$}N z571Qq9qz|5cAz1B94(fciwTkxYrYgY{dSaI2-Qozke?ItUFOf=AUOlhMfbJ8x6S0k5?V9D~Jb?)_38We-czdch#rp$GHeB zsG|X~xgaO;Q(XNT4oLV618>D&O)ErKv&b(@F#T)~a3m2|f}8DsF^L8qle)^6_E)KB zW;vw1Y`IS99}A~|5ust63pM?m0^KdX$h$IGQJ2X*}3wZ(jjcUWPrf(0A{YxCs zERBW5$!3ML?%vmV1kyOkF-{C@kYtQTbi%u%(5+?^TS-qcJPksk%M^^;&j zz90G6A%hs&Jw5Y2VkT<}&iwsC#~*-jqb-FQ>Vz#GSFpDjX~nq>c!~$0Hw0}t1cJ}> z8-XWGkvkz=jUnZIH7u`!Ucy_qv*a_;Nof{Uf_;8`bIZ5>cPnpF6KPO^Dh*VNsn&M+ zMgQswL}9wj0@+SrqE*k%B7N_)!&U|!wfPwKN4LW%zcrwv05ci)9cZ{O7s8^uWW-hNxGFIq+eIup(ekVl^rI@#c|?K9S@@481ukS^-a9ik)+bJZVyVe zWE+xRp13;uVA+4sOdM{ni1uxlwwOIkQkIju&L}TB6eGeZ)*eTJl8vHDwa6`w9?)V? zh@6zTMxS(8GVnR2>mzcTG?8{J$4IVDcPfr9U5*YsOc(k3iG5T|3!V8PY@^njw6=g|51hvH}Tqr?x(?v_o--$Bu7E%!tTca-#w(j|Jh64 zwmO}O#omVz`ipgL+3>_!Hy6Z+0)L9NXp;i!-{74_0$;z3WXh#)`kvEOSYn!iQ?}k< zsS`X*XmlJ5S-QJnF>`hqKfVQ-gUx#}92K(nzvF+Vjo&|mg`Cut%xc%tJf%jn18Z%n z?sKJ9l8y$<@Z5R#$>#lSXZkqxmuJe#RISbe8*JKXcK(ew{pokp^{ZDPq5&wU!-sYa zzT3_1dNPFTW@36iedh>((g@EE!G{+c&!}!XF7EBSid&8c*r>fPm-p{4;ql#YA7Cn5 zu3Njc33#v^nzh^Xtg&eUL#f5-0*l};2ZxbYBwxU}tlNp)UH14+!z_o>(!B3Z4|~0v zW^`6@*t?4Yez9U13|_zrtAV@oim^0U$>sm&K7_r6RbZ?s4%ErVINVXvH^77b%6*m= ztFJ=p(N+x{+_FMefteRvsnBQR8XdKN&2+d6|(5Vb4>&{j#pfvKk;?}v9y zjly#e@ma$tZi2`lpN~>bPK<=^Oy@9fHYUUV^t7B`TdhuZEN*&6E>KkF!6BFGIM`(>6@dw)N1xgu>667rc71mEtD1e z-3NzWPyt(S2VEK5KbN>cBVY!z`e?O^fq!8mz~l5L;BKEBVezRn;F%1Fk0LSz=%BmOR z9ZE(9u)*2x5wY85T=pR{S7RSyn~1l;Fma6;Lx~S$8F6zpIqF}M$+8^`rj+m@sojQQ zIqXN)DphjY`<_7$qJ_RcATzH+S)~JY9Ufd-BeqZ6EI3!WXW4dU@8ZEHJmnDS1*B4zWxrT$xM(B*NR=blx5pj8^DB*O$>=zVR_9L>LG0_&2o{^sx3^P7 zfY?*R1Emp%+sRP?W}YxHO1sTBoac(sy_99TCu91~VaND%jx%}8?iZ@UNGO(TaZh@o z2Kpt0%wIwr&6SjfvV-`Ga|L;ch{wS$L1o|F0L=>FOZuKy3NmkbU6V-)s^L7m2@B!nT*{e6;pBZzfR#g?yIG{e_T+e z;^*2|rLE4_ll5gj`)5;D{6VxL*MB;HalPL>J5BHTR_hBUd;T;V^B-d61DM23&SnfO zl9IXaX&$hFxXV2(gx~Vhn4g~2U-kU|Z9t9ullp!gm9iHI|9`o0oP(_(Fp4-2e)3@O z3ti&5Cn;}F_}99czCH1L5~{ZUxr$x87=@SWCN94$lRqRNl-YH1oL;f_+=Uoj6+V2# zc&fB85V|!}@;VhWYR=MZoNKGh_wK}h(W?&^5uWw|o5|tEmu<8kzB!!YU1L(Ia#C#2 zkW6xaiQ9JVdpGMVcs%iK&%5T){f)1@cNrc?w;QjsyWY9fva z_c=cLm#!dmK_u%yA$Sv9w@7tS)AsJ|&Or<3h4=mO`VVt+bCkA1ZSqWOVpgx3Vl}U; zDcMC_HSdB71scZG6zt6TeE+a4!~$NCiS1ew%Zd>sDOGj5jD%`m;yt31 zlFM3UXB%+fynL=x@ulYn2H|~4ZWfC1(|x2di=sBH*zUg!#oRH@kIF`GTDX$bXl<{4 zMFO{CYZ@Prj?eCvV2jijHSlayiDoqC&9K&sEyEq1@CKMYrROtX_TKzvwTXYf78qhmZmZO!gvSPQ!>-sCRaUf5j7Bq;W)N^O~?`Hp>BDD#A!`U+Bl=sYQ5#AiX;`V z^x#7}9!NX(LhuWED|H3xWny{Rl&8uFd%PAQF{QTJ%3Wrjf-L$@Ia7wd zx65@ef3$7@xMP?0*?kbu1HR{La?^n<-`}{(aAzcdQ~@V0tCL;pr(Bk6JCKc0Kid2| zOZ@@DaTm2G_kJ0rAnmDebfdF#c0qYKXz(x(0MYmZ(4rZJ#BoT~olArHhp;QV5o`Kd z{m>Yv-hSE++_;gr8m7DOCu3hU4iLvg0P%M)uB-zLdMxO#K}(g1imprPmui;T+W4~v z{{bm{(ew16p6>Q2(&zW9dWo?pd~dK>G*#5?=}LS0?eX3a$^jfyz-6T&k8W13z~aTL zVY{1NP)gi&7HE5}$7|nR#4>@7Y1!TIKEtYKq;2Y6ITNcWY+rlUWAnTi`{6FUG$2hJ z8!*}jDw(poi&`Ogt#EL7e^;*!ONkV1Ju*6PovF$SS;$4?3jW z6|Dh%6ddWuaPw^K<&CRD=JTlBQ8h5tM{ju*^i}u@4L-5Ok%Z8ZlQt4 z;4#?bVcw{!vx*0X5$Wl==lZ{2OmB%DoYcg|1}}Hc)Vm+HdO6?oN!<^9R({cC@i&15~2 zdU>BQh2R{EG%gr7RFOK6koR(76vH-s?ZBcw;$~pM2GRMTz#Xw9iBfbs2`U~GUEoA` zF-^;^Rg+aL#B+&n%GXphsf1gdQ`iXY^;WZa*0<3F3QN{EDIdfR7#Po(qjDhY(#%h4 zC=#~YKI{gTGWa%jZ_=ekN(DRNo9&>I&$5V}&uWKNSsNd%P}_6Sww9#pfwMfY_jA|x zb||}8NCM42Aa3A$Eyj+^v9mdJgmzp2lni^KLjd&sY4Pht1>&kP2mC(-oN}Ie z9tIRXP~FlhQj-(k2?u%?2MpsnmX$F$HFU|wrNDu&VU=5~`99X@_dagxeJ~s_;OBs< z4L*ESckk(%-SWF(hmt_gAZEF1txkgK0onkMW>2A4u&1W4qK2_OHFk^`w%ktx+0fx3 zWWZ;!bDCkWJ}=Dmp%~HnD{|%#b<7R>68vUX$qO3A_h^n>{XaR421l2AI8|v5%HZVH z5!1p&3k!a@S9GXols4yj`(x=xOel)-{z@F)AL3O~X8M~j(idHvJqLOt+4wQ|zwGbl z&@^;{cfe!R6LS$CPeJb9_#W1L#+ew447LFj6gqcQC5hhhEf z$l@zv#)BZ_cARhc8r?8r5d6_Oq!4y_EVCJ1;q65z0x^hC-t|nMPz#C`_u}mS9`qD(ab_%M^|_(Vo?^9MS^CYkx`#T59_byA?{h_ zE?IzOk<*#QoBkNs7H-?UAa3j96->BN2^94oZ{Qh>&M;l(OFVZCxxvQcMV(12lS(yU zz9`dOk0ox!i#N5zP-;^y#ooPgvkavxakGSCDvBF0&}D*5fGB4B?d*R_F+V&wC<`&~ zAYYUes%+qZQbXf9#dmaA)%2P$!jIIhr&M$ zzFa_p20@(E=*d>2?T{T){@)uPL{%sH6@cgbjTDq;54u1|Wn6nqE>o33f%uD;f(2j@ zy-k#t&AW{~&$#r2u)_G_&EKvn(BFu)!nsoU8Wx6sX;Kc9(xZiQ+jPKA54n4y7NP$NSBzyF5d}S$Mc;zPrN*~-}vpC=*s;$Ec4~g8=e*SaA?vI zy*p7#er zEH8}0NG^5!^2JIFvdO3eWF!TbNER;Lf*`|N3!34VdCUE#1iN~kjcJwA)|`Eb3P`Iu zH?Mi!T3D9+*eRII*5@}g4g00jd}Nr+qGXs*=ox|n*jrhggf-Y?VRbfw>BB#KIvbzM zeFi0v>nMh6QIV1t2@=t(9s9@!FN`C7v_O$rYs&Bf*QLHp&e{24dUC(dfvNpF6mUa1 zV#LfT$Ea#cmgFim9U9W(VyT^Z?DatPBLJ^+qLM-moi0d3@xFG%RMJ$&ey7t@z4XF2 zrr<33cVs<$mIc(pj_SgXqi@A)Y-aUYFDW$flXy1!ldHems2zMZ67jy?j?EWt{c}2a zy7kB2k1k;J_a;>!_Q6#JIIfSS4~5q%JB6=@)r*Q#F2@zm-zQ3-YT`!~()K1M>64&i zD+tLYtk7HO5|#(D`+;TxBnor46G9Re?6W->;HcA=1$D;e9f^2-r7oa1kUK+Zt|Nky z$t}Gg`PND8U^zP$F(yVr+%jyge@UtKnt)#9M4{WxE_iRxu!!Dn!^^#h)mUfjfcFim z{`Bq1J%aBf^nlgBRWXvv5&abgENGPqBG!SCR-yb!ydN<)>`a7M80FtB{$MsMeoq?L ziV9g8c=-X08DU&8SRm|;<46l~S9W*4%EWkyfJXm?JC8;{`H}jQv*8S(Z=ujCd_C`J z5fPi&q0JL{5u}$i(TPQ@TAsukteLn}B8_#fWxf3dUyYgtJ@q^(rlk(wz_?Rd(g!DR zA{U3>=8qlndE6GeaBs=DT)&+;BnN%zP0vZfRZBw>N_(?kI3nMve~%v=eEU^Vs2@Ol zZsY$U_so(J)(|W1w-82=S)n}OeJ7^B)k!dnA?G1B0m24?a~S_E78ovvS^-y7DGNCy z|DwoP(OToGpi&z$h;q7Aq)}RHQ#{c6<6(bM&cl}CKz!42CENC_*nmCR=@BV@SDpuK zXSSb;wCYl5OnYBAMHS|L5OF^*?uAib@W+pByS@kxF7i7&k}1=zve13%T^!um8=qy z5~efZfzgw*ib$YH@`~8tt&z*K?3kQ)IuKAP@r58j*63H>cT-txFlvfp7nPo5zHGKg z7B@;)TOW<#jDBr%#qt0>FZ&qd7Zf?aAcMN)Nx({ANtkWrY~n(PZi(&vaxgUz^*l}b zv-a*HW?VIYUNj%WZ<(F5F8sdY`D-@+S>+70_u0V_0mQE9CM9;MC`bN^77Ll7+@S4X zbJK;~PLK#1y_V+>r_qcb_$*7<5yw3VV0SEqHp#tVW-Y}^+NiLZ<%raWTSk^O(_>eH$LZ^3E#PliCbIeav?;?l?!L zz=@b^+mxPsn_2L3=j^PzCO#=>MffbVc#}VNtd!Fv^wPOFKd17oPM?3>CMXzQFG6K& zk|gL{34%e05}FxMyD0@AC5<*q0(@h;ee=Ah>*M3?dOzfcAwLLL7&SqL8-WX2G+0+s zP-!`jPS-3CXy0;&uT;=Hdhl&VVe=gm)zM=P$DCKpop|vjfF;~*!3JJdIVvDU*)@wZPLkz){3)PA803WCZ-|7UR zX9_nT5++#$!C2{_d-ADL+sma9GX!)-?$5OON+6ccykJ7fp$oDc$0zLhXvBv-2?LOxaDuO7Wzja!MRhmr-*#$ze*@#m%4+^`;^upQRc3T5Sjr`GU*hNH z<>`35-!Iqx=*CCj_U&eU?<1ctgSL08fZA`nJq|Bxxr%&kR4Ut)NNm3GODn9pz`xzQb4^`wz04n@cC9zxpAj%I{+ZzG>f!=Cj(hF3 z5yu|EJ+hGvSpDXEvf&H6sZtSro~E2{3egKem`$?Ka1Df z4Fx%P^7VR0o@0d0EEvhpm$U~5YF)O(Itsrn{JAgE&bNGq47go!4-|yh=(oA6*&Ba~ zGr~%z%+q2CQGiT&4$htPhFuoqQ;vbVvlXTsR4PIwP*r?ld+n6KLKtPN#hjP}1A_{A z*c~jaAJy%hEhuX9!xF|H;uRj+o7>OS+HiIY57o!v>2go>htR*>F~2wzUAV75XD-Rg zm>zBMyr2^D7(e8#y#I+LuQ4l=({HMF75OtB)HU_7(j+OBo!*o?MS)8i3OiMd-ly4) zVvh)ABoIED^dO2karT1L44*!SKsksxoqo`Y;1GDcOU^4d8+3W8-S;kc7LO=vM<-Yy zR2gHbu~IPW(&yO-+^7z)hTb@Pt{-M;NtkBFNK8bcL`j7`e#au}cKK&v!7!5R=3ffD z;)=w<^=uYFa{sgS>%^#S>te>p>n^D}sYib;@R`@}M zw6TE&Kj4&CWics;QqU0#NaC4B06~s91p^I|0Vkdyg+L*c(A&O4GZlr1d7w^w(belK z5U$URRr@qaF*y&vJ0xuHO*RYXkvTt#c4CkJQpt6$AU`~XzqeBYAKf9#gvldI+Ecj7 zG@K@U_pS}t_{q-Y+0hZ?g;WCAR;Z0jCA{OXcDMk<2@~2e$~ser$QUrWF(u_7p&!^z z+_d0>1!qSbKbh`jbDXt((<*BHTe)_;INq;P*( z1-tO|xc6y$^mMn<#o0uq=Y8hE`Oe^xo1cjzWx9#kB1G)4OT8-GMG)0_Q5dlV~smwlb^Uk%mtgSO2+$&8Ozu-iEp zbhqCLW*=86NPg_f^Lw_Ai7AQ7{qZ;_dqZ8_lqcOyOG^uwBMuJ?e3>q^e-QxeXL`{0 zX3)-e>Tu$7t59-qVx(f+Sk^R^vNYa7QNHjC{G9U0 z4*Qqud#@1qTISs$$ZPh0aHZKT=K&VTSzDL?{wsbVb)~VVpw)HwZ6qvc=iVLW3-&sl z;#8eRXBRhWwu|Y!c3otGSc)lA9TH+gLRYo$1}Iff9#amvo{LP3Sda4wPMLBTOt^x1Tm|d;cnI{nK3mm zTBWft3PVnyJvCw=8lB%veHjAOvH*ob(bMKppp+tqG>xA(E9agd(|_dWT-qcz=9O?tYi(JI!VM!WUNO z`_%`OL+hXSm|yuhU9w|4R-YarK`_rntm$_t4{Qyx#%v+++RZdzh=Z1) zm{1YAa1#55yl0@I5n~4)j~DZ72yvCou8j%OAR4zmLl{N<80y;iWr=+R4YKm8v8xUM znHb`}5Wt&#`#$IGX#c0bL%gj_SU?ENo8P*<06}(c;>-CTW?gt>>?io}$&~V2t<8%| zQgvxy`2zi(|6j{jxT%Xa-WpISAYjl9djjoH1PcqxyRz&-$tnQCr7=DJg`3A4K3DuF z1#U74((Od1&(P#r)z~5&()x;${=~3T`$IBG&dQ?$^caKG**s~9MC}Yz5`JI(a1Ni? zUm$Ohx{azQlh+{MD4v)OjP?4KB7VHf#sV?;PV=@abFdG1kn~l-(~S+{)D=Z5lZ=DDOA0LK(sU8V`Pr zZlB{AgPwg1f+cStb4F)51~Pi-UR3KU=EcNDWM$z+lsRx7Nge{QNB$n)~Nb zUGE|cP}`l~e*gD%h+)y+#n{{m8Vw=rkBNGh5s~S?^S{Yu$LNHoN4bQ6oM)uSkPJR} zC_i!^NnA)Eh9Rna0jG!YqlN|Q8VWD8*Rqz}0s-R3P<_p{c!aP1k*LkEto?hvhFI5eg$?WtIceC^iL-6pZ{tBuD!L{ zJxZ02ao8-dp^sL7veDu91?cfZpzPtG5cFdMC)Q5#aaO{O>Cj-vpbLvNEgIboNc8+r zE>7Q{u_x?BF~%oh+G&xbA3z*c|1`@lkL%+cGq@^%ZRT?;Xkk}g2fbml%v1#Co`UEx zyerqI+hax|w|2Hv-&394uisie5ftm7UCh{fMKfG_Q}alN8+%e)tmNau^0%*kZ*sUt zuqO6ob)D4k5--aRuZ7(!#o4$r@nckGH9v%--gB%1nVO)6x!!u z-?D3o;fvPh3vn(&T8N%Y7(6moudTx!)DQ5`nfGC$i-y}-fa$040$E~_pKlkN1&FbX z9hxfZO-L_#Uz5*m6J#^`6Y4ruiU`gf=6toK;{nF6BWDF^;4WL@YovpAU@?aqYo$2k z8bUY{_Ua7Nl_`?`XJmghwbAYZsSE7=K}w_zC2>Bl+3%e4{Uq`GF|Hnb&=DtDNwHiG zK~CpoiEr+ERFcD+ph1A=Zq&cy()S8GcJOrQb6hmxdSA>%)%30j=A6Ii>Os)B+YLE4 z2A^6F&V~4)T-=zA6zXw|#Bee>z=m5netS=q=q$vD^-U2VmP>&kVUncBCqh0fi&HX3 zUH(8gb` zsQmm7f?iYOSFB2DXV;9WT(NLZa+p`KoV&fxle~>>!alI>sYELHN>kqY2DEZd-+z16_^A){Io=n)&u_l#(J+*VXSS9^t6*S2 zW*G^kI|)TRWef!G`@r91fHFp6jLn+z;5R?sp0w5NdO@Je68^njk$YSHIsA)8X$@`~#`1qt6d^dE6^RSk;;>ZNh>3C)V9Bk^RRp+BESMIS!R{b zMAX)A2D_&}=z*?*3>?RbWzmYL?CT!TY%#!MT z#tQ?%rELob!Lg#f(tZ#yAdL6SnSj(~vfjJwb{Dp#Vf?wdEX3zjFe;i*CZQsU ztD)&z%sbg@FOiEU61c2jPsIWb@@aoZ2f(MdhKGPZUDF`JXKV4eI{ptDeX@7khF#s= z<-bfj=l?nOYz)kQqa7dY&-!r9!7wwqy}4BR>Z^#X<}#HR@G4usyVRrIH|TK8%a{UZ zyowR*`&`RV;?F7{k2uxfhQN)Z{WbbZ3c({*90Fm56V!O0&_cIu)_IIRKCI9KKQK@C znH-jME{B|Da1*Awn7nX?e!%lrXrIm*{b*>@75HlGrKC|svt!k6+@ra!D~J=mYowiS zs3D@oP_G6&ZBRsd{a=kjH9i;I$(4Sti_=b4y6@u;lawbhM=Kso-gzH^k4h zK^3%?72yRzPG9Su#{+)Is(m-QEO#c=HD#YH2HlU}IasU>)_+;pne36o1E>-Z&}g!} zW%s(y*+jema0tu<$5y7#x80AyE<7ogK>c)3e6^UGN=ZqD>eV6o^{bcYegnQwuAL#} z1?)R+G1*x0nOhBRm2Pxdt-Ujm)$Dnv_4)PXMcr+psP$zm3?_P;cz<)|yK{-F+=e;L zvi6+`O)QB0osN;a;9TcjUrB-%K?2;Q)^IAbZP2Yk!Yq>+!`b7fls1s8>B4bFH&|j* zZC{l@R-W)64F65mPy0bV8w8BYSdWVAWo)yb3}j2IJ<57^vH)%J*-#hBO4AqTahB|X zsT}v{vgO~Y$z0wJ1`NLno^1aOX~LB)NksI0C}ag;6=IKl9PCHz0`Ip|EPn5AqPU5s z1l`I8PW9@QZk}7tdfu+PYYLPDx0#~+WPe6W}kjdwC)-hpgN&5ef2&`g*&6l2TDU=MBJL6?i# z-;dbdvb#S|(3p3?1JF92xz-d4Q7P{>JJ>im=k)#Hte1q8;42k>~PtL}5sk5P7!!IR>B)0(qE55^0)8v{mD&WWb0S1d3J`u8rdE`;G{@&EZ zR}!OIGMEsMHZMZ}?_3b<6MVe2yBuQEx^^J&i&<^9_T;MhoLS7l+Roe*KolmWK!H?c z*U!F2f6&jfe;U(8UR;^u2#=8ZZ0`DJP>DcZ2jz z;|5QKfi5j8&n0PU+zJ!Qj=joxr`ngIn1x!Kv8M|WO~O?Hp)xG(`W9Z-usRgqU|DQCbB(g=`YcCOiwOjwu)8RNK;eh}0M4KA~jK z9O{EB%U$R%U`~P0rW75i*#16WPnVVp0;z!mgi^P+j37pnA$;3HIj*^TyXiNqj~`8s zO8=!?*c*BM*HkCI-hhfEgZ4z}$<>_a>p<=`Ij}3Ii{S;9yuWw=;Di?sGY*Kw?9S$L;56A+t@!L{ zJ3-ou!u0W*eS6o}MW1|-)zsJY2exwbAIbU)P{a{coRzn<&=2OyE4#cyMJZ&dXROg9 z&I$ErF6C+Vgq?5w=$y%J-}3Re{~Nhs-`F12i{77w`;@tyt}hQ_&l{HZ77M$b7W8Su zR!)W!?$(F2t+*DE%a8A`U43uu67SZHZgYfHNSN&e$+oFOeHBS48{>Q$=9TY?!HNe?}tun))5W(1# zn*u?_o+%I!xN7`U>8qPS@kIn~sj~IawhgQ(kyuOqH<&ruaBiQICiBamoSt(R+88?2 ztZI2j2M34u`A;BGJTD_98J@xfFg}m2G}qoB=o6LFvx5`%bNEsRq2snj8le5cGn5dg zf-!#wLw?|amUOF0@-z;)#E~Zf z$8p;CnM2II<$a8hsKk&dk2+Gihkxd_wG#S3o0!uyqr9xqx{GmsV}c=B}IQ(&N#?JQ85_TWdI&oLP%CHOJBXj!iWI?xk47NBUfGH z(7fuRN*56g5mGlhKd*ZhQT%BZdDGvLIgQUKmJ;+}SnOf)0ps-T4=U@??6VQO-rPkf zwu3rc3r+*xH3!!O+N4>iRX2?3(pAC8`=VczCWN3`I2yeeP*k4GRQ_v{eVNK%m1Id`MkIdj(rH5Mqp0iJ@}BDmEorK zsRWEM;1s=McwP7@!kjgzEB=+x5T>lrAf-+6FLC#AnV#twf*r6;PfP{_gn1qi=9!bs zi^k}=GVuLED!+*G2~PExJqB0GC=!>`=P{XsC2oM-%QvBD5w>d?B2&2e`)|Zb7e-bO z$f;k1VocLy*bHpvUmW^guUWK}-TDaBfL~0;&RJu-_@G+=!kj_{KOstuU-I7(K|3w# zkuZ7m5|@6PjcqdHL5IDxcMM}Zx+zWgYoa44_IoJd379Xcgv*bjqC$2d*0g@dTUJFi z>+iL!D$QE?KC=FIZIG@vh)BE4&RRb=-yiN$hU{X>vD83$U#-xGKnV!~Js* zxC~^$Z~Y?nfJH5*A92{O-Rz*to0%hPOD?=T7)jBUw}aafA_Pi^nTNpoI$>j|mm^0G zbX-Z`i3Sqa)3ihC&$IhCm`wLf10W&}RT8=Pi%a^7Z${|l9E0Carrc4%(PaI!+c_&b zdqZts)lUE{eY`Xc1|LG_=IX-uQ;fsK)m3O!9xJWvV}QjU=W)E;1v@Sc2{v>E8&e^5 z0<`kHW7LfV^El_H`gdCyLcq$onK^nM#7zT#14I-fxTvju$$XIWFy8*!?4uoen2q&O zT@!3~OT)Cl_*XfxnuCXVEVr`14}m7;l~-E3f85WrAg6zyvR_D(AhfV}_$UUns0{V> zA230>YA#7Tv=EtNQt5UJKtgFV!eGga|A3*}ppko)|XXp{vsU2KcuFfb0(+toh#;}#~KJ}C$MKMY>m8t|3u=Nj4awXOH zn9=#aW)m#@lr8}NL47$NIar{!CpS}E*WDW+){bp!=pz6P4U$-)(}e(QC`j5a^^&-a zP;fRXrAk}~Q+6>ad8+)7?EaO!`Ip4pUqfzlYhExe5h}VPK~%WmhMa&_`r7*%WndNQ zN#pZA`BTs4A`cgs6dKfPl!rpz6}*bKUSB=bi> z&5&;bki)v@c4Cdq3k5Wmd7){9|xha*7(OeZkHt(n!K@?n(mHW?wA2F$Ocab{;plg8~+{-H*LWmTcL1JJM7T{W>l zjVW(xdbst{bJD&F`=y6ubTyy0M{~c*Z3#WQX7qug90erBaTzkXED}praALcH1QNSN zOyb{SlmQ+R9o@cv4NziyxJ{|v<^CqF!@hE>j0V-`59Pr(`5Ffs4CbKoqhNd6>}fgz zFP(IsOzL>`c*K7fcrcp@-s*V5=$<+IS8Q{kN%)dE-%jhrr7}PQNvS|ZT+x%dK!~f7 z@3HXKBv`QhoqTHg5atn=qI<`ow+u>`I2!^4^8f?-sF4Vu*jV6Ur_0gfIK&=#a=&75 zCLWY@mKZC@7x3}moQ)jfqx;CvTk)gxYE5fMWIZ%@hFv~I31zM%Jkzes`A8L~WDi=e zL89SVvP?LXk3N&-C6TMm%ju23`G{e%e(W z0@g&EddNcC5q!4&=vwu;X1~DvU@kIF4($d~C|Dfxs}EC{nVjGvW%2IYBEr8GlS5oA zth2xWV$33vtC?Svddc2z93(fa3zfr(poQ2@>#ng46%wVE&qY~lr5|UpfE-_gD67E1o2*i|IkNxg*B0j^kXMCar-=18PL7 z#NC;&MYwD~@VRuLK~0j`QK+}pCMEAkMza7A5)qPWmVnXk7(Q4$bjSkk3HsNkk(Q{A zr=Y0J=JND$Y;UTwTc;?GNud(*!)EyP%e9C@Dm>QUL>qZ$lkst3nA6zH!uV`Dzwcix z`W@lO(#oX6iP-}UVC1%HzHOCH0QLvKk(mjV=DzWuQ!*h3_+x}vk~8Rw#>iriKW`w< z`uKi3{PPbJHOK{xLczj`1BWPt0HHyF{~&1KNg24cgGOJlkdTt02a7oT>l996dbDMb-7^$r+B)bCu(B zj464=#7kTDTtO)!H7f8Y2%>PC5GyyrqN3GeiEf)Q4iK>o(LuLDUi{jRum7C^^F!#Q`gQ1~I+_Ra1K^Y-0 zobHh!*UHXYzOdi{3xxj}YD^4j@)edC9w+mBS1>;FlhI5vP*8xG(_T=s`dtcPQ+?n@ z#eW>Z^B}?`1uR9d&frtFqFe3mV~Agm|H>F9`v(El?57q(wv*mGRq8U3``Vc!^L%e~ zan;1+&I3XuM4vj)-F&V6)A#7g+>qm-I8`~{&?fiFYvJjj&HW+35eL4vMt6-<{&O8< zu9KTI_RJq$T0zxOrz-R;6rEl z1O}F}>}LYmpI>VJjK0F6D|Z1M<&fBcD0<4GXwW+YPZPksoZ*k{5>9}mfCe31h|XJG zje0)QOdGxK_EbVSu|jY9VN)KKz4^5$Iul}Jm7YDKOj)V-h3Cu=5TL{Mc#dzn!+ne{ z_xt-nlQk1JA0xT;6=*dr?onLu!vGDkUqRjuNUKQEnZu(-@K?Ph94QCq^lb~hMt6F0 zjEv|*4V#byui4C%202B*(*aElUzRZdTb~}|B}9XjDN*>q7=K4>4h!bg#&NT-!s$N% z+)Y`-M=9?`ih6M_*lo`hi)Q-V9y`jJxijR4X3*!lIGvubx@k0GsC+zSYxrN4Vtjy~ zzQ2#fG3F!$#14y(eC&LWHk_>2mGjlZ+kTucEq8*x{h465HW<yN1O#gR#H&Mw={mf&HAUZMK;Q#yX>ZvJnJ2doXJe=l8(nUR%Fb)LoWgzKP3%a`NtpWQdoXIa{v#vT<2}p9)YE?Bf(G7dSS5J)+xY1-&!ZE zKY!Q<3ejHbvyyaAPfxb{TM#o|;^25RFM%LtXp56*XTb2A{R^P!V#|Y$N9iKL!l8?3f<3@x2#apxvz@|ar%tO?-ep6aO zF=kzByNWlc1ev5r@_#-n`@r*ueJ-&kIQx1%Y+8~TKwqX!IgxlsfyPi^%;yjg^%p6q znS7$ICVQKzszC1?8OPLm*!MPT(e-9y;%IjbGiLAR^zL>+VOjfneJnp+#C>KJ6DZs4 zhCZO-QUg6<$zpUfU_Ixjr$HCx(G=Gy4aPT`mz-Y}TOeWPXR-H5)WwG+pE`#@Rs zG0zz)1W&aK<}2zEg)<@RLdXFTn}*jjd+vu^rsBms0U>62-(x{Eq~&zAopl++yHdm_ zFg=%fEcN@nT&}Zc#k=$W&y{)xz*9G}Y!EdQX`IuDxC5lS39dnC`=>$Jn#gK<_4{ky zi6vX4%NRiR_w8-R_cODzu<%IHgUcCFpNsjAX!WF4bK4n0P}c-@r(z)yN;?sa=g&gr zgx3UKRHEAFAIsz}8(|e<$#VOjC6Rz#eSBGFfL(KZ4I_b&|M~MCO;A`+hxsdGhySN{ zq|BOfzQ2dwsFCJF>WT663#I?YZ>@YSq}kc*ceCfg)IQ}c!n}+~4$})m899Nodov3- zkZ!sAl~zv{egTWs~+hrmKBV>u=_B|pK8>L1m0`cA2ISA3vJ5?Kj z*c1e4u(}PrmQZ0y?3Z;pkNrO<5V1nY8pEu(w0BH+*W>3ks`=P@E?XiD88SIlyMGh& zCAWtI+u=$#W?AQRzfFlPnqQ1rWnNb*D;o<|U*cU02)GNr^^EfxxD7+mCD`CeS#WKP z&l(%JNdcNl_8bDW!CzZ_Ad0UEfsC5YGg)_G+}Yj@AQJZIgue+XS74Y2da%NAzEBWx zhpF?m0#_uXXVCc)3Hb36NHO7)Po2@2T49F7ZCCq;*WSy|%03%WQwNJsto+q{KL*T= z)-}YjuHLL>C5!A0q;sn~scvUY!PQMd4GN*D5$u@rzN1?ukcWr@p--UubbUB<}x zKNN#v|1+u%xKTB`3s6>OXo3n09?+E5Rt2;~#GDzzhY62VF(9TLHK1x7g%|9JYDnTerBpzAxY`rARoEi@ zJDEOoPOZAxg)|-$|BxHPe*3im2CX_IF-@M9ohFlIMg{~R)12?>)x(?0(E#eH(+q1K zTHW#frWo0TxoD^vdd_gpKq{65aWz<=%5W8Gjabgu_HaAu*zo(7hH`L72MY_ACHsR3 z+38B=CoNF{wKfa^?9Ai)`v(WM*FV?rUMI?1W^W*nByZC9K29Glh01+}angddA^x(+ z3USDp|FsJZ;f=Vm$jEgBW9#V!B=!Tt8<`+Bc|@Lx)pC-T29>B>mE+nH|jIxX*Yy*yuA17fNpTphq_T~$`4Fr=*o zQ*7%`{;CD<2T>yDP&q2$4lvTi5JfL_o}c1FX5aI^{?9mmi`xspou&hxn#IB@e8F$OTWPoL;9_NXF6XihGr93MqJaHWdk0u&9Psfv#ak%ebE zDcX$d?U_EEj!PC;i9W2Yk65IBPX7ip>t z30!G*QC-WWE6lc}kb&MPfqY}`ergL;=dHW+TMAz5( zAIZO>)8o$$;N}OV0DH~cjkRA1fV37*f=pYxndmG2-HzZNSAe_p#ymx)#>(RlQS{i3 zEC@n5mRg;=zb2b|xzx?AMvsV+02f?%g*+| z73pLAtTy37v}j;{c`0x|sRZ{HKSe}U?2S4h4`^lay@d38I%ax0GGNBk-K%8Wcq+NP z4-aaL4pC6wAoHj1UZPI`HbbpN{3XiD*`fRpsG@wHLr7kOM9klt1jKC$?JZhSmjU}W zBViZgCQKg|`_HstY(p;m?@IbzvjKu7uwy{DAWXpe`6~v*8UZ5nFphVN=m@@=Y?gvX zMhS547Qb|4VXkMMq*ec!u~;VlHuU#5O9I0rVfwBqgIWtgl*HZtWl~Bilc^D#O3aZ! zWN!7l&|a1jXq4hjdg!Uz%A{`Bge3cu;;T`9Y#MZ^W#Mvy9+W8naA}DI;yBA`+xSfA zvgscKDP$`s&>hQM{$c@B=V`4c}x@J-zHphE{p}$*;)W@zKEqbb~T+sGn1+YTaY+i zMM}1wxnE8!Vs7={@h1*y9wlx6|GhG!R%^$Kq68r0KkSI?Z0LG0d4jJ=?4tS@>>5@F zjyJ{FpP>)=jTmKmX#zLPC4xcWitN#PQohfndhfm;6_uz!76Rc4g+EzCNe9z1+2EY$ z(9Ffu)rDB2PjgqF9%$($EKDtiTGDiGb@>j5BqJgb^Da*Y2B1o!l`CT}MVEt^QSwdx z!E{(JMu}tN`e$Wq#P3oCB)*j1HVb1?pa=N-Kdv4@LsZ9z%+kg*AGo2#7e`avAHK!5ofN<1jAQR>jsMGp1R#maKMM<^EYCd} zMsB$QV@ml`kb6H^uQ{3gBuayT$Xpe?oz)-ujD6DkH-Yb49x)%l`GO@n?BAx;^Z0}h z&i|scrGUc9NXZ)~gDx5jpb`c6VK0MG88?bCGrstt zzehiQQJwU%LEZjacWKf70y&5ZGjS^{S2^DS0G*BwRwibY1oG*xI(Q<$m7gB}ZTEJ>PKKh7a%D(1E z*gpikCWz+Tb)IrW58f}JBU*k~yq)O?(*k^(mFQMQv5hA$MJnfC4dSP zYlVd#TYUR69Sy3<8x;2A9DMTSYOq?`VJ|i6V(7@6kOO-~&? z-n|6Hpj-;BFTr4x$B&c;@?PQIXNPZ^N6)>Vh$N}Jy-OF%bhs9otZ~@!H{~<@r7d54 z|KEcIQ=_T3m6`WOssU`3f5#w1+aO>s5e|BzIsBnq0(2;6mP}Kd!-y0(`+gD9pi$pU z7*$|F<~{!BAg+i&(wM3wJG!5aq&LZnsQmCy#@ZLmmDWS1bKU8K47{@@d|JJ1%pL@` z%S=}lc_!(&S3pZ(Hrt*B_0jSb(qauyjRkSNI2qO&-(Msq0sR|g_s4*{DNj8nb}B>h zJzRJRzFdz>ha-f)0&Fh4wi_t7b0gIZ6Xi@M~TNWqqh>5#t_4dM#9D>Vyhl z3lf5aRxgi)UQt1%BB64vHo*FRIX!#=@*Js&_h9RUc7H%+B7aD=2gpE?{hpNfs7{`|fx*=~$pJD1Uh$x7cE6?s1J1^!1mYhcEBpVw?M?#s+|S4@KiUS< zjE@UWta(L@Ph9!BvDP`uIc2Vr^5l&JJjjlg;5`Y`te;+XMkp?8U=d1lH>+(lFEk03 zk@bFk)>8hK%m2N=h%pHdAL#b(^FGokm7?)c+x*N-{aGmR?l-`ZUNkQBqHhoR%sDn+ z0w3{6%$f)INKAT{lZNms+%j`>uvQ zS0~Lkb@SDIfwD=U`Xr2xc3Q&DRyRm~rm8+R|4tNr-Um(#miN6ug_JD*3$bYpAT9ls zK^g5?UwU6KN^U$h1afakd;xtzipKPxs^LP*xq}`QuC}HMp!@8R>YMg>CFU4it{3m1 zFy_gB==R#ONY?P_)lw$rgO+YEEoYa*9#q&IOED!ifKcCIC1y+5D{df@3JzF@Kdx{^ zGFOv(J;gzp&w2}c{=tPF&CM=0X)h%Y5&~Hmwrg7HkD=1cPWDSPN^$}%c@fKGal2_8 z2muEU3I6W)9q8xtA7^izFzVfb|73N*_HbWGTfi>p4hr&C%R0_Gdp1$U zy>QDFH>ts~ziv@TSslXnzHJCffS2I1CIbc=NpK zgq8Op?}rS;UamWwe0AJc$SKiqe{j(E4XkrHQ~^sgak`Pw8fxjD{oq9KZMs{CQPJbK zjG3)2C9%&r44U{$#u0-;U*bmg0|tFsdXgwi=?9Vr5X3tE+>8vu>fABKuo120!mr@74Pg3HJ=22dvw9IXWt8^fE_lWH%Zb~7WxAzk zKx+8RBJFN~uqP10Bjr$1YquOEsR4q%c5AaLFtn)T=-1p_v@M()V^W#JRBda9L__Y5 z8Kr^^+T0zTw+S-j?L^9i3S{9z+C3$H0pJGQDpi!2`k55BmK~d2@K4=ItGM(xJ~kkxHvLKyEmF@Kylo~e+GPT6_Z>pho%;gJOCE1_=H zU|d!McN<%~)}#t->K8o7_2`-si2d}KCc+e-2XF+0E)$HCKih{F(@J4@tw}xSn@7b# zE3{$o5O?t8wL#i#4RmGyG4YrKA`wFzW^z7sN}V%mL47<$erZ-6DYZJ7Cf_~SIj-|Rm1IcN@4ehiMYA&vr#zIo}H=We)gA9|h$gQ@3$l&fl z2rroUR$7k#S!EP3kfBW#G&Bf>TCu4pf$gJR0wG2@Q((b@BL)uSXwYoufCi_zl)+w9 zml8s4&6Xl?)%R#E_J8g(78r=Q+;1G@>4~a1QBQ|K`x;w~-x2|Gmj0UkkHvi9uXGde zlI`aflea10TpT>mNzyOLSOUtqQ7c z2ZQv#1>L^(YU1?8)i#y-)}AmwwZBr%v>$2|)+G)yfyYLYxfI9-Vx_!8m(ZbU(X(4F z_owmR-~O~2#xH_SVapvegn_vYI#GR;wK(F&`~qjX*sr#|XmkrZ;6!71uO48qyo0$SQiqu0>q-;hHm!W_s+E!WPw2U{pGNC zsOmQr4>Csrz^4G_s}HWqa*{Pu+S!PaEEzENuXiR;>F)0`IeEMf4N^l|;piE-sZhM& z{?Uc}jyijUBHm$`^wK|DBTweL05AxY17Q#AhiY2a()Xxi+9K=ysddUhnCbAhjqHbOH z+SA0~Dcim2citEE-t&vMN&^0jhv*2xO_kX?G^1A6J5P!60nxQy1UiwD3=woI9(t1M z@YEp?QN&k3xDVW%*}(H>VWM6*ka#vS{Pf)`Hcb6UNGSD#rx$LHtG)O|j1qsCZ@QFS zC$l~?bdfT!Dn#-ZEEUh(a8!8E7F5r0Sgp+dX z9Dw>fZ%j{nZ_$=TsIaWQe2JX>zME2=n;PEQ&rndX!nA>D_PxDv6Joy$(yPD6WCos1 z9lG6~dSiG32bOW6pOh=XH+)|J;Zc!Y#sp1e?}rKClEaIic$Buyptk2#S={09 zRh0{?QA-?ie-T$@1M-!HC`%yRhR6RSPD4|&Kw@plM;&ozYT;i0 zpX8rQv*-skqM6Uc%CbXTYPctAa37rUQ3JJhn2@r<-A8Y;rzP1pf80T1jo!xSwAhDq z9{zx!U!Ra>A9nppurZH>J#&vTfvQhGiSlK2Pgy%HJV+0t1XqfaKE`)lPL*8YNuo#kJhpv=kZpUpK;GBk?mLfzBb zgI^6x@LC;$eC4^qgiNh^vSHublM3bS4VG~ivOO&_!of6x8{!~26md$uQE-ogX)q81 z1=*LwUG9dq;@&zkw)~%EgFj11;bq`q+z;-dViow(oZcgx#lFT>ys9aXksxXR^7r(HHY>H5K9yfXdp&M)#Qe_<#`ia!@;LtmNKupnJrn^bDm~|2@6E7Q z!voTlG3L>P$sFjhLk4>A(DH}FHBk3JaohI5tmPc~l-=o|Wq~nnL$(f-P#uq-$jN-E zeTs6Zy6(6XO$S-$pQhW~)))Ajf3_bG>doc9;^TvHNB5(MJpEt!GLU5eQ9JW8>fsRT7FCgVtv%{u z_<`VvPq3URXumDFkCM%eRX&f_Mve5HtE($;DH$wCvJp#2%j~!pjB#5_48!$QKkmzU zF6Omg(FIFxioZvDPm_qLPUQcOv~Ok*!d{7)7MJWaZgcZF6e$(Yl+ z!|~mh=BzhN2not^ao_Y%=JN1O61@sQ7N;;(^A=MAIRTas?nvG8+*Ewl2*KO|Irlkj zTR|*0(BjL(?UGpZyS~>HkgV_jg9oZm7c+7yzQ_ELNbx~Jnr^a~T-?`zMp=23(T)VN z?!V%BtX7Rzlu0$ptrOXV^mXDcNQaEFYw#Q7!RZTcKDGTTY;e28RwHY8Bml0{tZ8R+ zpxG6O)@9dCHM*_%W?L1s`Upe_fR2`q(1a@^6Wp$PprwW8^#usCQg%+<2kw?nflIy@ zt!#DiH}7Yc@J!P5(NDn; z(ScQ7<1`S*+;p@`xR-z`2Ddds3}mS@`Dmfr<*C#89FRm5 zPr7FG{Sh5ynD^hK5R=NeW6Yq7F_K276Y%8280Qt`_xfiAHjBU@Sn;J9L3!N!vG}*7 z$-^rWiV99N-O`BKtg@uIy7yW25!2^&&#~?oW;#rx~kDF7hlm!(9Au}lyv+gmnlJ~hpY9dNGr$pf$4bd-b z#Gf28Y^bt;T#jqq`*LF7go;>X*JIN1z5}blYz6b;fDA&QZw!Jvd!I!JtZf*5f5+qm z!;`RBDd+}57ZN1*R{E;Osw;0p4%h^!B=~RPGU0#?ZjNgC4w3Nb>$7$-PWy+eLaCbD zzUlV3x)j*{HHYve)}5kYk{&rTuY7bP%ikV`7+U?RQV}7obL2XSO`d_V`8Zc zXWj+6Tu(+rs6|SY@Z;$r8>#wl5|%6{&$)a%gfL~a>Jxpuv9yi4jYK^Pd%#ceJgTo| z7<&+@O7C_KD8uI|!9rm>hK-ktD~gZN5RzMy=~cc(pZwbD1QSCrp2C?i%g~k$v>txS z5<~=1+N;(r=zBV|Sx!T5zb~ZOvNt&K35namkthvvp8|&YwQSB79VbO10f(XVUg z*&{T)oXR({Y+%QAI@bNQ%vUC-2RmQVO8nzS6CwyoJBd%6n;~3}k!Mvp*&ax=58c~1 ztKCH{v~_g&v$`~1i`~FSgyUzzI$%tvM#n)I|C_sey+`eVbXay};M4Xf%oZr;1%&9; zUVuS7zIQ+y4fdC#Ok-S_0i^ZfsIP}#Q(T=6@Kis2P#CCM5U`>ja^_NRV=<)MQH5h1 zF!K*T)sii%c*E8MU52I<=f9Qt>DzFN%oq9ET)sdX}|^bC+BT?Z?J z@FBagQaqt{jDF9mt4w{t-U0JPb^NL0EVSy)GV_%M{V14s=_{u>EFs5s zQIyQR9dtY-e;P1xf=_F*uM#d&U*G;%$LnhmceQcx#Yby7+Y2Ivu!O6D@` zAI9_pEcyh-sg}jED3xfCqaBqwf5)?qs7Dg49pGn!GR`x(G6=!uNrpi(K!B=QF~2zk zM~N|8EtLHAp@TvQJ-krzW0=}{-S*&(lJ^G<3Q?Npl`o&MFGkK^AGfv#FtqJ%oSkw1 z{X5WgH&rDuGBPb?&eZ-wV`I1EzFN@0Yli63r$t>!W#sbnC;r~snTG4k&FJBr2znaM zv#)e>1B31?LU7SYoYmBFL^`Dja0=nTKo)Fgwlt%RNCjyTq;Fa{r|~i>NB0!w+ZzKJ zT*GQ#PE4yfI)`;>L=m~Hw6c@@rjd$bC;qkxLkp1u`(mc>nAd^T%MMd;x ziH^?a+)RqG$>(T4AeMU)XR+X2Gi~F}C0+okDnnvT*HYE4l^j!{dg9@rwU8h5bf?v7iR-r0;s^9KYWeLV{6V<{|uNmdf1^w4%At#D~3pjd>DyyrF#} zrq$xLS&CESniQueAj^+4*RF5;pOH*qv+;n5YUmW&vEwSj%T!>AFt7$Aq^Kb%cSh42 z_RH}LxA}|j(lfS2l8LF$;}fY&`8!Z6dJbRtmp&6dya1~*4*K%WZ0X71NxeRC`B5vd zj|GVjb6Re|Lm}7z@3&F(DGUX(9vmJHQ!>lQwJyt`fFQOVrq3?JnV|(^07ImSMhHO) z!wWfgMeW!U4hj9#Xy8ITn9U=+ZP)i$p1r}BmZ}W=SXfwD`HFVgo;1r(-~9)RY=zQQ zERkQ7+NATzmDcUoT$r>-WS-M*}Wf3gUVu})aFmPASUwB zU>yxrqxWW%fAnDTX6c4QLxwj_f`52_H@c6yZHnDIx>=2s4VAfUcYXJ};e5NE^6NkR zlA%F^l#m{f7PkI#Z^qkegP~@mHvC>p&Q39LWPubaR);EJydcE*Ssb`_9litHGizKw zheKG{CWw}bE0oH(?&5scwf57BaxG3;V6uR=B^U-xigWiXd4u6O?$UM93y8CSdn?dU zm@$0K`>Dv)-r-BQ?CJ7wMpud`+jc3e^rHviEUN)b9?eo#;f-TjV9ySo#-pn#vy~H#sZiZHK{U@{ z1G08c(l!+?E4F&}XS#2ba&NlT6!a%6@1Z-49`$!2Ux&erAaDuHCn$r7yIhc#a9e#@ zEpX9}%dS^ZDozlfTJybIh*+W=23A{}o24OzU;kdnzN%KN=E%@zjDZ(TsEOS z!!K%Rp#1hVcpuO;@ceeMH1=RxTTSu^N$Ag4pHmwb!;OEWhmW zV|#TsiP=uWCzO8vZ|XLFEa%r|yy(5RosYtU17V!f6YZC+!$JQk;Nelx0^pmr&vlSS z|JfS!n3g9rtbXJsfp`lKV)har#`_K|$zEZqUEg0lWmsb?2UL-b-%Ft}XUPN}GOn)J zah#!L{~H-OygMsW!t%!`cS?vy+I;i-v-ZANQnWR&ZtirulLrU(iEYgu2h2O+&_?-Z zj~BDw^lsno$%Oe`S51~$@WVFOar5XuV0BieU89#h)P|r{BUcYVD7OKp(;~M`VWEkG z=LExyLThn){RVmJ+VDAh`tvj@`j5%Wo<^mwJke$q`ElnIgOfg|3gT?Pss|t3^^}3pR)MHRV7~bkCC9ts+Woee^nqmiZn}->(wC zxoCZ^N8_j)eE!9{aH@;06A3bc6k;^ccMRMQz>WMAdIrZeUPeS95#}GqXgr8TTJKTq zA41#e8I5EuH51XJa5RgSa1o|HokHg@-$;LXzSIFKjz1bDm3B`I*gDF|7qo57$1KuH zVjs~Q6mQ7Tgu7@b$Cac4Y~+oc=F(dmePG$LE*4%;)r` zZNxD)lnyI3Y&6Z7R&E8)!x*?Z2|K-rtB~;km#+GrVWotaNS*3yzjluh-=X9A> zm^w*43?8qHL=}9ptFNPYi2>f}9*-2w-$Mc~?v=>{M~$#PI#IgX4;Lpa+%^mNW5Byi zw=}9I4s^1(twe}wM|>5A!?hleg+xW%twb2FI=V8Sc6b&52(P|Ds!8iL|ayy;^C#%y1!{hJ=Yo@r9g1y z-_S*0tCzzLdWx9BeD%0$Gx$oHE>slW9vx1V+m~#PSI;+jTvQ$H!oD~jIMyC>n5}U{ zO`vL;p%t0<6q){7CcLP9+&_ts3yTy9*xNOQK3CUYxI0Bw#gdY*9lQ-Rp%4DGBK1yu+FZ3CJ1iezaO&J! z^9`*<%m^8qYZ=OsVz&h08P{;@NBZ+Ph|5F$?ALKNyHX3Yn2;(BH4tN%*3`u4u<;ln z2wN?g$U+knI@#zg`Ch@~{ZuO$31VQC#mFn>q5c>va+TsfkNi;y$^lOhe6D`%|Ywh{0276PGH zX~*AYu${}!&Rh!|V2h0tCJPIT*E}w&nQ<PVHs*)IU`Q;D`8y^65BOF&~e z>QWzl_IR@-21`J9z@5En&UT|7YAj0@@YMu6n&@1g(fga<&Z^Snb$zkpohOQXU2*d0 zSy{rX%x(S=LWuaM*M~hdm`(Q0N6!I`e!kL8yV!hoUa;YFdEs-~WgmL{=lM_xT^iDj z+!J%>tNTqaHhpBEy+5p`aI-k%a~*nfJ+y?MjCIUmL3bG4&2_&;w?Bo{f3BTYJ82Qm zF0U;7*QTGV6{_#UYzUtsSdqx4H{ApV2}Nv;LkpV6_x&3V$0GDDME|?BDyYA7xq65B zFZP>|%&_~3h(1o&3G#X1HNWFhuQUH#o~slOoS3#sfLjp$+Aia5M0Kh}n0-Ir;%PTM z9r3q(Jj_fQsh6N(xcAmVyI-Qd))f6&oFxfz(*(rrVi>0Z0tYF^Nm&O>h=lRlB3$$V zdeG~@4n}Sr657tF2)93)TYf{L(>@dIUb@}%+?az$(F=>Gs>yaG{DfH#XnT#UjLcryGNE0u>4hX`LRmWUQIAIzgfZIt?IKij1-;`5yY*dPQ;WxH6Zc(wh-Gy@IcTqF>Xv9-AE`4adx zf2IEneJfCXO9%hi0ZPl>w?{B-#Y;!kj~4Q{s32gqUcrUZzZZyxs2hPr0d};pVLCI$XlcV}%P)I$hbCK&ZOf&;X@~qvde90Y!U%so$e2A-stf}v zCByyBu45D{H(>;$LLM7kUJ|w}rsi(yY({W$vclK`<=<7wbk>HqK?qYJQ+$GNOdX+B z?^8M1$-sa3^%)zoecdeCt@!*wPfj~3ngwFv2iW|V#4;W=^Lc@K8yh&e6)SIOSYxlV zfaQI_+N`$Ssk7Z?L0M?}hH1gn06r8#klLtlcCMSn>(lF?Y7f^v`;`?6J-|>tpp9wkCw}c9NPt;}jeQ$t5MAL|?#%d$cM3YpE0rc0`AuwKQ0 z=*ygkL*GSQ{Er-)^l71z{7WSV#qYM+W7v@U<8ly-k9I+=uoZ$**Zq&hvPY^)4-Q*-fRSs~-8U(`mAOx0Ru~lx8zpH&F z-fDIqFzu}IXN&8yh{r;s;r^0Vn)4?`0SJy@6v-E1|7|jA^=C0Us&7W01R-$=y{~vb z`RNML7}@w$K9DM(i<9#J6YqMUB+X%>dTRX1IQwe<2TiYr;Z1^EX>rtuZS||YCW&VV zR0ZEnU}U=!QoR6olnNFklaR~yLb_Gw=wT|)kf;PW2HJv`7oN}aL6uVAP(CU6xM5ME zClF%fEZImtU7vpqoGjiRMKX;~yjht~i;0P|XKbrEwlNd_Lm-mB-Y7>4>_}_8`HGbZ z#t)u2YWk&5Eh4hxqIbz;dl3u(Zf>6Yoc6q<6LH%W$Aa-qTMLTnd(aKKoOdFuEG_U*qnySM@-PF&+lzR0(mhY;H*io@47}4=!|Tj z`Dzb9mUgI#%9tcK`+DRAsH5?WsAw$A1=*wzngfJGEE`IWNFda2%w+|9nd^-2(2$XV zxuF3vAfu+{8f3dlOJ0Off4+gkZ3~afiBD(G0;@)vwF4>eX=v( zvwtP1C`6-mGvK@mSTU8;WHde53nFm&>U8v0d2LX7N4!r70sQ?R)@j(@ zM+Pr`6g06UsY#1YJIUngS2ChD7OA_OL^434+F9J z6si8pCnlmMugK0&P~Pud)>c4z<^vO{UL$j!1~|g#P#=#Cmo#n%pOz#_T3iq0!7=#E zF^>ANENbZ!76x#+?t^u7@>^4QTvL_n?e--z670j^6 z@)xrkg;z%COlR(Y!0M-mbE`Aq8V7^^091da2*NVKaJYV?<#osS!)kZH^e2rN=fVBz z2fV&C5=GVtcOQ^MOmr6`XSM?<;WZ!7*#F{nt%69H)*5LR!)y9dY-ui`+_*!|G`|Ne;741rBRqzOOf(a1Pbka@(2qBi7 zeD88^FOubXGtC)d-t%hw2-JXyT`twgdhF%=Eg8bE&KVUY3aX{LbpQ}Z@TD`y-a0^gP?|8CT1N*j1ilGYG2XsZl+$;Ns?wB`5D>hD|o2nG*@ znDU>Q)!|Jb)ZxA}5f_qNZdue|G2K2F)!k9T$7$`x$; z50{dEax$ZVScl}RkH1-)#Q~eZ|>}6)go8l5(|LvJN1v= ziF%&e?RGVUVvH+-i(lB?Hr^u{@TfePNzT!hdO>rSHqJKy^=C2knd6yqeASwr{zwxKCqUwr?wR%n9k+Far z|CKIJRvPyoLM|6h*-9*Fj)?SKp0k@jzOv)KxRdWm`m5~9#NZBzM0Fe3B8~JHeqLY6 zPK8uNT7vlD?Jv98{b&)Y-{Q&$I^&kj5eqHhAnggYn1DzKY6-5IDcWu0wLaz*w=>~e zEblh>?KS@>j!NAZ5F(JD#>$)N>7~=#Yl?e?$T%L|h*#wafI6u{%@>>H^PZP`ff?6l zoBe|e;?c8BU-?)Am0+Ch4Ou3=)DXs@7xzJ2)MWumNrmRe6V;ou%KPfxvNdABOiy5Hm`0CaVPG>V9KWSkbWx1w9%9G#)yH#H4Gf`#z%6U^iH<-YE z1aatA!#3XflwjdhD&=t>FUAcPAsE{lE#o=;2+Kw_Z(ZeoS&TrgYh`uYjdXim2>gZ8 z_nRk=wMg?iT}~eq7)u}ee$qEE=hc!V2p zU6h6&8A6ff@kp&QhtNlai zhxMQ;{J+N=X{J1Ve|Xquv6Q?B%%$$SYu@X4YDe_K`bS2i$H6MdY3Scv>@=U6j14DU zf=YhCve(|*`dePUK|S$TM9{Kz)%SV9FLgXfh&;-C8<$}mmA|0r_|Z>>r(bxL7@{x)FVJ@^pB9QrOO`-aN~cvGYRP~`%33NyELe3md=AFP~}Vrh#< zXLMdRD9@h&qp2riPaWvV{pT=(>qsz8FGmcCdll{pmDa-9TYCth*w>AMBb1mB*W(A8 zL(%%PJv0c9VLkx9kc1VG#SnwvI{Um|1QsZPlgD|&hHWZ*xs9(1@DEw`@`B2vDtU!B z)iXz4hPIa#VzDHsl)zQJc<@z(26QYnkM9a0k@0jub6?9VkTNYP6#Dg!WW9WwB!5S5 zVG~2of)9fDyXnI^JKn*RsgO6G9ks_pSc_QsTVrw2yZ#Fm;vhGe|Cc!n3vb3BTc|}> zX`$gqIo601JZnrJ%lRdwwCwo^^F_$>uYfXL&3RuF(iZsqE1X-T!}-{5lBzO7GZ!I~ zO{f@Cm#F;O#K1l&zgv=`oInN~D*&d!r`3?pjG;iKd^3j+Io3XIUal&WeNoP-<1P?b zj{huCT}-cAUv_5t4F#9SYTYqx6gjTAVBt=n?n;CSoMGjM#`=BH$0$&4G7}wu0ed}! zJj6>`su%BAvhH@b@qE}gL?>oT!;zzJLBX4W`Kt4;eO%Z)0LS6PoP!=j(aE97Uzoj6 z(J-?W$+lpBCh_XEYwA;xTZ&|W z5MvCuaSLlG7cxywXx5GV9NaYs?w-114@TSadY?mmjQg?&?vV z1{WKK!*>s1NnJAVt(JcNbnP$Yz@}2ZVO{6>gCh?Gna)Wvta3OjS5Ty3#I=#2gN21N z*IOZ#tt7?V#>}?Q(+RUJ(Szhn%%ijIAqtCT=lT;WsB&NB0|uK1gmAIuk`qF`{h|G> z)>9n(`0mX$FYz=YCg=+jnWa%C*S_e2Oie$Bx@2h%InoY+v->iyNtM$1MolJ+1cGdl zNDa=F;wNdRn`$}IB{Wm?oQO|53$`(%HB9qSq!B7CZjx9wP~9GLOHfk)=i(I}dp1RP z)~xObIye^#j95^rfF=UyXm0l836|3nb7kt_DNyXU6n^9q0N9Gg zA^|~n%CMH@6wp%zm~RY*?Yo_mGEE??Zo5x+&`U+wR?9EoX~=)ysa8B5^|b!om@L{Lwu6PkCWa4w31z;~nPZ zsJc8m2e#@MCkYoxD$wK{gcR@2?708`6-JrTesPH4H_f6!SZxt_$A^++ZE^lQk{|g2 zmjo$Um?|TxesKV9W1{jrsQRnOY@@vqOprJLKK7VE;q5cF|5g(A)m&y!K-?f3Czj-y zSs9>U1n!@t8_`G7Lbg$A38&II>Ppd>l~^0u^5I~m!=z~+MVC^PlY_mp0dB;%d=dok zVgAVcI)c~p#S8vc<8NCNU04Eg9BOFr#Pu8)_Qk49zB}=3C0DGaK(<$H5-2~*D{9eEDL3)+}ZxZn|JP@B1 zU&tvzEuH?nXPiywWlBpVzkm(VL_20ijffZefzzg^eT;Y~Nd0IBr1p#R3M-Y_v(=^X z)bFo6`BmL$i$mI7Fq>y`Z|t4{hwzV_=?@bP9tW>yIj%vV`W+gd(JQ^eJjt>KOO4pfr!2bA zT3nJ~?XElMYU2~aMoCpwF-G1Pv&`2zBkoV(=D@>sAz5>AW4%Xss!U6bglR-cYU~xe zhq$=EY^(JrKl6*LPw1PDRkwYA&7q=@w{tO3{Ptxo)Zco>#F+=9I$W>c$)q(xP=}7!5>#}lB+P&`(FTDc zLZG8rdRBQexOC3e{|^1b8OkoVlA-Gv;fHBD2??q}anjLulnzqXUJ@4N)vp3#*PZTx zqZ-2(2V8mFWu|0f`8(oVB~4ei8T@;jARQC|Nts4>TVDLx`_2wM$hFQ0v-hY`rxRWf zUvuJBMQg`N$hrdWN^*Ovq`n8QU>Vrh2J7y4?5`tF$GLhwAV4_&W!;~bigCi|Ux?KQgcAgu2Jq>71PMJSF zxeca?JSLubk_9Q5J^UKCjGjFz8|#;@aM8!S6Rj5w6=+u<@r$Z{H!UXX8`MJwbYTpu z?&Tp{DOv6_0AQa?(xCGHcwLWLHM7M&#KAV4eB#D&&-ikIW=d6h_9mMoLu6-<#<)L6 zR4q|fd%(>w{9&Kag>X1M-J2=BvoOr2ufTV>(o0FgSsq?NVli^^S6U2`}&Zo=O&0f2^i@S6_;5VB#sOt%XLhpO1aq! z4Hfg^yR`a$DaH!TLK7!dPn!%Xc(zjJ=bHS9_cfFEw#T|sQ4vg)?yHr*k@OxP%+_q) z2Ld?(;M@?eYDolA!QI}@jb>4W`e=IolbI9%y0~v2F7)D^ZQ~{UPYa+O%O>?UKkw|i z&FdyQCdZ^VG3Iu=;PSAV^_`nVx~`6;j+EqPQDI`mRNI)Z%YU->z~%vDlQ$z;+r^2i zfuj1vF?j9e3v@FABTAKo;0y3OxV91bh;3k zRrDd{nKNgwuAU(j{wC>}Eh7H$mNavQxUi*qXL~69jYt8Aghr!ZNw14BwBpIBK?;Xw zbT_AfVr0O-?4(_!6La53#x8BUApZl7GwtQxT6uWr@%qfWk{xcb^Wp!b3r-WJA79tv zCIm;RgSe9T4gIuz|54^-szKxHR0a(~TT#8$U@feXWDBy+^G{Kgv>ZiE5&%YNh8)qRi&1G>+K>#pHY z7cYym%`S|AvS3E;YCB9uHgU2~^0*Rq*i4XWqcb;4c`gVuz%QK2Xd#HIdhQ7|3WWFF z!0N|!6T^(K%JOkhg5N+kA8M|Q7sH%9`&T6CT;32c6Q`x5Wl73*9gOx67!YJc!y#X$ z{u1y6N@*W073z3)gPf(jmie2U9Wy0;BU8aqfM|N;Bkf<}m#Y~)2uv||ra(pjExgvP z7?5i4Dc$?&MRMPRIqXWc8TUK$UTDq_pVt(Z<+J`-`6m^V`I|!1#6L5t4tJC;zZYZp z2z&)LS|%?HqOft4xa?MZ0l3>1FiJ^SqQ;Th72)tWNy47FYO7Uj=fVJ+$Nxa?{~?IA z;+>zIs35h0wONV{&GzSLwS;)q_Y`K{rN{Ev2qz5pH=Mms;&rEExQbxbd&A`wb_-9= z!-TBUheZ9BW}uJB@~<88gBOf$C>U zk3i*hdR=-rA%*hA=I3W0C2Fqy3;A+Gzjd<6LQ8r{Dcc11aamRX&ZjVv;^9D_@IBSh z3;^*2QhXvlTJ zZpUK&Z{=7=fTF>LEFOq@kSq7~_Y`q};Kwj7z3Y@-h*j78S-;XJhT3I3#0F;;@~kaT z2u`6vwhMiNh-|&k@}P@Qf-~9|J+Z5`DHZ9 z03YN?*rS>Wfbe5&i!#U@10ogr)tQu_UDN@t)0bGK#hmKhd>A0x*5PBZ)#!seb|3u( z2w-mEpymPtQJ_))ir%!Xm+enK;UTZ$(JUR!PX~mrjP$qvnrZjb02o{?6ky+Pz|3CZ z_tKk-o-)V@xXj1_^kH+`UQUuVg#F=QvJjRp7W7l-uY_ehc9=hppd={N1LLgl1x-+m zyqet8;l0jJc)zLO!MG?t_sNlKK83(uJqM9LU;!@XY^(bd8hR_MACa_3xx9P#P3{vt zfU5nyzLDm+72w+t_Q&KJPeR9JRo*C=qnG$B%3u}^pLm4{RZf*NlL86x3y#WxLK1CU zGfKV@RWPf2stP;RTNFJN-b-r4yoXt+4xv?VV{F^Ckj|)@U$O3Yn+3p*qGfZnfRLw- zYcRx7m6e4L@g(jqc%c&f}#A&)Z!Mq#;^pgazfIo}3Cfo_ihE*TzF0zG;q6Dj}uhdLhA_!kRq11~T`0>HHHZqd_ zHVZoVj!ijp4e=R=mLb~^EN6fo1eHR4D!`jbhT~I6EVXDnL4jC(6^EgkaMwx*Vc5M8 zcREu|3t4{i0-{x%g;5TnPbFxqU*5w5J)+ZbU4Wm3y|tO!4q?|&`^7Ie^_M=vz8l2f zeRi>Ixa#j9Ql5TvW9}?Q{PD0}pr6U;_01CmzCvmE_0`y6zB0(Nd?zHjW7lIq0GWS( zBMh}@(0#^$>{>wV*>ZD|`0iEnd1u-ceniX{rjg;FW%R36k&0$zkuSVj4};1S*_`#O zw|ODE9?4wuGCJ@z-@bioI6p?xnfS7QfD|VUCC;{d>Qvt`CUf~u7%uq2&CjSFy%3f0 zCaQVux%u1qlQPVgJvbq{c{YgnA9STEFg@J@3cZFqkR1b(VIA?5ljyr--FAA7)xyMJ zPYRMI4BW#smgS86ZEa{Y?Afi@99d&0S3%@Dnp3p8_XJu<{3k-oh9oJL!f+9dpdYcy z=l`SXtD~ykqHceOMmi*<86e$$mmz{dnD;EOe;iEvA-^=zDo~4(1y4#} zO$$UTg8I7=?^41YD3=2ucN0rTuZ8%iYM7N7qTSH0d}rm#Pa>rr16L9^hT^%lK#Dq&!UZ48&ZlzGHc}H7Qz#d%o3uAY0g3 zN(nLTZXln8uI<37-jBnm4UrC%zAsxGf6v5>;(9gm0{xzQwhx=8nrEv}*^UY@`S zBu$XK>g!KoY1O%RrT^xm-X##p1n_9{W~Qn&rbbjBw|AX5r>t+-O}4ZQ;7vQQwu*_a^7JRa zjiY=rDt1Zz^+VW6UnG6X#|cE%{f{vDY9F7zz=!yafFN-hjmw=4$W1PPU!`Y8*;O9j z4ttM9T@m85QNSZi)nL86LciMem~R!+>n$+4`D34bOu?I0wnhOEdt`!E97lm7_MBI$ zOKp6fwWqtR=rT|Qte$!ZzD>EktN7kqa;xW+5VTWbcL?MiD3_>i&tQhnxL8R5Gnofl z?hm~Zrf~4gRIwt52lcAwaIwu0VkZ=TtC=JHU}<1ObINZFB2Uff0~q z^EvW9PSGTMszDF0Bo!S3fC=J%Xky#Bdgn1Fl)B6G5Dof#kcJ~$Bm=`@DO{eG-T3_% z?4BPVtoeymxY4KUjeJpFSl(~ntYH8zKT3MLTH6DQFIag@2DH@n@I(&>L8{A-a`Z$9 zEcpdi?(mz6 zWHLLS+aTj5Bl}QT+}(%yxLRcSfAo!jGfl)Bj-Gm6BR^ox5cxzA4FNAUmT2Y|De5lug!B;o#Vq zubXn%VqniCL#5BXP*Znn`+zi(m^uaEIFqIsJb~pW2}|L&a0Wia3WHLAf+EB=u+Pbh zT>+1w(=_6GquQE@?(csN%d;h9L8&w-2U6_G?2vQTArm^b{^!{4sbv~;vFIsaxTH&hWvtyIx_QM~iaz$-54c;xRVAf6sHp`?6L3qv@f6ZN1>M|8e};*+8%mzm`rt_ur1Ev00(iv>7KuD z#2Lh=LdH4|yc~>WoTA}Tu)`#UfAt7EZ_^7JoA5k^N2L4^l&7Cd9HQqOFk9T?mnq8I?en||%^Wf*0f63bca8l}4;MAV`n zgRhh`)eaS3wl%(dqWlzvT8>tpyMmb?6aFGoJJiW7$Q=frzrHkt=5x+_f|JibzAP=U zhfi7L5I8u_t1;~yAo>*b^;SQc|sj|ZIVE(0?xYNRJCy#3y~UCA;-zjpuYO90_X;u-I$D^ zM*vmG?(dfMVQl!ZFHg(Rr-sAVo~zay7KA^v41V5wLODv_|Mg4Br}C*00b9V-M)Lzs}1#aLP32YRMh^!b;# zctpZlPnA9`CgjgEvon1Q3`cLP7`TE}@v1<%vV-%a%ubETtpHm{y|@2?fv|h~4#Cm| z#dYmzC}5QjX~z}fM19pS{Da?!VIsg5M~0+y<(P~R&A2eSls4&=yIF$>FyYV(d-W1W zy#tXluL!OV>G~NcGn9D@1j*9k9_44+7`jY|PmuRw0aI`Rqtf7V`kjZe zPvzZQn~esSiQ?&+QAKNfZQRBS3sFw0eZMonmx0X2g)%$n0ZuOTp~44sSaLS=zB@Voe+8fbLV^#B*6W=Zp@{X3Hh)L%J662VK)a? zi<<5{Rk`oxp#>=nbMn3upU#s_sx41J)xE!{C4`4#VVVkL<6i8zjbDrX^|sAs5EP0) zW*i7%>`*VkP9Nj`gcp`8y!%at7xO<*YbbQ@ctRK*Aq?<)!vD-%kBZl5yZgVNq3&%U z3?O<-iMK={ER~_sHawd6WE2Y`)VnH7?_!pldclwYK_1mSR1jz98s|#9sNw2m>PA1f zO+o!`!R}>fBBPtOISz?4U}IaJ5PMd=Us(dEEQOmBDeH%mu)i}!*Iv&BOnjcA$Wq03 zuAUYk=uBNQD9~)=WGfI9tO5WL)(`QTd7*_1NvVEv_*~Vz5?(j;M&fituQ1_T&|M;D z-6uG|y`4{=Y9Le8=k%`fMKpGIihJ`U*z=n}lYkQ&bfeTiq=Pe2k~8ueK2&KuM)kp-f>=y25Z78ig$vA%;gouH~j7QW*~5e~TdI%#VAO3F~G?KdSt zMB)25{U66ptdDfVvM&nhw+6C+jZQ-NJ7EVd z6~uqr33S!jL^W>|^FOvtyWkoB)L0F+FeHT3H611#vo1|+TXj*`gOZ4WZL?1~A_Rjg z)BTY=D3^eu!nc{U+Au7Q1&d!OIm4Xak-G;(AG#|1op8 zcOKxER2l7R7UU$tQDG+BWBnD(G?0e_-D02=;>JU3kp#g{*CHza3HbAau9-uPx` zF50K*cCGCy#iymI1?gis`@0ZYe7VwgGw!3?6UXBq`|Do)guQ)d9pgS`w5eVw!u>LW zH^{}KiZBz+g((Oo^(3QCtlikaXvClGg_l4IP*N+Xn(B;eS9Dm;~S{;yQVe zF|gWpOLx@+J9B%`hMa`U+Y3pBZND3@+Y|qry_?at zd;9MH>tye~JymF}A$rnLJ_(`>G+YL7g3E553(AZWQ)&bM&cf)iF0U|_IhB$~1uO2P zr2OpE!Gub!fmCdwDlrOntL)Q_)Y_b5h6-MD%$`9L?A`BZ9!6`#mBh9}xo zse%P#0!uJv_z-&NU0MSfAff|Z^wZPEfN8dVi*Rba zxxby?ayHWQ>|*QO`@4eA>FNOJS8$lj)SuJB5DNdI_;*2V675l}=2IoHXUu0Bj9ECc zdLxm1PT0~M(ytc1S{l(3OQI)M-dI5p-@iga;3|n}$$R6~)IqUN9XH?eJ{X5<1uku* z0Q8})qbE5TF!iE53JF+uUSJy;8?U>AsiIlYYJqs?k0%Vi|6TSKnAg*5KoHrtp-lJY z(lgbf)jza{;R9TcQ7DlyC4rpSr`%g`@_>-uM{f0ixo2aUjFvvc!0-_nI9J zq!=E}mF+WCK%aDG%c1D3Z2WKx`UeSP06>6jQV1MiHVXaKFXv8S(I~mEXD4}sE_%WJ z6-t1L8xo*Fg_R#trH{a03rtHL!{iN^dnu-Hi~xg)VvmPKl+eBb1!+N1VUQ)U4wIj# zkg#*VK2+-7`0CQvIFp|Vf|S8dmU4Jo<(#oIW_s-|^t^%W!uSGppfH2&le$RVQ&lHG^yh2oF|NC_;%mJhc9B3A9GTi83YDFa7GL zjErBF;sI0#LFp?p2jCh4++Xy-rlj@seiX1NIu`H(@>cf13)QO&75arQ*%+Wv-%+$P zf=vT72qaxNJou*2xQx#p$HP(F=NGtdeBim&0n^jlwfr_@vj$5(rPd(EA^BTT5NubF z2vn@OQ>{C-u7ivJ--v8}tbVygl{>(9nM4!U=c}I~0U6_!9Z%dtWwC1Eb8n{LQQ3!b!uco2_i|Y5i`;0$4bCKN; zOrmhS&=9D6B+9-|^yOy6M)*GVf+B34=Tj>o&W)FAS(`!*AZNKC4;oDgQ`jPJTx!fF z3dO>$<({J-i|9|($~ia3_cVwPFnr1pdo?n1w!AEp?Qe=>k(QX)go73&4}SA!atq$xC5iV~1_}-2_)^~$ zQTGZ!M5}x__-{f*U$46bxzy)rIx$(Jwdx`Aofl3-@p!7(T)w89X>xow^(4~z<#Nv4 z2x=Am%=_Sms^u2!8OA`c*73TMmjuMCRrt`;qF~W}B`;L6g){*9=dt>>-Mhv-`^dm# z!sXcK@ni2^-V0fFpMoKN_p|ac(%exi3>MYqy_fKC1CP{FyQ$^!!;mnx#=X%gFqqWT zE#Y`;Q8S`;{Qo8iTUZYs>ubK1u}dSz@kjdcxCsa_%;@ybRQe zj^7nnpqT{fdB4>xhb0Q_V=<(r$}^`z-IQ#3qA_!=}>Gx7POw zv6+ZDrQ6<9rY?Obv}F$z!-VE_xKrTCKEa?4k%O`eAyDi`zm>a_Ku^a6RCSE0%wJ|F z*ziAkj1e14C_N(3vIhySTFYpoAQn}+A&BJs=-^<4B%8L&`!Bcp8GGio>)RU$k=CSPai8nd(7p;ISL=P z5ZvuL^pwULA0O9y4=GT_l``~r zt6nt1a^%{sPAsT+Li_xBr>yRWByR9OZ-I?wDI#Kt?RdyR65?DR^*Oz0IkQel$$9y5 z_QJd+<`#5rJbU)c$j>!6<*Yq|=LYHS?}MPp@ZvwaE#7c|18}l51y8TAF-zg33OMvOC9HJ7q8lG2wJaJ{CJN1ul8=A zpVHkN?A<(TySmsCf4S135Yu|Nz9xr0ojRsMF(W|-jn9OgDnc=u z5kyhByyT~`-ryq6so_4z_gT(ZI@&k0eZ$Ava!FKw4h$*~we^6?=ViePVN{|{ z`7da2*%f!EY;>hz0Xj%3kaHMciIHzK8QdHU>@pv~vBzJzhr04>ZlrK0Rqblx(FNtE z1`9iHrGnQmW$9j;I1`(DaT{WhZ!6fXHH)zQ`1rU$x!DX;sTviGk51*uPher=Uc4Q9 zOOMUn5kM1+Zbl*@ z^A$41>}g{$nHVVWz|@AYKpo%<;x1j2jo>c010k-ESvxnOsm?t!%y-z`Rut}icH)<8 zX_{G*nQWJwb;RnOYJjzHaWT1ww?3#N=VfadF}PW^yVneiZlM4*oNFR2#lqE>y#*HJyiMM;Fuu1es)qwg zH4_XhsR061eWY>r%Jn=4{hpO!c?z+ZX)0d3dOQLDGjo_YwpDDsVCEpMCDZ#gq>24l zP#m}{oCF53xDCW}I|xzbWgCaf0o(?6KyF@M*2^wl$!mP}gywL`xydqzT`rSPY2&!~ zvFxa4L=1rdF~~iw2YV!gg&W+DY0jmJz5KW$w>^ZOiFY4|LGibYY%rA)E~I9*Xp-@k zg8PO-q+{WTl$g;7Y*woTg_1HZCR(>oGM4gS{ZrHLsRJ)EE!ft)BDGHfqFpCbD!Qee z;zN{z2=!jI_d9}I2L7IKF0FX{I7|=<;|tm$B!tM8831;IQ|kQ07L17XfgpbEP>^L6 z;VtGx+9snW#(ht4<+nLV?&6N7r0J-=qS_LG^92!p{_-Ws(b_$k%yM`a5ezd``v4ec zhru&cZQeSF0#}<<`j=gS*|!&?s*rG47#M_^w!@Gx7z?RoHe~YFa{`|zO-9yAP#W)W zWDou^=#eP~z9u&vGr`gwhEHQ3!e3P?efC0?Q+oA_UzX%C2dLPX?{`g+wg)j+B(`_c zb@14_u(8E*yK#S<>Rs4TGI%2+=)ShF7?Z~zNTf6l_90n)PGERlz57o9?ZLw!j^r4S ziGb%_FlEDqJCN83DkSGZB#`WfjO6FO4~b~Ls!Y=S;iU(&&f&@>^Vs4tQRYz=Ot+dDMbQi34 zOX!_~tY0JdzTt)^lpH@MYi~OJJ{N2wfT(53{*cPGqeig5{rm7F{sZB=-$61*_$Kb6 zLdT8W1W@=QG3sjZ+<;Y_#+ z;HX{UMS_}VF!ymR--FHlqKY~K4ivlr#(={>R1{f6!qw6KcYEaUR* zrx4Kjxw{Mj_;U%M6wzE?+#ffiANr!8<{!Jdj($^zBhc9=0QbccG0t4D0Q(Hs5M~Gf64H`8Lje$z6%d8Dr2t z9wjSRu(EgrAu@I9&><_c5x{-YqBQ6j`2gyHgtY8QA;A}qoZ~^#=gO;4IuNr_fSVzC zH5|90CQoXZ*2Id1;45pESjhrDRBf9sUjbuJ>r)qGmT9V)u?MeaBR=fJ|0RqA2cLyk zjRX|gXGPK#e+5Y~PonISu_;lsq}3od1ifYm#@|u9l?Z1jRMl{t=5u^#+7(*QcjRN9 ztqsCAjuK5fm=J}LuI|Y*j;NZPC=Jxu5VK-_?Z*>+9K9Yuk<+rE$>4UtTyo9l#NjId z0{|HIg)79&b90?vI9Ty{OYY^fh|ZIynXrBa8lMDKS~X(YMO<^AncX{L9rp6a=yJ3& z*NzPngB4zNZ2JtpSH6w;?%fNccB6abZcR9yaQV;uF)cReWBCY^Q0NROhudaRnr&L(M^{0WsY(RbD{Sg=^bFSO zPdytu>lJRqJC)mF27kd*K~w~ps))XR>VXi7X!d_+)17S&j1ZZEEobGdyqsCxf3t<*uHvZyTVR7QtV0wjD*gs&i2A!~}MEze@OkG+l)-5@2t z&>H1QpZ8oRFB|%Ff)yey!Db{QI`%?Y-Sl#Y*{G>y`5W6M&)r238~MBC-yR16Py^c7<6b~wck0LV?3z^K-=!t=tW=6^J;u+Tz3 z-*>+p-dy!nX=E#eq+@}!fqIZqzGvP!)SX66d{O4pFDtht%E5|n|K@A=X+$I$3`$j% z=*osd6NT!b1DGj3{i*K_uXFbq9-RtsPs@X3VBl1yd?rlV zhkj!pc+c3`5c{gBH$H=mp6YSbuobnI^&4~(jARw4-&VWU=r=$^mK@#KQrU@_5}ifNvDB#K zkW2&mW2^k12g!KLPaQj|__p5vLqlR?ioxAri$kf=-XM*yTB75t^d(8u9HA>ts*!t! zu(9yx!}59SQ4kUl4uZ_6%%zhb@D_w;&>#~*ufTisw%mCz5k3>z|FQ=SxUZZlo5H9q z?9Y)nfIEMPvPmdR490BTBE*L@st>D=1Tci&>Le~=Q^(LvSR9txrrNKOz8 zIwFx~UwDtYRcK>-Pd`~gxQS_>bf>^p0*dC>1_Yjlk*_+8?RTXE@l&t_CLu^x%esQ` z4>({z#KgCqJGcZJH-YL`4|O7GLt|e}3EPs_mFtyBXM2Mq-*N{twv2pt*7vy9=X&MjGuBmVuPDNWNqXlQGN z2K754vM~qT$Q70ZaCAg9J57+$H&Ue=B&eYG*%Swt`l5&~LHiMH>(vv18-b5t7;ssx z2917`s7Zl=FfA{0a?b>|0`B68 ziKp)i9;xQT!ZJ-gg&(4ssIAfzX^4-n{D~*jDkevTCNz+!9Fm_;Kn=~b_A!yQY5_3r z*K;h>TEmqK+2jQx;=;q>ATbc#^ak9v9O*_haBm8y-qcGmgU)wLr3^HX3DG`J2PY}4 zN4-|=Fj|_K0Ptss6-jO(DgU}XfQ@pcvUkFMtS?mrWH}tbOls>|ZXODvAl6mB6cbl^ zhw_6DP+pxjAi#3NZOgL9bp(YI=>_a`hH09U` z_w8Jmy9Gi_)&d|eI96>v6IHH$_%zcqS5dXeLW=>z4b2`ME2AkzUHT|B@&h!C;V`h= zPev!wcJ#`j3SSAL43z8;sSU^w9$demy6%Iq6Eo zXgQCfMcVPlDh=t*=T9t<_>o_EHvPJT?Zf~aI;4tL02^@ zFM&&NJ0+T;Q3|!*bG-P3kt2&zmb;>jhVA9=sV+F6ZQjT6bOu?;cFG&TsRr>CE|Wl% zS|fi6sj^6w50EF=OqZn9y;0Hoo2?eCE0ZMf*MWqS!#lJl81%M+LVQIoYYc-xLWK3X zI{V(~@3hfo-FcaKnrxJtUfy^_<@@sN2yISdItj|xa>0xpjO4yoyb2nMByywu*ksJ zWzP+oo@Ay~3e_4ovV89!3GOkl1ldP_vBz9r8{lDmAa= z`G__xkkI?Eo>sc2J(Q!OzbkJ~Pb<${w^fIOL7f)^LCdNDX98Q#QU?LzPz={=*xqat zwr>4xpZ_3F6e&XiL^=Or)k+WD#D$fKk(mny(K9BmRje9%V7$YXdR*1GHgcpo>-xjF zC5hBqmeD7emHs{k3w&Gmd9v>p)-1sPbb53ldIBVygpMpS&H$2$kA3lNq^T|m6ME}d zJ9cgRVBF?^r>Z`lnR29opAhiD&`3~2rkg_1;A4Ucv0tTUg>ed(-1`|&nJB1vPZB0P zr~>;XBPKUxiiM2}AxL$60sIV_xDp3iLQ{l)f8-%<{hp@a9-!FI%k_W&Osj|iN1u=a z!-dv+M(ER;ZTkhcd$X; zuinOIo8y22l%y*T&d=og^ zo^HnCiy4$n1xgp;neFT>JxS9THk1SbuPNeEwU0APz$#?Qf;DFky4Hr+^^BUYLd?^P zi0D{XTyf#Edaq+oj%Kv;y!9?nhB*%9ilct7rA9rZ=Pg!+9vMw$D|_aOxCE*2k@rkNukSoa#gmz6J_ z0-=aSiN&zq2TAFqKXO1R7%U{Kf6A`3%wHLo0G7&U@7uNC+S$a)%0AuM`r=|swFG9{ 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

ZeTipPrB;J0_L%sF4fnN-QjBwzc&#Kn|gv^#5N~ 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 z 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 z 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

_fD{wAi*-mY;X! ztV^Zf&Gy^bl_r)WI99jwo~WN(*DJyG zNBd)F{u1T$eK9k08{j%>{DT%U_Wcv`{U_cV1f)WcXS>yh(2m zZsR(()+jlfq`JXd#yy~Ev{p=jvBE^vR^mie$*#Dwh0eul8{M@ z8gy!FM~^4s`}nHvbBGN8Ai0tJ!9~Jis`ldfCK)QNi1b_nicI^8=1I|mL%&Jd-y4kS zb**vR1?*oMm9Jpfn8VL{<8@s3LARZP3;_NU>%8!Fjqjq$Zv)-JK~%rEV=x?1ebFq$ z2x)5n8ezY85~5j(pjjkHB5>@_U3L2q6MO(B2+nklxFc!raMEs~qkD5vM_DF0B@$F0 z<~0eJsz+QEeRsa)#BGBM@bmY7C6M^p*_7!SsuEUGN)9USf9jc-fO-;i39#Ru&!1*a z;JY=_WBNU*Lpus8R#L&K%ECSfgY%Gc;`w^gjO3BQd z0Yt;`KQ%qcvw6%jo+I?NI^MZuPvx+$Zw!Cl-CgP$xUjFTuloHJZ6!LaC2nq^A;PbS z?t`=URY8uqQXLW-u=EaMpoecX_rdZLobHArtLd)ice-*OnU=2JE+xl`{X!T~nfQ%Y zJsg0-{PTi8K!Gb1cOEp0m5IaeE!PM)CgNAqVhMJt+>x$D$oUe>@>^HojR7cF7zcl! z0p_^0RSguAU}xk9L+pNV_gB=Z&I+Bfmbm-Ib$4?l4!rC9>qmzA4bzFYntHq7w`KEY zuHXDyfD71>dOfZaV(ay#FjYu9YR~-)m7%Mw-s3WW4A)1yeo$PN1*EsxJNO4OBy=?2 zhTrgrMZ?YG!V-jM*PD%^7^}^lPfdI&R;yyCjSKhg7hP^Vq`UrjpSVIvmMU8Hayxc- zGaoa{O54%CSo*{uBejyCsFpI90X*=cYgkUP-kNaGT-@jc zb7pmH(05Opoc_X$KurVz6B(r%1fCOE0BR(SM5&R`DE2Qj3ZO%y^v~N!TN7=NP}3-Z z;R_Trr9P(w^7f&vaXnVrnP8Gr-j*|7XB@LaS+o`*CiRYU|KC@?6SiN2;{))ojN4Us zT4_o`F?uTDyXRRbPp-Jb-N?Vv(_*V=nnTZmJYt>!iY`X~FMrAu(cY@vg;QN*e>f#Z zmy)S|^{cA?PxL8|n`T&CVci6dgFl+(mlkyull!t*aIaV zRcJW@e}bWG!B-Wfa=~FRtc>mBS`jBl;#HcqOcK1?fiuDG0$GRN#SJ-?L;Jp3rO{(% zFTxa^!3#b4K5BaMSOp%*^jqonO0poyTxhW> z{0rbtqo(K{{EdhqP1-n4EFocWtIv0}NBhrUQ15n^hWy31As+KyUkjAppX^dt2oAcL zA;?de*ysPG$7zhHOUfxYj7fkR{#q^7d zV>+_MvnZ@Ac26s7j#4xmAasbT03Cbn_qL~pLL_`x&xdoy@26K)@qXO^MZwyqI?dQknXbo{$)})_fX!QHJC+7c?>(VzS zLZ!*P4(#v>K^7RN4|fWEolT9Lg?jjW!|)!=;v+kje0|xb>Z0S{j7!ox$g#_dyz^o! z##iEjNx@$29DNxqbl4D}6#0YQSiB!2JfTCIG%{r_Ku_|Bi9qpoKhk@R_R?&Ld$3kO zMh0^+w<4$K}o`c!ubq~!^mhf{Er2Q&de1KTh&s1YX zK?VnF0>?OM2$h?$zLheR(XE`AEP8XL@WXI^vdL)$XxSQOkP0a{_gpt;zJ#8}r8^T< z3^40GBZr?Tx<1nbZ_vJS+Nwj327(2Ba~)riqvegZ3!MF)Pg!U_d^ZRafd0%Ct#lF? zQk-M}>`gmgp=6tLnal%P)J2~*!EFVOpA)s;{07VHu59KQQ3r z=~JpP>*S`oK`-e2^jWsv=#&Wm>%wmQel?br`?D6?(?Q?Nu<}j&?IS31RD@}vtoA55 z_=cFcIIOPQfycV*J00GmG?yd%!mw?b1??xY%*;ZV>!_3L1Ri})u(Nx88HvgT0^Azqpi7}tL6O6n$eX{IM#U`mK*i=#ghm9 zZyiO1;yrv{KSar^TEPdodvx4|kgI=RF6nNi?S;+Z;#t_=(ig`2_~eVK@L+dI2qW|v zIn*P%g3i4ip0-*30~r~=CBpl+fGH%dqia?p05J|OMO;SSRwHxD=X0wjmUA|)pLS6b zZaM#AjQ6du$EQ=wq+j#H72VMfmHcM}U;5Q-d3y(V4*#OG=(A0^1dQ*R|2=I1ZUz>y zz+~{#`g>av>g;bwI{P$S;=g-7fmFZ9BS{uwFb_PV3T^%4?Ii7Jq`+OCRMq~a^3SAr z8(3f6!Ww6@GvZ#w(7xK5?O9QA|1{Nx1JW zevUkArZCTsVtDY_Kz?of(nn`$F3U2@^0Ksk+V6ve{OJSDteC`Ip&N{{_zUoG_%G(bGS|X|IsYy5E zi^Q4BmY->js{I(rs%$>t*&vYUC0I%Zzh&;kaRpxE7BAJp25QsU@NOxTqE*x_*Cagu z@|nd_Er8h>F^R()6C7SiO2Gw(Fvv=!LA0$|3uAA0W*am;l7jDK>lc zDw#T}`T>mG2vvx3)cVCdV>+Aa5?_AvmA2pUympUphjsev)0pSUn2Na9xJscYo^j2I zH+y?)YwOo9*d$Nko4~C{C^_w*#jdLLPVKW1^=B*ZL6x#JM0X-UcM$YdrUh^ecp4p% z(+M8~dPtwqef>1(KqQ)+)7%3fucMquutN^1hXc8@R^r=!E1x`AmZnVT-sEL>dobZ_ zD*ClXI;_J`G$nF~&kH3XgDfNXYrMIt(GVDxQ}vi<$W4Yvn3vO2!=bocW7>j!%kdRF zndBRG_zWpaJIt}rP>TG?$b@`Spah>m4{yZaDIio{5iQ=++1T z&3KDV~z?#`o=H9CY~ql89Wy6p;M|n4#!iTH(e=-fgBs-m61_fV@w|+qZ)|va z39PF&@l{)cD~KXDM?y^+rlt3YpW@2^EjLXA0hBC`$Fujsm;-G2`ts$A0jCT_;hBt! zuh=zvZ@2`0_k@xRq2qRP7GS;uL}#jbk6*M!r-!~rbmllRKxqhx3|%F7<`sJq%M&A> z7Zl1(KfRa9`+anyB<^AW%C~CxK`XWbF?V9}o3%srf{@JM(o&cF==U8)9?xD(r@=}* z)x#9qwNq2#J?n1@>RV$T9jtD3@!TC~R9-D#_A1&g8P^>xIr=sD$-*tehsJFgb+;24 zfyCIl_G2IRuQVL}zOb&wGKZmtr+z+%%)a!-dcqwMdoAZs@n_vH-7QHs2FA>XS5WBd zEGXGsZG@9K1AXamh*275rxEJyq$7|ufugX2Yw>ISP4jnRSI6)7uXr_x=!KMgrR_9| zKkQK4Zxi4Ds?|Ox$t=1&jN$zx6x2QbBEDt}x}XDfl8Jpfyp2-SpsPz6jxTnULN!T7 z@dZbYuz~e@pE#$)>#+2W+*2d~jR_@L#E~4hH?Pu?`1DTIsYjvQi>8#TFSRLQXL=9N zl|!@I>BwKx!+UW1bzGgxgKNd?%{k#w-vm1ShwSbxn`ilDrRP)&^`0UU`HX7)(GC*b z%#>XG`QyiJ;na`wZfo~Xe)Yj%{kD7Sk}f`tmb10v;Dn{U0$i?DP556*u8AWn=X>EO zjRxPixlK(dZ0_9C(HV0PfQf}KY_N-38s-XKt#vv!9vVrsd8c{T<{)ahVXqugH)zKa6%bmz8TvRR7Q}OT+UxL#+T(B^%A>X(PcYIREbqKxH zG3|q|UrqYbA)jH%v?}ZNv=(pM?Pr#>I<^f<6(%oN+>Cn^*@?EAH$RFbqhfvT!ac)? zuX3@3q0R6n0NS%__w{0}adVTTA3xRO*o}7=!5A2O-s87qNPE2SLRns!NXO_h$ML9BJO)m^`>esYa|WGEdG{X0T51)AKXa z1mQ$+O3p&O?Rza}BJ;YT>|-|_7wTJEiqe<>2q4H{!m7K*k8|_lO*Xj7^_NNZ2Eb*iM1s{{4>epCimvnB6XElFp(($IFRIN!6gmaO#xL zI%o(4Q#10~^!GQ@m@+5``97P!nW9)+IicU85{zk4U&4D97C`vO*t(9zx;S_L0C z^F1#2$%QBbq|)m563O z#fXCwoGSJ|WQ!#I9*vuBxQ#(JUk0bs(ymIpt~$O?wKT-3mDt6L&DR{*n$J!yDqWk3 z;{RgPsgU_<<1wzl!f9PrUo4Yaiq7K>3$_iJEs@zS|lv9ShJKPpmZt$#r z)tD6@-yT^rSW&Cp9&x5!+&TKO>NVXlhOyOJ(L>FKVZUyHfhxs$M@ZxC<0F*blhfZ3 z-TK1l*JqaLy0-WBOK_iV zGn<^k!M^*UqDSr(=I7ZxOq40+1H$WjJ@zzNg+};{mg7C#e`)ym_v7API=Wcw1V_ZpZi@kVO72ufaU~3VDj)JOx zM`!j}Nw`VX0j*cijhSON_vPot+wQ8UqDqN9P43H6Y&7@8%g+%v-p4^T%H>ljznWaT zn%oVWJs+=gt5NhahF-9*FkjCsCwe4T1s6biH$V7f9Q$3a&wu@{l(-#uyGF5dYZ{bG z2{rp>eB-ll;M}o#?9~NjP#t&8{XUnds{$D*+fQ!fSDQSobE%V9Wv@R=%eF$||7c8c z|EIV9{>a-|GoL5duKoY$dhc+o|L<}9w#mvK8HGq@sBB7QhLn|^mB`-nR#Ksatgu-Z5D!DrPeCl*fOLDsj&=8!K!x@r4Fd~G6_5h zV}Oae5d$0#Pnv$Cijn4Y?e%v|#~d|0tIWK9jx*%`ZcMy};h3RKjX+^+R#8Ap-3r(J zdu`3hf3n zf#v4M!9&*REggDDn{6&6-cG*$n+=2~IM@dxJkh;Aunty+gnTpRhDX}^@QddDDY96@ zR3@X1Pi}i#Ki&Dtkyot3D{vF=5Ss8N$)eEZx9=XEo|>BSl}%RX;oSU*Bjecd{+twH zJKuh#r|HhCVG0?CM54K;fmnlwhdBa> z6n2(4k*oCEokM1YlMl9&+m_JQM}GzuK1KDCCFyQ>{Vv*g)8KPgj-+=3q-K#(3B2{c zQsXRp5|J8Cty%B{jUBKQ4M`-ZVFPSClMe! z!!P)K0~fMBa%~YLu!5Yg;)hl^R|h2z+Zj9NFs+S<-?i?St5_vRB-=sNPhAA7Lr#em zVoic%G-7jnz*iR0vNZb&{N>u|WWvFhODB7r-7t(Z>Dfj5w4O}AdM&nU=!jpuADwlw zOJA<#Mnyn-l(a~@DBtLpz}gailF7+_e3WPF%j_E#KqU7HVBDHxxAaSST^8@p`8L8T zzZDxq2f~?`iubsZynW=<-Vg)F&PgA}R|3An(Bem@-!2V*jS2MPkU;OtMD|}9%KWWj z>-9Ahe{kfTYqL%Ff^Pj%@oAF_$vQu*ha(0=cH9p3es0|R=S8CPBwRBm2vFYB0yc!*}9p=J*JJ?o*EI=Dh^ST)*E3rpx-f#MRJUq<$1K-?&>2GPBlK(>&Bi|T= zE>sv-75)kdXuws`Z6e#AWk{S>8$i9cO_rG>)-LCk=X&o{jF%XAJ3JlW-!aPeD=0be zJ|M7vvyfW86h|iV|@kdUFdw znZJz(G{%)nJnH3vGL+_Z=93A970@6=Ez>0%g4~$mXRf`+8b90O;BMuHy?BIAY%-tI z#Rf%Nc3OWXS4D(P4VrV0?d*e+on0A~ZqGr7Cy+_Ee~?d;u0+YR z4ST04Aj-b}OLw7fVT?d>hLJ1G^8WkOfyb%C6d&3|-5UQs25WV0G(LO|FJe?Y?FT%< zTAi5yZC;3in}0FG&SyIE%~p|`>CNG_ac)EB1w^Mx3=Ef;txdAJ{B^B#Z5+bWt!O83 zWt~NYLmmVYdOpKJ7klB+?{Ci}LyiEvGBL4b2~KCMHB;hhA*9JDfenlUcjb8D>?I$e z7TnQdJjSMgslTOMkqw8bo7&r2v*tE`4bDM!h^Or6zIuZU9{DEl>Aj7~vI@?oN4tre z==ugksW^+{^U205-z5fP`tzh_(=&EnU62TI!bx@(7mi5`wDL^AK{rQ)5OsGW#L0zU}K zAyrweIX(OxqfCjzc`80Lwmyh^e3;5ZKPYtfA zTyt0oL0nU~MV)zSVj;Ky6v{KWofh<1IPu0GJy^{wHhABrwEZAUsT;WD~u!Epto%Xf~os~19)s!GDO{E(2^o}*g&XY@VitvNz(+eJ!8xDL68rACgqI}o~ zMM1g}WzCK%h)6~={^OaHrx*H(ww_O5o)KZs1KG7+rAJZ@HjMd)IUOi=8iYBy2~> z#{Bn4@8lH)sIG*+pKsOUCX}wz|H!gI1hy81wyE@?gqY!F-PkfL25hJiB*LvVZ&M!c zmyA;@Pc-dXFx?#XDu7^tYHlHd-wSd$0FAcVnnX-nO9v+W4#PxH+a|>ywhwCz1Dq4G zy+3d~~e$!vg^lpR5nNcrw zvgyLhwW0}hsG=`YtC|(C?i{jMpM_9I9h7u)Am%Yq_B=`dKaV*h+l+ZkY8R3Tz+>RT zYlM*DU;&0Ek~ZhoquzEo1`HQ}uG$i+7`C-<&>Ep1IhY7CSr`y16DX|N>)Yxxz?qWe z&Oc`!&nO(CaR0I%mnr`YAxe9hLb~Wq%}7mE6>E6o+1&O{9N`f2C=PzM)>p&o!n5xA zKDunVQWyjKFLh*O-y;u-{O3V=J$kK0zf?q?)FW9Eq>v?w4SP(XM1yUZS`MHO;o9bzX2-wjqyl(~ciZ~fv& zmaYXbBSaM*Q)8gIU|@*~XU;gc^$#KGY+PL<(qz_)!&nq-LIM`W5)y#3{{7Rx5-Ph0JSlVw5S3tT^wGfO(HA8!M#&+>5n&TJeK2ywu|6`Zn)^| z7b7Nu?(YdCWaM!TvmeL#>5jHH<8@FwMB}-DCc`mZ7#Irwb2dR5B`TqWc?lC62c`2v zFeiVEyh>$7qBy<{-0xpKw5;T-RM34w^>ScbUmSNfN3)Pho!`E$z^xv{`$2ZU(CK*a zWfJYB_1x-BHg54*&yAmtMJuMN1}o)9{lt@oT&-grC%~bh%SG zOCNpjg^65ypW@%=90n;~vV@2ZmH(qdpw#=iUukKO8s?kiqmf}g&bH@2EADC9EXW0V zpKnd#TNt6fUmS1X+Jrq`8BFfS`M)NYZA%}DNw9zj!zH*I>xl#?cb?{> zeJGP%qMX`+Qf2GLtE)JhA^y8-?uLBWtAR&WUI>q< zC}?ynKcYWKOrgm>Q=vbwQalVe*z3DWs23xrAoz2@%zJb6ddyM!YrEH0_&1fSSaU{L z+Yybv3>vNdSEDKAOu#G4AH{@Bb&$MvJDSXqHXcE)<4ZOBb$3BBSZVKGOMqC@x1|Wj0mu*Q&K);?yfC3#A*{)byGA-(nrP|8H2}MCHo1` zXFM>$V#AERXBi2?=)7;5&yN%!d&e!u!<@D{wZHLe04{iMswY#dTaFK2OcjSVtU|ivU0TX{5_!^^IE_DWJy0CAD@6?k35Od zB3&Dk`+ub=iitJKAw=nLOJ};pF8C!(e2f_d()JK?FUj0 zBxbx!N!%K)$%p|O`t9py!JUTqhq*J@*jsXP6$$Nvx|EaUk#>cTH2LP`>bY%`%K2K$ z!PTFWZ-U{NiNJb6p5N-PfP{@u-<+a6vG3tE^8*2yMU6)_LF-%10=PvbP4(63IQq|{ z*Tv1pn1-bY^x88-HyXp)5o&Ew-Xt7V-nXd8v7G5|KTs%nm`^+Ft`cGYkmTEd)c<+X zpUFCy5Jp{s==;Aaec&n>WuL}`JI)?Yug(L*bNFg$@e(((5_RPX%1^J>@0C?IYN(l&0l0Y~=W zvEO<6SzY_3{CU~h2?mbvismC%;T6mY0-p=rP~?trt7Po^M7L{q>vo}L%gf1f1 zP$q`!Q17$vR1Qnzc`*i;l)zb$lAnCu7T_(;Xy=d(J^*P})447322W?)^A&L@QLV0T zxZX?38NB6a%Nn@FyS)lm?1IUcxdJpz440J*{>T-6prVIUK)hWG!f>$sVQVVw`i7~F zOfa^)G~;^|v>pwy9}g6(;5K;>;wHS0Yaj%9sU9N1yr>%UGP>r<}V^OdbR_%`cf=T|clF0+_x;%{IVexR&#wGOBx1x^V=rQYd;SF{xn zJLPA^)zq!8&a{J5|MdwaJ)K}^7#Y#K#SO2q%*4JXWf;+PB`}J2DLF@xJQ7V=kGuvd zLjQfuk_BmLjcxS+9GBE|C@%dVx)|GH$r$`Az_&dQBb6STd|Z&xs(uy5^B9Y<5l$9B zNP~LH{G}ie{^}~h0eRkL4Gki^B^0CA3-oQ5yIG_3mGq#+1f;2hvrQnm_mJpfLl~R4 z4ecl*JC)G1|7Dbxi6@`+q2%hE9dwjSZugLL^DZ+SuG#oA)w8FUbMSJAWl9Ip1~iWSg#JCqmj zT&5pn!Z7lJT5_KT4CLX~(4p+U9<%B$Qhh0RR73xQn^8)bPt*&$Qj`5Za{+!kwuyao z7b*}UfP7$yAWXp`lK&9?gh%A=-8|R}FtQZhXnwB`_t_)U-tp7SHlNOm3UKiY)|pRr zF6va340mZIV5IgrH&5QM`pPv-nE~yIxtV4G=gdy;1O=^(ghg%QSVdG9mRSYjK{g)RUChPkHWkXCi zT%Ry6zPkfuU$Qz~InVNbJK22=k;T?A!ND^}>CGahg=LOMiaxx-&jtOL50hijbz_dw zY&4Ze(VtukdOK=wkXHNH@R-5%rRQnG6x|smo6Y|RI93o0#RePi2E-}a=`{5bz7j<06k^1_W2B>J$`EybO#UIzjw=y7iQ zsxRL}g-|u$R4~6z?%&;|{)sttfLFDgmD|>zQs#EDNDSD|iGQTfmkUt~c}ehl${|Fe z%b4IPD+WT!=>Y=__p?t|4R6NEkku6>%e?y|_>0eMIFZt6i&4bT75e>tS_$5WRSBpX9JKFjb!ah+Z-^^6l$!P6$xA>hGUr z!V_85;x_q_Av9=T68~^H0uy4t%i8pQXtuSH=jG_OZd}S@Ms5EYG;e$3sZPb&_JRs!Z%d5jE42L8W~FrmUcf)^7d zK|zP1^Nt5^%9!!QPpIu9#DCH!MTWGGMe}^&`o;SFEbWoobf3T`g|`N!eNU56qde6_ zb;)W2B0u6@W7R1~ak4tcGDGT0di3#6dVI5Y^INJVYy`|sDzgc;d$ymh+KGuF^Zu^T z{sV&QXRtApl>G`OZATN~BU5ips+cMy)Y&fIF4friq%za1V3hsZcK)PYY`Ed6hEak_5nWI?Y`iFR`$wA0sy0V`e2?3cJ+U^J zk|^&TNcNo?G1l!lf73;ng_Dg%YuOg!Pu6@8V#Zj zMwy&w#`&J25)SgCy-}0fD{-4S!xat=&EQEj{tpQpNJ=5Ec=iHgpP}~y-hzEc`$&DW zP3cVPSkl+2y!RM3?6_p_^D?wfUh%cy=C2q0Y8@<3*v4_k48A==6O~_0t3*tpVj5$L zc3a7M+=Akp;XpBYJ?&t{R`cO96^7d3$V;o)KlOK>zo&(BzU`kLUcYR<2rt%sCzUt=fZu3PtS#zHs=M*&q_REUmYdM{| z#;OWK3o@FQ%Ur}+)YGHhqne-kjZeLP(q)Y0rZP0gOUbmBIf3J%a@erw#uF zJ*j(E^c4A~-5=gqx9_)G+?(r!rB`ER#0isk&*+eQOuGoliqJs8VOmt-_^}!4=z?;v ze}pHWH$qhvMlGgwiI=6V_p`!0Ui=yeBP6zMS$^)-mFY^9Bd82j<`%spT3~?3>KI`u z9SZe^7~#7nbhZ9{Kr6!sv6JusvB6_8Gm%08G6#JDf4(F;l(v)>5^w&CIkmIcwX>u! zLRS3D(hC|9;56Ut%d*O=Qyi?v2|P22jQSGTU*^qFI~NI6vXU?)bMvH^RhzzM05DPL z1dQ5cJpPZ&1?)a}Srg-PZOW$9x?B5IP6>-a6~>TpF|zJUe80r3dtBy2?X^J-Lp)N0X!2)SLM!#KmoN*n1AaFG}^zj+x0kFQ`t8vT74?8`^FJQ)zr## zS#@3%z7|vMwIF|3H|8n*LI9?)dVi=fX54d?0v^|?%`FUx#1tU@X8SPeQRBw=8@Q5* zM5k}Zj8*D>ziB3iyU`V&TAD9Hgqn+MQPtBMVz?wswi-a|w$GRM$G8P|dd%4Oi=JN0 zlbb2)@;Zf<{JXH91F)_ga0DznnUt{Cb!* zziRT;@UVb6Qp_Qi`fK9jv9gAZKf%7Kb~@JVL{4XGV9GZo0`rj!IVCj}cfs&W^kq4e z;F_{6)~AO(IQu>OG9#xZ=?vYwf&mn2O}QX72MSt9XH**JxZDWuA>?ML&sfb_(8)M~ zr-yhmG=KHby2oi?tb4glsRm5V1sQw=6kn5hdDzLLW6l>dcwGY*U~T~R&_?SX}byT1c^MW80tLTuV3Z}e?I`C>Wi z^e?kxGEOFE;{OM*UJypsdax-Y$Qm#6BKyJk^e=Up$!xK~?k-1@-Yn%uUrj^<9!wdl zi>3W9Xh{k|Z_{=hxS1xXYy~Z&#)(cD+yW;-0%403!L9`$GR10U$!4ns*b|{oZRSWi zh|0o5`|_m!h*?PRPGgN$T@?=VqK!?d(9}xb55$kO?!NEyUMej&Ic?tvRF2krhftZ* znqe=00fm}Oy{r|wS@YOkGSQnI|5@7TG%4+?v z!J3mfj4A6N{ztyL+~5C<&)(VUyIp!drQG(plf%GxtTdTIYwdK+3h+4NU+8IZT$;R% z3{~$}VFI6qJ+rT+rDfaKcqh4-Y?*B2DlVgl<{K{SSkC8JeYLnzkb{CXgDMM0jvp7M z0fC~&#&c5tAg(e)zNvA5OTKyTn;XnW-8EPSOZwodZG^7z607d-mIl`C=kN2Wvx{k? z@aLxR-)Nj;N1^L8pA=a@S-rY?LzW=r)QHZlI8jZ`S@)F;Z}NFzFV})6Y~>nEsu0#) z*4t6S<}>`*5c(~|EXY(=UDflXV~Zwxc>uG+Q6syZ`3HxtpKNlhr$A>`^~AVeW+|)5 z873GBjJXvlzmQ!PY)?T|yun9gkA1vNa7#W9{cWKyKNPhve%sUuS`z%(j)K%q#$8M-0z?s~P-Uj=uavQD-lYQN_$O@BE zb&{&SC6d$VF3=<#7$e?28pDH&N@03^!Vs#9-Ln=aA)S38e1-gmK=X-d{wbrXm!=Pu z)1n@%4I<=5bn72t%V3GE%;N|5nIU6HTkCclu`lVa&X-|cBw3I7Gbeoa+*~A-7=q38 zR;PT;e;-R7Yr8iXkrzky>%9@Fh+4{-r)RgGE8?M2j+{OrosXo9Z%A;mR}xQ!UBlCc zW>R$4`H##Pti#g8!Cm*tLaz%Uc{V0zNYR&^?Z#9zh0+#YcdXA{LC`&xRneNeV$8fq z`TSi;O}Asso9fsnQY&;(uusKSf10GIv6+z4Qyzs1i6R*Df)9HcgIlIF`QmbOM$&U>R=tFZ74OJKt^RPh?Lr z({wpH443HoZD;qKx#8D6wNc=th*12?J%JYKKplyZQKlqX6ngz9TDTFiRJQOd#QZIr zZZ&J2ZdeBN@!|qR@<3j%)nG z@ggJQ9~h2rJ4Rw0r_9z`mQcV{*`Ia$t3Bt9G=)x_pW@@L%i{lD&`NVV={^Pb@+i!8 zab5V71wQk)XOUH{uX-dPUv!~7(Jpns?84kaqUc|!B9wz72))IwV4RlV&s2?W3$Byf zmu*U8yBw)+ul7ym8U2}>gemgtx{n3PH$CcvpL?JAeWzxY!@Iwflai4lyTCM5R4aw3 zO){>I1|PMi@a?`SoN_7|NL1&!Pc*%}#|L2<9}IP_(@)MxPxx>8=ajKg<1!t+(sVCVC74 zL*pQE16zn=v9kchl-L^;g1gUuWp(LCF1 z46U_+4O|kv3Auy+5I^KP7@6rq;-?T}ur7zt_z>$CO#6-KorG-LY8S`^uR8?38_wPI zm9?&(i(}B)xvKk7wdtx?ts^ji-a1u2Il({woCXtI5S5|83~foXy*slkKy+DJl!!TM zM$e_z`Q#8qiQU+0{TA!<5ipOC1}|GGok@OZ(wf zXVj2*w)8*P#)}^P3Fb$~y%td^8aI!vjbf_T{qCdJDINmYB1HfT%BA16z^Lv7?)v+#Db`&-KZ#*( z&A-fDr~?~LxvxvUNrZe1@h+xkW8GLVRwF>Oc$NF+v4i<%_<8pZ>Jb`0GVAU&%|cNq zoN5y#M%{hZlVS~9NIa!);*7>DgNoW0k}^e_@al65`TXndWa&A7~U@Q^YL&kG= z$=@DvoKgznk`6;Xi+@Bo_+!Bx64NaocX*V%PeFVbNVw8Yfi-mNwYk*G^$r@7&69&VZdqkM+I2Y>OI>6qvGHlJ=yA) zQ9CQ>v7-$I?>^qZv6rAbae|T?b*ZZbZH=umyutMy;s5kq`R73K8X-fwl3TTeT^W@6 zLa+Z7u8^s}!bOb{u9PTQC~iSFr{GS)!D^n@O3&GYvK)U|Pblyhs`mM8|BA2a;*qmW zMoYy3@VMA8C>y0IXFH3t8`4bMHz&{(U=$;F=ux~dF>0-x zZim4T+i9q}F|PN`lr3}Qr3UUSPE<&g35CZ~n(+^)kkOA`f2x@Ah=?9#pJ`evQE$X2NcO8yj^YJhhq^ECKTpWSKH&hX;8e_u1U+YW z-{L;6R_N~05LOe3nB@_iq?u-!asDTh-#6L}M|4{rbu3g|^D;_H0VU9{?CPnk4PB4@0Wc3zMlce?+%ZqY6D7-DMv zm4=HLX;`iS_l9ZI_*^I^lPhh=9UG3E%e_%ob)-(Xb@y=(8H4f0*{0G$>dmP$t0yA; z48r?yVep1z;kO~)QH@$$5h)f5nDnrxD*C!Pevd4Tn*(UoGVUt7b&G@QEG3raH2u~z&fe!-IY3iV&n~A-*rS!-QmnSXOI5O=#+X7 zpINeUcGT1wnXIWeQ$|Vbt%LiSm@OX9VleL2_aes7LZOXRWuL>EaB#-Zl#(4rg*38D zH1Kp>tB@LmLU!W$LCZn?Xv`~GzaXz@aCW}(?3x*cP4p+n}QZ(}mE3pIcp^F80;oN~T} z4=>8G|hYt|o7PbF`MR|5_6E$W+H(#)?$<$tsN_ElNzm8Mhqj&XBUqx;hWM zVycdgwcNMRag?jF{gx`tlT;WR4pyIh&+e`DGEN^PEpEl(i0Y$_J6GeMstt&#KTCBZKu=03aZIxCj5LM{I3m_^F4@w2_Z2FV{Q zf{%iCEFiWN8*EY8;$ZMq#&|pH-hmlZH&Sz4_xB_BAotLjTEv3R7BNO|C#2Ozu`r-i zuRTR2t!-?;Cm9gM2VUs${Uy}0t1LJc;!T=y2SN;pD*3KCG&+iCItVrG|Ml-juz;cB z*NpiNBQ|>Bvf#e=+r4{?T(H?wl7WnKrm`N!p;~ z^aKH1rJ##zK7)Il45!uACv1Lmr}&_(rPg~lGX+qe6v@l*@H`!DotaSU%QZytYt}+e zCYX{@9rS>}3;!Ng1~o}BQN|YZTP&{nFMeu;dJMbm69&=kzWK51dV9WIAPYT?LVO~4 z*Cs!`l-r)z9!2aB$N>lcFcjKM_1m;f$=m2tjLRu&nb{Hqu$3^$Z}seqAugm%c`*X( zZ0eV_1fpHy5J@<>$DiH^l7Q5{X?NH)upTJ{YYVSKD%Xt+UK#5oF_d-jbvgz>lU(#z(Uw4<3Bm3eJ zffe%pXYDgfZbw2o1%*JpaBr#LC@6sPZpgt57~+K8Fs%=?HI#(jB4c?~Ib1@{Rk2WZ zMhE*?fj9^TxOtA%L$Z9%V+QC>MelHzn=GH2i2qrL0?Ag09^SJr-xXk^7JTF(_2sw( zr48XCu6BmswW__yXRcD)nI(1J-v-VkaD5w4eSZM6nn+Zc@f4%>VKAi`4|T_P{$J8! zex2Tz)b)efOn7r?It(}2F$UkO@tG{ZN&KH6y%AHdL(ZcK!N6M17EaL_!%;V-|VIfm1BYv>L`yHrni8*5c&ijzTR?`5NNkMdlJth@TOQ<_V8(5_434B;I<6nci6!2dg6~C z3LGy+;25vg`9Xb^gL(gvDqXD3^5urz-l%|BHd$ZjG5}f7W{e?*v#jjvc2>CdmR5^x zAaM6`MxeHOJn}lj<RC!#_Dua0CV=%|ZcRh~2!vwqFz#bnJq_ixKT5AKDW`>i*>X z!9(1li0OMAymZf7%I)hQ@&O5IIS#`BHE6XW3}9Zgr1Oe+S@X$1Z&WDf5r*;E%)uvm z+Vi;&tZ(AqHXrk|I4^PjCkViWUW5prT{du~+vAnF0`br@1PSpKLkD|<9UyoHDdGWY zDxaRDa2UPI-W2=B`$R zpUF8*jTvi3*!T5Rki!>)JT-*$06yMTYC7tnx6i-ezo}!uzoq#H{5=y3M+|u8#ds(X zE;^T`?w#pH4=jY6;rJRO_=6At{=pJ>&!<=jf9kg_;mU4Pb`;(lA%Jt?_9aru?es^- zw`rhYOW^kY{qU&KV^=9qhV%31nlnqxWxX;=7$&LUgI8n>K^_kigPPJ~tRFPFg!oo2 z!)Nnbm=q4mRkCvHC0*Jk`!^?ajYBBC&WYlbh+yBKe@+;9z%?ch#cYl#n`*FoW{i;s zU!`t`&0RljPXw?_Dl;pN&$?%I)Y|JgL|%7j^j$$rFXz!ib8`-BZVZ_hk?8N$n6Y8& zFMe@yn5!)RV;CRiL)Tjh-oLzRBhJK^S7hqdmh{yad8mmaFq^6@nhFSKx8dj~`kcYz+lX0EI%R z|AX&!!pSR~KP5KE{%gj?5~fr1HlReg?zIq6v!x|ANHW1D1M1&G*dT0;4q|D8sY9{t zRl$m(+}s*3qG)O#mHLGg$(RkM;rc}R^2D2B`Nw)+PX5uqMmb?Vjo7;jN%szguILhm z>oNaGe*L>W$yD$e2N*I*BoHk@7SzUCDjs{(<+EUOSaH1}uBLQa0A}hbPmApKhnV{x9NB zu;#WNi}b_9b4nN|5{v? zu`U5;#YG27h3#2wr7+A2$+T=TO(p&9klO3#7KwY_7m0ecZ=9KRztdUk{oOJ0*PY8U z;o*4^h`l=&g5Z_13ZK6)^W1KvJOY}Y2HZ6od%HA?duwJc0m!0Yb5a22nv?u zyVBX=9$!jnnq|C$c_RX4$jraNxAm@o{sMDbF$=}RiQjRf59Eg~B~m+I&xoipdhBs~ z1SUKp2z%>-qfF!s=Dd7ceIr5WTkiiAdL2yLr*;LbzU_K9?RK7OT~%qliS-B4KF5HZ z?DoiJIG8xEOH&dmUEW=`ach{U&3>)hbi+ z%|^(xx*Y?++co&77Ow_Zgh_oIe8a;;tE^WKl`+k;jp8VjMTd0^P#e06_(J%nIVYb# zdwH?S&LLHHB<$-4bN3`7Wi$M|GZk0PtSUp5`nbjgn2<&IU4*r=y{|E*9{Miz z0_&3J1BzV(k<6k3Z0u&DX;xjrlPom3%;-4d&&i9j%)+`G z`H-nSB0|_K09d;@+D}eaYYGh*sK`0gs+3%h{c-+t@O2QfR-R+)@YNgvjJP9h)edQ_ ztVLjD4Px7preA8u9Fx5QMHZiAuBliK%9R@mk{{g2E;UxAaXgLTItvfb$a=RA3r3I3|pSnaSD^k?Bd0l@jq0)X-{5USZ7nb zMxPCC{hGr=7>10~ICpo1c-=kgSVc6#dQ*K&e0}u7UsV&mE$fs!wlARj!Z7({@j!O< zuJ+p0rC-vp3`1SIWY){-GTVnUN%45Dp8_dS@|2gftt64qB6Cg^rm?lVoNaHT&*olS zaL5LpGt9aZzXAJZ@n+aKhUgW5ML?Eg8WN}r*tiP5Aii&tSNPf|eQf_-?ia(e#&#vM zMVqAT!6!c2K0del_I$o5_!gI!N!B{4w@%z=5|?*K*aexrpk#Rg(_(zrUh{y+BS8Q> zzgR7^ZhC{q^|XP^r`}SZpV>D)qK1}4%l*F$ufp0^aro#+jOk70_-p1i6wJ@%E#@|t z%Do*+GD)s4g1&CcROIM`=VxZ#!nd-iK6(Tgyie1M0N%Uo8;fpIZk7^wKQD}K28<9; zGo5)nv30MrIJf&0Mm5QuB^S2|PL_jhhIL8~ihj6}!^1H~x8dX-!kV*~D+A~^&5kB;Q;1Jw z@a0Rl#GaMBU-;J^J5lD|xZmKkyXBe9vRcPR_l(iwW@lz!CS7M-^F*cuioKE-rY+C^ zK1FUM7(1}=mf)M&kBM&1Kc#aD-$>v=nDPbRh|cns@H*_WT?e?}<%^|c|s z1^-J;cU02yIUH221AfXSciH50j~>zsHI?{jDOX+Vgk!rlcwWCAXjXESVu9N&Dzus- zZ~#)hq2L&%J4A6D1NjA2WHlTz)`5cw%e#^qOIj?GkLwkmjSZ)T%`B8EZtnQ8G>+_N zlWn4OJJn(v84Tkd{0F@8qyV(VxF7SBRaR9Q<@EvLipHT@9o*ixl3FD9(^GIBe%)P7 zmks`$5p}s(zxZW)rUna!>hG{rM`4K``D_g}rZpAjw$q)q$_35zGf4<3%g`e~<{E^(km&gv(Jh-W0VlDGx zxN1envUF)J{QA#=oh}lZ&K&*cp>b+fe5WaEZw+5Up`0UZy5d1yLE7HA)-t98@f(y@ z>vQGiXou9b{8}H|@W2VJztVPyH=5}G0nDCPn2y?vt~wQYOk03WHO$9gLY!WD{g&1| zo?(51nj6Q9v!TvZQO$Ojr*OUpormt6cu<_{5>~H!vgL0YzoG8rmo!iHx)sjuaOIc; zUu~!)BVD&TM^8hK_rCJu@n;w<`6E`9HTcy~ z@w}yz)Exfh=#bBmW5Zw8az{V*dH&w2j#s{fZw3#E4WWt|!#pJ6JOc_{^_ZXcr*m1@ zMCqs?ThY||X{xWU<=(zvxVyfp*15pd)0n~N3ClU3Qa?CZRV7f-0hh86Mc=xJN$xJ4 z;PNAXpH9A>SQa(qnw-}yX}4YrC)gTes}v{11$|OnKj@wwb$C5_D+{P!b|WmG%vvFY zvev&6wu0rHcoU?E-dXq7CMj6{6#dAm^W^=nxVHYmOpcRwI6`x#H`Jucp1;uh1q++dZWMKWr-u+M&?=gL3)6Qfv<^NpMkddHv8(SH`HyF0o5XB=nG6H6!mO~i z+@f;ciKQ=qYTLG*ZrG=20uW?A8JmJ_qKO^yyq^LF^@9=w8X z@6Qs^P7I%9S|nm@bgI*+pl>(KP8eG>ID4-n4=CQ$YHct_DQ__R7=@N4W-)u;J?ko) zoY$94O&t{=9N9Dmn+WwJ36Ru01oOP0KEpKrG7W@v$~zbvFUw6JI%EW(!n;iF_2 zgoDkLoD%s2>|wK}@nffv9}h`^nt}{~&^vKy_Dj59d)`1vTt4^rZUW zR%Y1XG`M?(jep{#AgjO|^M;prz6TPiYwj!5LllkK=iZ-N(@>!e0krKd{Y4x0K?2E- zJ_kL=zkd$yM3yyP)*(I}IkwLO#Qt0Z#P;}8Yx`TNc;u-`Du1;BC+^pq@}0zOkItnN zpgvEs9zlsG2~$xlV+_1p^jiTT52jgWR?%UW`QP^yVL?2173)*j#CS3U*2TG;dwpo% zmwB*&V*zmLy>s9EnAKy(U?X-To+$N1(#7vB)gwz2;)|Q>1Q~mJIIu8{Y2I+n7Uwdj z?DZcYWY6xM=SP|Hy;it=i!r#-Wy$SEtm0)`@?JeUCv8zPB)5V^* zZcdSToLT(*%7pY3^Y8es=^_+5tTF%xRTDvd@f6g|VKZkp&C^LsVF2zEi~;`3>SmZs z*&}Pm~aAYZv>9Lc>i8jmd3D3#y z#}{|B@JR>A3lpEl2&CLjHPz(oAV5h@ydy^y&>URQf)7UAE0|0-%*$80q)rRZEXO|? zbsJI(#Q;5Z%>ofQgRh5Qbv|8#sb&7Ww9_#V`K>%zDGU%>3)M3 zPC|a|f24yA%4!Xc@9-AN)ZwB`#;C7s$sg6$wJ)L8cYY{RU160iq-yQ@S{vuv1$O#0 z0Z&zx#Iep0tew`A$Jl8LxbgxPg4~T=jb;)ZV0IUXXW(#o1wP9H&6`CCbhQyyX z%FTLwYGJ#4%HUx&rG2GnS1}-cDa;m-MwxiJ;HQX4ur5Q}gE@H2y&{vm#na}iI#Fg_ zQ5{3fy|O=XOi>zFUJqPL8!dNu2zEqg*c8#DqwyHHO^N`QwK4ILlSA(ItZ^kQtFDke z$H26x&*BB74*s*8olx+FZn@9o(Uq2%Yv-xYlQ#aLG_<0IDWkISpMVHZQm;6o=9EKu>~}@ z)|2>$OY;OS>t{r{lf#a*z0>x4aQXp9)qkNXV_AIiU#Q=xKK@eIZUGgDXQ#^`C=Zv!e1z95PY!iq(Yk3%;_7)v=2B4R0v_ zC|zh^t1e_X#5U_($;R5{BXlYw3vgRtZu})ws8A@aqnJ44F^RGXEWb7o8N4r@N4A;B z78gOb$-hytva=`q)O=Fp5o5*3l4Ypo*eJI&2C!0N2L>?vQXy(r`6;28YnfqgUpB>Z zBEyXAPfh|RpRI@z3E{bS%np86=pX|}>@2}s* zuKuaJANwomC-)&>99W^O`LV1xD^D}+c52CaYhGqpMT;P8K!rhg77`pR!Xi@@V#wINkG5A7kHn+C7E;Y1w`^sqqle>RgxOqF-l9Gh{2&+C`p zELO%8b?y^fDp4?iR4#1`Bgk3|BX$VDXQ3ED{s~Ko*S*Q}n z@`J|}h0Ny3ItM!<(lxPjI_T7_C%M{w5f={y3wx{z^*sg)Iw)vu9g@f%57(A6=?0i1 zNB|m+B1Nq0%2s82ZG=@P+zj>^`8;qk&8a2hm@?DQZC8BM%8D$-GEW4(W;bWm5TE>6 z$zdk)H2ykD4ZWlEKdtOq<&^1Ij0XN3(GI!d?SsGZI(jSmJXHOl62*my?f#rN;U~ki z2x??JcURC>^e{iS+wQ)&V1OBJ{G5Fp?3!MinB!BZ>9`@}$PR_V)6gvcEy9e&H_ zebz>4VDcJWx~$rP3ju4-zqHCpn_bY82Qvk}UR&h?2IyZiMT3p$=}2aOxv}g-RMJ?o-_rsfzo@%i+2z!L;;Wu!O0+D9vXM5Y=D0hTu6k%PFl9=WS2=3=R*O$F|ghK?qhq!R|P*SIQ7-7g>J$R5L9=t;>3C+Nf{PipI};~ zn)j&vT2sJys6&_N4Y$RgDpT$x)>l4^yE&n{0yaHIy2h@9($6M#O)c6)|*hMhp`M!9Y zO5~f{X4@B~AsS0gOEaPF>s=Dp74ZV+sj>+QZM1EL_k)@c$92@XY|#F^(Cz+N(>zyt ze%#&Wr}=v4>&!`;AZ9)i{a|f_c>c1&VN`*_xZ4zKteuD<+nhFWtWkZU9J~_>ClFU= zqQfV?|86v^aWh3-V;y49`grZE@H&!5Kl)kES_+B771i>m%<|NYLwW%n+vMvm$fODW<9g` zc-MUjlbNSJ^fr2+A3e6u$+Vc7;$fS?)*nBXUqp!diFUAgbVUrWR-{f?ZRwj3se_ka zw~1#y=`xS)r(3TFP7os@6n)nKXFfAI_68@qju64lzITW$b=m=AnX?p$!kqMO;-Qw~m!7Iny+s}U46&PWUO82A zNn7=-kZ(T4@{yOHZVi!z3miWSm6sbF{{xs4TkxT_D9wY&9PobV7hx`VR+ec|C~_>R zWhS%+F^JPLEx3N+ze3aDjzyqwapf8i`VA$wga{O0Zs&e0u^1;qc~)+c*J&<1HRc%3 zt4Ob3{wP@+%1;`)E+$PM2y4jSXzD+*r~GtBjJ9&i3iCP5J{ITG0Gg+v3PdYFb~m58 zheTQ5SIg|

auGIA31;`tdry#hUrYx>f}p716ZMC>SS3#b5**CEhUQTxOgX!WuIA z>WC{71X0TzEg1SfdVyzm*CbW5Q^^4V2tf^^s!y>Q=aGo9>LiTb$OX(tz`dI45xgh_ z)jj{@x4cX1dEb7Ow#md6FC=;Pe=Bl0NstP7ijyN*qr01IvO~#B=JPxb8N^S5h4=|7 zn+o!S*W8I;kD>bGNyI+zCF$`@YP~k9BOf!#FQy%MFtt< zQt^y)nlA6?Xvsr?3hIJ@p6QducKWwATJ?BMbXf{{W9L8M8C#p^LB;IzHOJt03%|ad zesP2~Vpx6S&oN|O(*H-+TSsNNJz>KSjWh}(k&_72uMkHhqOo| zDIrLMq|%KvNP|-Eex952d%yL5f4SCKaE6&ZbImoe?+t5!&M-743Vw#G#&zshU8%8) z&8J4Agy1qSLvRrWu8s8tIV>5oFh{H@aM=|0)#e^L|1lrEWFZ+v5IqZK zzoCg{Q59h&p)p8d?|UWPJqT)Yvd=pB!2kg~^!5OeH|1jg({AvenMZM~Z0%Vt*9k=PbaOG8p5k&p^{jb?6cJ?S=ZozrqnYsqU%DoqjwN8RgU*i6sV2 z8Ts8(L+|{I!0{El1jmQp=KNnoEJ5V&Cpf;cKiefl1;qqDCu^k3M8IL@A{C@r-Vy+$ zOUXCaAXesw8}+3(?W-^kLPNM!kH?~}k~Uc!v4H3^aL;GQy@{#ckjvk4#KrYTL@P2$ z5ZtN^yj>Fqz^aBZbCdyS7BWzg96*CmG%BhYREz_FW~+mLJw*8)R&)=@+GgfOhRm)I z>3$9+piWK4D=i2->QbZss09SIwsYW&3LPg&swr!|!uP3sRPNhhkoQ9hs0b(@gBlxg z3QbcwUZ|}w_+ikbK@jUbs#_b{8v?e>eZvir!X9s1ea+Zo#OT{E!Ap?j4fB8eC`s1! z%}wgqsoT@P^4N>;=E|cB5e~pVj<5u-rXIVO=)ND9!DN!(S|sK}OQ;a~JU&V^i780k zK=DOR8gYcIP?{uwy7mh`-FEZf$(Ge#)4DEU*YxfB4tnAbI^qGU;Mpsd^C278OMqKZ zX0&E z$6Ow=;dh8+or!YI@B`{m??<{DskdU|_}C{39uJ_!;az@y$=2#chm?Y^`+1Y&kYeaN zIJ5}TKN39P_9tw!PKOO#2D})!i=_fS`gd20M6>^2dB(akCO9Rmc*Rq%p0{GyBY?ld zZHb9^kQKJ4zGuvU;B=A8holeTMZV}l1!<3+Xw1=xLN4W$HT&F_I>l`xp{$TpWhr-) zn$cnSg8n+Va1J^ODJ1QN{heN!`RA^Jui!TY zXTg^QK>u4!llzrQ5bbF1ezyC&2PmF zXHay|-fS$tREud&-pl2I6WkGy5kUKC>x=Dy*IBb;h znJ)ytgchAQ2ip{+lH7xTwFl-3A$at6Z%Q{5>qwlc_G1iaGtuYSgWrzo0JodAfr1J>W~)dfRZq%e=-g)yU)68H_51X= z|D`L*Z}=>SfFzf77%{-Usj?PqZ;$W~@3V7&{_5_s`NrD-(7z`H^?T{|A9ri-Jy6an zjMnJI&b#i29Bc(GjjO6>;s2{6j?YDQ$cXC%DOb$6ox^c2C^_%%UV4#l$7lS{W|5|D z6*|1OkB|A~Yy55Ck;wIF=7WJp_?~>4F~39WXK5`hu1@NGC1uh;+AV z?BaEqwGwO7rEAD4K<&Wq*-TIQkL;P5WC^82*qZ+3;20W2VQ~}xH$|2!c==4>=&~5wa7O#@TN=_`17POY zlWN}-@Vr~*(dufK8l(L)=`h6$nTBvnW>NBIp`|0N(;eSp!wEAH7qBJSDw#z{Jzho#2g^DSFm|LLMas2h3D)M2c2+*_) zWZ|TvlNt#F@73Q;M3UP3*X=sxzcAo?&2U{w7(FD(*EdVg-= z=3jO8_zi_uwp)DwDarsajP{iO7{&p_F!~=NO#5)X2)iX+GSK5W*NjyA zif6;>#P@kps}K|B*Ajd1?mA9vwI0jSol84HoYnz!|;oI21yBpsWEFf7m_o zzJ8pgT?EX!tGey34O1S0XS!)j13kVKJc-dC9aPKVCTn0l&V3X+k6QvLrSIMJ!8P!? zVf8OFbjEDlC?4fn<&WR+YV?P`Z}0)|=yzu};%(l`Y~GL`=BiV2FMOUMAgT(2s2cEc zFkGt4_o+zj`_8Ekjqs*MRf3LfnO9phcE}}Ofy|OW<1AnYl3l|El92e#7nCt zbwQxFny^H=i$DuYdvt-ecp@z`&U`%v88aS7?M+$xms#`;@Yy{6+Tma4#!D?6PC*t^ zSAC6_IL?OkB;A_T{f~ zfhhaWfQsgbbByJ$Zs8-7jj%u)McHp8N772b2^jzugMjG@p<6A_VDv-L1fPPte3e!3 zamO*Xu&=(7<)~m=O?$0gjpZ{|iL9ek>i>>313J>Xw?}G6T!P`L$I8jAK2Ra>94S)a z(^PbU#lN$b-;^ifRHDVoxD?ll3Jtj>(<(~kn6F1vfx1lKTY%1u7QAnQwf)*P`4M8r zKU#YP6}B*Gku-oq{oM=34-5%;H>aum4wA^eGz^wtMEuIf-P~&zHKsS^Da7DH2a3Ck zfY1YrS0O=O=5t-<{$rQ=(=$|z@`=?>4suvESsH?X?207@8r8T3i-%bPtdI_g1B8gV8wl}fFZ^YDqLtgZET95w$ymIK>{MA!#Pl969 zt}2&ue(f5u$&UjKR3KO@3xy{V+yR9G<5GqMI%FttltUp?yFjK6R!$VeX;;*HJpL81 z`-KX(WA{z_`_~uz2e{`$pCS#`q{BS4m`3TWXZ=65VQdX?4uHi5>U1#tXq-I?pT|`5 zTb>jW@RbDfC*7}i#`LnQGj!wAt>r}$LnU8k3jui2N|7JFiJxgG&EKc>{tSAWn3eZA zemL#A(*dNq1MtEJd|`2;V{j~#cUvm9?9 z193Fcw_a6v*}*>4gf)1bOp9c(73Us179HqoZvu}72|rsi;lK2w03Go%RIgF{>8#Bq zM%&EE<<<1qWfrHZ&i?^jH&YRbECZ^DKg%1ASXW3koVzBBiom<@KVj)wU9S!#h#nfy=mJ6v>8%P3b>g=_`Vth3Vr%Qo;BPUL^{o z=xrk11*E((K8Q8Rdb}%oEx%SYm}|T9TglOYwl?4C`)=`L-rh$TZ%m3&EynTlXHBz& zpab90@FH6rIFH_cp#nw96hUNj{H{?!<^A%XPLvm4f#+zuX>#r|&ipw&M%tAf{9#*t zfbBDv&vm?!w7M%{046p$nBl;d3moknVatVc6tNMg;+j$dNqImuP=7TXG)A4ijjzA_AhPRrE09v)&p)PbzQaU?jD_0hu=9%`gu7hB5MaOV{bb> zcX0VwzDGX&B1jj|{qjs{_ePxbt98ZzL%K!%1RGMP;^(Iun)~}Tvkpa?V8)$O!A^Ly zphXF>BUT831R}nUjW#}#zPn5gX4>_YX#fXAp6D?bm6KyskIe63woNrZjTg+XKYyWp z7QVwE*$A+H;uoUu4xPfVmmvr*30R(NG#M)qKoRR=imd&aA>ZK_J4YEF9|GRogDbcP zm5M`2u16)^c9F~F^49kj*gE;^;)95nDMxt}Oa^~!IUWje?#36Xbn&=|T4F0{Mp-(7 z0km&C*c(vv$xUuIr$RO6%)V7z8`eN<23!A6H@gu)v)KuA*Zp1~m=M%@hE3gxY$hh% zwZHFBWQ{Tdx8f=|zMM&+NpUs14}v?lIvqB=R(;1}-uxABfy*ut-s3#;%YiNH`97X*JKa z8AzIC3rKYZs0t%HdnG_~0dB;zXatf{6Ois|Z#>xQz?ZYwko!8%3M!1!D$(OL`4W9*;xR@VS8f9Hgjwb%E6$#5 z#Mq@W{t~s^U@QgxDA)qDO(Z696M-UZysP^ibr=YziF9e1*G8)o?Y_U=Qv)}wmnYWO zz6Z7SRSX)Z)vg-7*kx7h@f%M7ArOZqxSrZH;ndjESk{x@c-8Q^#ZH;<>(TVYhM}mq zb+Z+Fvq>bT3<-@JXm?<~e+c86iFC8FEWw-OYq}I4(>LR@GFPg4&`I%oGlS%hoSOj& zvuYaL(-}Vgowq2J4I^AJG|PVc2H4R6eO-6|LG3a&!z&OKITc*u-)#e+sKA6`-X6p} zc;Z+flyKVnWMG1SvSDxM1Bi zN5-lY=k)B?{d%kZnP`m2*tsie?Q-r^p6Zq&g5`)%^{fsLRfD9yU;6MCn;g(0 z)rC=>j*IUlYTtgCuScSe=9o*a9{`m=pYkt0oW2Q)C-*=q@YO*ip3!Or8AiXc&m7+ksK%8=!jL41G9BJD`+n@8 zZxSKXzH_rdsgDFDIx@oEU=0X*E*nTO^HS?lY z5Fzb@7S$7O_%vfbuWs~i@}{_R&Ap}aNM=UrPG3P_w7O7ZBGx)V+?cr^I#B-hHG$Mh z4wjymdtY9#+dklcR!5)SU|C_llzMk!V+^dZdHqf$pqR+y^?8}QjQ_!fZz@8+<4VMgT6~fiA2d_XjbWb^q6a%AZ%{u!1?W@P>DgN@++XKPb6-h>_5P z`6T#Z@GJzxQ;fgo*cP5A6*P0tjDq0GZ8Rm_m3|^zW{nR@#?rxAEZptEr52WtEFlv! z9dV_|ub=qRw96#~vxk9tRg3_%`BEOup2gm$Sq}+^M0WejW&t6P%rcqCw-lpGs1G3U z)P#0$q9Wlw`6}FKHxI8p>bJQb$VRpU(I$0ejxF=Crh>uP+hI7T^GA+SZyEtEWe;O0 z8*BF5-hT*RgB$t|Ur1Ki@phyWG4gi$*b-`V9wGc)PZ-P( zS^_o(#VME$K6Bf*6k31P@Q^4>SlhvvbQc?NmoY%f+K_~*sM}wgj8xPxGwKtPdEqz( zDrnMq8}Whv$BBbrdcH+WRSxnH^E58!WFDRPvM3TTk{P^$ zi=;+_oYoK&7yq>c^hEdeklgCcb?vLLL}^opB+Za~Bunp^JqHebR_>rV@)b zV6F*Sdk(tgt%1;;0<9OM&xSa$@eH&Efk6DgcQj!QSS&d<`@|bBN{wEnQQu?+a){Wk zJfcLX`1eqyaYLiiUkzJ8+ikAW&CUTIbSWEe+4&HlO=RBn*tC7UVq&eK(yCH@es2?p zyi!@%>?!!OUkauxrq6DBJS`<~987tp`O86scg5czD`IKXW-{?b?b+rL7+PT8(54zX z#CS;tgndne(wknVR(g$T)dJ(Xg7Vewc%ubfQIEuTc(-AVxh0|p&0)yDa%a1g%_b7k zmq6nR@bd(Ndp5P&^SpQHQHduUgZl%)2+ETK2V7@R*C%y?2g!5i{{_h^6r1TXgiK(g zCin^0%=sJDhC85UI$LyWdJ85Mf>$`D3oTb)M@Cb;{;ZDua=z268Kg@kRb=4sD-?9< z0Pu+7wsS-nnK|8lfSRZ2_CJZBp{TBpBqu=R!&UV`b3bj9m$z@hEgKi%I#^{OmO|bKuVo%QHVUh$G`OD{)P?0Ksv#f#2@X%d zXJc~XqexJBC%u9PGvG!wrDW)6EpFuke!6~=w5>>>MP{H6SCX0$@>5&T#Q}nNs5GYS zeb1jYfUzswu9vQR_V+(%_-1j&620FPJNMa1bAA}zhpW~bTH#v(%*h0XKjT}xXX0om;`X|z)M&*Gw@l#X z|6mFHi4Vh3ztu7O=0Y4QNh-;0bB>kZdqj9Wyl{GUwh`c z(>A4}sT{Snf**y6VL(1Q8x!8lYQLC`0{~TJT%O;9YX;xj)pC?4UgX>#vxV(4X;HU{ z;aWaSXj3aKf=c$wB8()w0|(@)p&&5l47i{m6>G&{$BYVo5102o8X>Q*P#eo>DsC(H z*Z(}!0FoyX3*-S01vnY626eMGC8e_^QVZN=x1v6z|9>O`4Y5Y1jVhnm-voRFGz(qV3x!dG zN`jW`9_j8kgr{sgA647@Iw-rf^;6pH%NeL!7#LH$InaWPCU}2wO9I=FU|fGQwHIx5 z(Iut6E7V9Fzk>ZxT)Y!HJGn1l7oqP)3LbP{hyhH;0fzzi72X3%U7RdXvpVL)AjYk|`;h4|zA^EpWMme@e<6TD_+j~Ll zUMH2UJ79|h?jKpiP_RAFYV*=DyKgXf_PcHO&*pcH9y=wVEZF0}rj0Dq09Txf_dblp z5C2MMuu}L3w<2iq)R=q(fAAy3d2MBC#o_N^l@S9%2v;z@=syL)wv$n%_RoIPMtdLrdD~D_8+M7b=*^1Nx z8}FU6fXeSdlNZUb$5@=p!Oph#SPe^wXhzDjJ1-;C@3DdeK!55|=4l-*(yF7&PtAVb z_@HA&NL5_nkscw5YAx8t>oWF#Dm#qF4frVx<^^SOHClu+_$L>JfZ%Fy3t0^m2^A;7 zPV2w#yincjsjWGGF-&+V*NnDWujT_PpJ_Wsy(Z-Vnk9qRg#MOhI#TN6mOY3{XPt{Ogr5>idl}{% zhSykmQvf$iDv#RWAPN&hgRpS~fN=5C)fWNW&91n4Tr(YYW)Iq5`<|1<95XO)>`hNL z71^0Iz~wmnifT&c1XUU_*j9CJy!9LDR7#-4+JRqo3G<`qBKkNf(_~$_a}a0laZ+9|Y6oTvX(VZd{z24B-nfi%M7E;nsr! zTa%#E0Cqsmg81!y5_c=xV{*nZymVTHC_?-1Hq3|iJ_Adi50m*p^|sWb&@{TiqY&HZ z4R?qvd}p_3p*^&a|$iBe|WQgveQ^b3InJWLKvBK3H3bEVKGCp5kA?ka9oh^{wtcMU3%1 z(;$^Ya+D!pK{1lpm;GR~3AI8!_Xnc#Xu!IValh->sbVWH@;7|)Y&1t=SHQ97LbR~m z5V*zqN%!^(h8wrI*#fzMFSyXRi;RuV&cm;uuCh;m7Is?sC~GSkIIkkFaQ;$GLyST+ z#`3Nij7-HdxW{HB;T9^)7iBv!8&RRUV|qTS#r|hh29l_-fpEsTE|m+ZyWthF0o~6& zu>Gl-z!1l>!vQDLFlFf0fiG3C{rt=5c~XJxq^(TAKRiLH?{nsjT1VAcR`??Ao{L)Q z{5{{AF{-x83?4H~a09)m{iy@!f9*JraxRD)-gWG;1S-0FC+?W7FChU}RLf7rCbUIkNGVn--F!rtC4e^GBH=f^~B( zDe66vc}9C*+mdu+D)4(<&VsN3`jmZp4JKqz~+H11>YhOGNVXzf9=Lx}>Z8GA4p{9+KyW>jF3yQpQsVORE>(vxanx5Zt%;XyTxl>EZ9K#IDtMx1A44+u zw_o$*K2U8iIZD)8oyG;Ltr87?vpjH<4&2pX@gNFaN2E&XhY*hVfOUs@nii(=E>0IF zu+>7;dlfN|;?K`AB@j`Pk-~oA{fh117mRtjkK13{Xsh$C0E3|uc!&iP6LUMXK_p9{ z;6(Iuw)G5NxPoc7+&Wg(-?~r}Y42s>y(!eC`I$o3l-_Zp;mzWOYy7=auuqSFfF`Qe zXQw0>0M<=}J>Q)-`e(+i0hu%@U+w^zXJ6ay@f4r|nn8!=j|FS}=H8&nhvVNegVXd@ zn~JG?0}QCHjAgE>^+IOwFxyCk3){&)CCU_;<_UfNzo(c8og!(jt_@iDJ}f)wc=)zq z?2j$2h}FP+MNj-9*rkb9>iTfuO?Dpvb%z3Gc71jV@K?ppVrVU0KoN6jUM03=ltJ-#~-iOKVF3 z>uZ1TRSqfrv+E9clbEP(^^njj_Kg3Xwu2=8<{E1r5&1k#6b{MELcxN+_yIc^0-bQY zQ`44qsd1mce?7PqyY&Gj_Tvjt!BmR=>KBa*H5os!>Iefdt&l1mKJ+LCBEj7AGFB&r z2U}WNh858~SKg!N*l#g&Y62};{hs%XpKRF^+Jr4(j`m4^$wHXK+~#FG@(e2Z5J zbXSkxf%_mh-5q7$)Fz)Q)&%p>>GhO-d##z=E{>kmZQj>={IyhtM~jaJ5=U~Q;%K<8 zKiR2Vi(T!o;LOjuf;*o&Uwe3{cnh#{O{NQU-_rp;t7YXL4ELH^; z=Mwumj;NoU5_PWZj_ZH2dO)u&krBf_o4CaGxqp!wr5{p{X9^-6KN#Q(_b>sbKC?-u zI_auEoJyn-c&99mb(sf!e;DnQ2Jj2M$%PA%YoS8YGU|pMWy_IZma6=!LxY2ZfBx9= zN1~+fH~1UWU&Y^J(eCac(aK-xJI1KTV|EbehB=U0>TOW|vJREvrsl zK_1`qRK6cm@$T+#*op4D49(49h^Cik3+`H#Meg@Xx}Hb|%$c7Pf2DJBSv6SRxVpdNV98yS+((Vi)6j znar`yEW7hEPOtP^Hn}$!E4BRN4`eQUmDrTQ68D{vUcdc9`YsIxHls>6I*0I;91-4t z-@KR)577&|tR`jDYGg#{^rGgwU)OPl`r~li-Pwt*S3t5reE%4@7^2~lb&q1VBm7Vm zi9D01O$;uvy=k9aFCnjWBjmeMzNFDZ`cPrdZ!6C4Vk zpHQXsofGU)-bh?Gl50M>iry;c3IY<-vtK6c8oVwvzill6*b5+l6rS?%E_N2}>^d*b zfj^QqCHEM^svDkNsPkCe+DKjJrF#?jF0D;|mk2N|zvawix1j4IVj%cvfWl0(4If6E z_vq1QiPN!W#x_ zyu1fz<6>H&!*7NboA*V{H{6>dPDaTDXB;dh7fYL(Y=MRG8iT2~NxnZMBVSBb3oxYM zK;}>XR*wvB=*k(4{Qdh^E5YQ5QS8}VY-{gy7G;%*ki}%-viRT4es_y-zwiS|3;(byL(``?p*!`CI?_VU@DUp;-5|id~X_J>-%GAO; zJeOuep|3RLKpIZpaS(;heOT~w4Qwif(Q1|tkG~P>*0g4Rz5j_zx0!}xI{Bx+ZVSw2 z`1JWQHOh0d>i8m?wK^7gLd5lgEEWiWSQ(_s4APj=repJ6jVX4u*6l>E`iSdt5^*z% z?ANqOzB5-6M&-3Gd_`TLPQ-+z4EMJ^8RaRtHm(2rtybs$0&ZFGr?A8_%zkInV_hY^ z-I^`(9DyG=qr-EQX+p&RDW?f3H`R0S&WU0dsYEH|x0_QPJ(rd3*gnQ-z3y(2zR>#$ zX%cIpk=vOR`=M6fjoE!Qkm7znMQX)sR()nKDk=(c)+*Mt8!?KltK^tzo2R6H4R`TQ zrH{#UscqPj0QYmV)_8z=0ubu8c0;Jglh@u9C_ZJ4fPxbAZM#A8j_C932;uYJZ(o#j zh`9NhS5eVI{XM!f~C|Y{go9Ww>#-GU|xHmWGm_VvX`J+67_gF0@MN-i5?Eo2tuQ zu**#!i;TjLl+?~-YWlGvB(_x!5tyxyiE_q=T<8WaM>jyF8RQ{2oq74Qz~hUdy%Oas zt{sUb7I~}N6)bbH;6Xuj*N$@}8oN744Dy^(;gd45 zQ~qBZf3ALqNzpDS0fhfn>8kXUrix-g#P(Kj&n)V~J7l7Ne1nITED8PHU)SE1xmxh( zcW+bkO(&~cXE(Q5&4N%7;O>|4@USaYe-1$(Y?l!t2g!J+WDP8de-E=qe%9enoW~wT zJJq#-#CfXX2EA6zA1ap>9Ydr4|2rmD|_w4h? zL3(CN)ie3y^DDv2zV2UMgFF%3?P2IMDJRYm^3_Ct;mi(}@&a+K)2>-Ul0L%yqlQv0 zXoGx>{M>o@?KpF`B`rEc0wpj_EuiC;l2lEn^wZnPJFsatBQf1wcCq_p&lj59GJJe| za6|0RJdh^76$6>dd|&7P+XaB+E7~vJ4Yj_=uzl^9vzG;LF7ourTg=EL?->cAls@+mk~D`%gR3Nj^F*P; z%p3X0tIPhm#r9O?>C)jIQnhCD8Z%k%LosNOY}35OXNGcFB3M^w1+bA%_D_7p>$Y3V zk0QlTMtNBK3`ZP$<{!2a&ONYB;y#!8p%KO$fv&glW!EGBMF6L1Zj;Cpe&$CILcnYx zXTp>S@}Tn?YqWC1qJR^yL36JYFSOnKu1txKlvO*va2*BsZpQ;11=@sA_b6d1$}Gs) z{fD1h(=*Pr(FMBS zApM6B5{ffQmC;%Z^hOx1xvPNsB&_E1m!`|rg=J=srDQcCv)uH@_Suzj>9~Lhd^eL8 zv)5%2v!3H72vEUa2oL&$^3?811qJIs&Z4t$Qo*&^P)C;HFU_aCdG2tUFiysuo&9

&@DLGRK%*Jlo4Vna)H2v-V^Q}vx{X2J&Z{&}LN2O*|+tE9@ zbl9oLoBM%Cf(zZ0D96u-b(WeHHqB1qD zYS)6SGK-kOmHQ*ZKL+QEI#xH%p|kUu{wtU zkptp)J#G2E=wB^iHeYWy=Axn88|VUNHA23nwsbraW8n~R;o0}y{do0FWCHM8InJK2 z&Y4#Y1x2^yz8qHI_I2nfddu?s)^mJS?xb<2F2K0w(DiZ)So%Og{%E%Mt z0AC*AEJC`QxF0=RmQ)S3a<=mkB#atVw(+?F*3r-M-^7nBX2|>Wy}EwzF8q4m{JIy} zS_aJuBsG7l*fPxLGzn=K9}?G zz}nUL59A}15r7*Nf_Eynlv%TI%b~=yAJ2t%R~$TV+!zMzb-YsLb;ia zJ4BPjj;4$n6pgbEvxCBeeU%e9;T9RlmWLS@{jHF=1)4a+Fxl|>I!C1)@Ar8(&`J$O zM$fuk8SR-xA0<0L)+9Kx4t~jLY8qQ+c3D>Pvk%w^&)F}PEEaX{#WRfk;DxkyK!ObO zovJxHe?D4$uKjM0_`Rwa`5Yf>GGCYMaP4y(odCb*T>rD++a1YJ;3hENa)=$|=5{v4 zlozmimpeMW5S$t9X)g0G!Ns7`%O>}^jWZz=F4U#PEEKH3c7lew=mf@87+%vGIZf$P zN6(Q4To-vv7w*$b&U10v5n^%m3-S-NTI^y^Nt04ahm(Iu9ffE3&NfA*8twB8AISR^5n9Ztb* zrx*&{qWtY$;ETD{wFL|RGhNn==|VPu=@u-uC>X~rORsSzjN<=Ab5l0!ziI#0H9pnJ zTv_3t9WEO#B&o>;$qM+5h6ZabXCgjbNBM{;jy!d^3Is7ejdJGTK`8VUedcwiv~x$> zjn6A5Kt4a?Sf_D&r&@h5wiMN}AMbR`>2&vOXSih~nh;VskJ6*1we=N7z2C)(A2n?H|#3F z2H+bRP_aQR(y@Mw`qH%~F?`6{0O{f49KY6qNh00TyOAf( zd@2-ZX+J&`0;PzwAfyX06#vT7*H zj=s6wvLG;_n}zLQ8!I-b#o-1NQ-}CU14yee4ocH!O5=+elA8q)ZfBZ&epu)YrePx+-rXJJtD^{?*IGpUh=5Iy^Eg*aNOm zDFE|>N}(+JISX+8JElR~EMv_?3;BLPY*8@s(|r}e_Z6y90&txM!x=hg56K){NHeEc zv6;s$Q4yCr;K?4YUQqSNac;Fl_lBBB6uYDyk1u||wYU!2v@2lRcOCR}RTjEU!%wue zN=?`cG}Co!L4x5Fws27#i?vs}Q&X4atKJhr3mL@=L_eJg23oQ2>}b`Q7~CXI^G^Ji zaE9Q>{Gu3iz07@<6h>_F-7-+pJ~D!S5%_-R9nm|VJJa2bQJV8Q)BQfDF6T1vZlN@+ zNn*f;!gq@u5G}q|adQcBB7%gwV~kHPH%}yVs>^SeNI{5%ccDoG zSE|dgZhZ8hwE&-f*12?iD+x`-a>fM|UG!HVaTh5FFKDaVhBH5=mR}QKlpFZxYwx;@ z1pCf!s_{d3u)v2uYU)S~DcVgsy<>$@{^JQJf8ClCa6`y3J^*eBWWdCXAjc3)EavI5 z7`*iN%UomzBvx>1&;B21m8izMUi4_X=I9Ee+CD$|VXrcVB#(-|@)HAQNAp`?>zbzN z>dpcSk!gvTovtc9muGKGp;tfdZapCysj21Ebd}w3TkjV#aRdrB+_VgQUJY+qI80G< z_e?C7c8cVj1VySYl(wg%)1t!dxAZwd22UQN7H((CJ3FAU zRU{{@A0&6T%jDaJE-U`UCtm5Rn^kO*NrM!1OTTC>HE zk_qNQeh5H1l7^}~vD-iAbKh(hxi6TH4lQN`lbxQHUXNX=ItvLP#hZPle{lNTKO9)m zAEq2Yef*6Q>1yQ|6NV!{FkpWu%-$Ds$%sySA;vcM3Yg9^su-A#vW^IDy7p2f4c7st^SL7@}-gFW$8~$ z#C_x;W+(%<4~Ob1g^x;Qh;@>=fUr^*yneNnX-El7sPI%Da6}?{6e3#1*>XAGGFNM4 z*td-`3t4z+h!T~^KT+SGxfEc@pW|<~D+!!D{p5sY=1cbtOrS!ppfB-ixR}XfVIi^% zd>Lm9Uw3)0{vYVRs-_0qLvF-9Zn-pJ-R5V~`gW14Dzj}ns+vx~CkDv; z{aOsb3<7BK+;W5`dZ^h3*NW!6HWG?xdlCo*5hl!9RuKrOw=fXR*b=V5S94 zB820tl@im0wD1tpN4;^lgyL+|{!vr6P2h0td^|<=*MC~B*%IZW=Lfu2>0>DPDczavu;BJE{D727rLhb z&K7oG8Q0f5l!r@frG}DJ80d_PNGhhTM{_&Z;cG8HaSigAJ2@feMF>kJb76|c2)*;^ zhbDsTNW_VIHYvZz|Ie-bg6+KUBwyvD${68eHWz4+v9xCfO9NEsHbTZA;Ivea&mh(V+P(&u~f)dPu|Vt~sl zHQz!jVYom!mK@cwr*FscrI^Ubm(<~J%r?@HI-_%n_BY*wHWdUlYV~>5_D1OKLfB8y zjUS)eMT)$F{^T@WN`(vIV&1wB=&O6KAKA($QD-bW!7@XbKs0)?!NB3ndWvq7RL*dg?cEQ@kk4XM|4RGxs zf$eCFKs$10|EX!ln^uz;7UY1gx$RA#Z1K~Yis)zmI@PTm?_Z4jsE960e|l#j79^BL z$=b6bax44x@Min~vhm6eu2>>Zi*l5JwXt%m^4BApas%{7CBth;aBcUhsV_xGfw9een?sZz_= z#x)OxAi@1ESrTvvl34E!UU=%b8z8A1?@M9qyB9kBA}!jqph4s=KO5kC@B@N{K=tAR z9q;b3m9RCxx)3Q9Xh7)tWccj-R=U*Dd$FuY{&3~{>nuJ%jULehQ501=z7cLcD9Z78 zcNO^u4}ZU{2qLe&eJ|mzJ^_iiHJ5V~QX4s&45(|7c6LCq5nW^hpJu^iAP|TB0hPw) z@;f2sQQ1?0H@|DiPQxuqaJoFW& zO$un0>@so)lzkJ}_M0-^rbY?i*NIvR;}QA^1lfPP!S8MvM7DrY!3ABuJKyT^s&KaO7B+iiYsvKve9a~OKqGsI89pD_A7@r9Ppqi?KPc@%DUUN{qw zlMz&jYx2N4{`R5WOUoddut~|cDGh7H-wWk8X80ve9s~CWk6jsisVNM&Ke+sNOzXao z1)Fm~90j4c%qzrJx4#bepn2orF?Tqg)t+wp??dn9oq9~36YCX;I4{~D^zT;popHtF zujY_OhTkEBP1>V9>u)+=@4)5`GjKWt&7X}#a6dci<^^UH%4!gyIQ^fadqEX->v(1D z$1WG4J?cDe**7yzbp?AfV_AI`fC!lieh9^L`EjhiDG@gt5M&x)O+bPx#&czZ%rtC; zOrNs$_{F=%aWv46P8y!Tw3eB&H^ro?f7C&0K~-J5wlvpK09Djk?pmvbnASZT=e;8>7p@$=P^5iGJVC;c7*1(MwuUa0jr?#F0J!g7T1^bEB%!W&b9a*JCpG;p#3FIx5g;;du%b zfI;}Go1*)HKXU0dVu%`kT_KqJbN_J??euYUf`(}A0vp`6WU+LwVrr4J1YvPYw(5S$ z*GOu-3Zs=Q;bz+d=*j`(7Cd}Ujc8obNZUwkIY087m%ZJ~4!@!n-MbV$?I_$J1qdnSKzwaTP5;o6I z@L&di-!yQ`3Hp9rb(_2TBlu^T?v`@Gsij!LQ~86J0i118Z1Nx?f}&58jwW9>o!t<% zBL&E~9V?bw!9G(#cQ(P6YmkSp>cutd_PI<&Z?<~$<9m;$e=GDQ#5Q85fuIkUCEAgl zP1>daSGhK?3x}MMhURwv;509K;VJvqz5xP_Xfz;!KuHjS8+Gpczo()l5S{()EJRK0 z8{=4a_h@Zj>J78}6sQs|!RL0^5+Anc&@XJB-G3faMvL3uY1D|9w&b<HD!V3l^`|_sCqr)H-W4yo~jemGyTdj-$ZZdT2vA&Tf?|>Fs*!Fbq z17b;-wd;JRF?%(=6L{s`YOQ%p|C86yTt-CkUA+d1TZpS;tv23%gy7tKncl{mbqMdI zs&0T$X~tSEz36US32R@>zY8RaOn=#f_}pvruFmTbrv;X)Ai9DmHpK_7{@~67%-0@t zwSEivTZX`19sCOK(G_^VKx`0Jo_-D@@kHFoL&`?a^M+Cd9vIESy+rL}`(;+7G+9YJ z%f_K@*?9E%GMOkC>oJ~_Z(cQmJZj{1U4}XS?oLx^rlv}yqdm<&Iau_9!Qc_NW{bD^ z09oMuxUJ^PXC5jVp|WkxyYk?`aCde{>wW+4f!!~F4lHy;-Q>OCUP3#Lrc}ayG{zr0 z+xjm{XuHfMKE*T+9M79aT=aD?6pzd;XJkc_A1`AF9CnliKpnfmPkQgq@i4Z{JvQ{In^w z8SF+21LYQ6O6yHKaOi2N&1dR@%guY1@HHOYKm2;k2V0j{%)B?+5Q}n4E3Qk~eOx=c zMQbfXR&eL(ckuhvyvNUA;cojA>W*zd3Z>%>Hl{^Qc#z~S87Dv zFx_K;!Uv4#h<;_*^X_(hxd^E6Yl$awnc8Y>pABDd#J@!(lS0U+NFVT-7DNbjw8{Tz z>Z`+|Y`(v55SEYzgN7xQP`aeMQyPPASW+n|X{32T8tIZy2~jEOP(T!=LwW^7Q1YE+ zm+$Z8@((Y)I5X#SW=@~EO{y;E6UVzHO_Fd>e1ON1zh9mJT`to))455PGvsQ7&}U8t zf!6x=%8~wC(x#FASH-6WP9vOnf+lBwOTG&d=}~@|5m0$F*hH1RAr&&JVg>J63s0nd z2)KxHeqI7@s!oJGf}SkVp7ZkiKA#h(u{0=S%Q)#wL{=gb>%V&Ge<^yIzFqzXWHGf@GjFU|gO z?8vkKE%Cdmmm`t*4K3=HV(EWEM{<~AD#X$I#oxQ%f%LQhG;@IFs$&t8%58NzJ5nAr zJDX$z!noSY_uP4b^wqcV<)|Jrp+edf&{!8DA!Bklz0kli%ob9d!MZuOaJ&}8ee^!i zp;q$qOm31yMkqR1fLzgb%>9{{w^2N472#t%dZa3Sz%f29@!^qc>swL9gF3`5(XY>C z#Fi8ml*tNv1wyC<;x`;DZu;I5cQGbwE)(t841)lnoe`8u zW7{RB4tRLALXOlP&JOM9UT2r^nw>{Fl7*0Yh%>W-Wv)zuWy&6c=L}~VaeCzn%m^pC z*1~IQ5}a->}t2P)n4X`HoTvnBgJ6_})OTOI~DDIw(RvnW2ZPJXFB;EtNjy!YGB z*dkIpbd8DYxHDOB^sVVyw$n)nqZli;7-}_QlttxK^p|LBG-xh^75AGX}Dl@cp1|BWIuL+i|0R1*> z0`DqWr=GeDPm~WOQ!GqUogo7jB6u1+qB%!Wo5aw_?Hq%@gkoyiJkPGjj$bpSecyW9 ziY~C1vM+ zKnT4;68=(Ra91*jB0*~4?H{u;7;HP@!1}7NB94b~`r{7QnvuM?r+D9gT*|g2^%cX# z#61B;Xf-Os|HiP`$&|5yhTARvXzs4-O9p9Oi7@{6S@0LPwfEPg#A;w1EeUy?6ycl{ zDb~A5i2%A*zVq{dv#o(JgQqK!75;wUh+Gm$Z2dShqc zHqC)_p5!z~!k6voGQ^649b4&S-i9Mek#@1hcd=%Iav)fWG?fwyga{g4^-=OP1N_?G zhW`9ZsoU1@2R^~(ym)DT3##1<3f{ti_IZvT>B8`25MJ9VgbcgZI4yl@>iA?Gv9I&a z_t#&+!IWt&0__3m@vS-Tk;xRLg+!$e3M~*m0Px&V6>I)OD(Lj{*Ywyx@<_pSn_TyB z+C2`d`H=N}sPtQ(w-zQUf$pO_0%UYpe49l4edv+VtL`5pgVskFxu)OV;3xcTorjc| znkLaI>dxscO6pw#)i5xaeH(O_f-j8%FK=x8e{1BreDJvF1#nMPN3EB+k6N$Odsq%_ zC!kq$-a^LSYNBc5Q8kZS;E<$w9Y7 z@y?R}&e#mY9F>35uu0L6RQq#hs|#}$aFjOOjkdpQ%#a-LIZa7a+UivLYR5~gI9|=A z)L#!pIj>$_pS-}jK9eaf6Aya%_S?jVU$1>Da1#JlJ8naY8QBU#N* zdK2dyZ*N^M%JOt^>V=U;gx&e2;Sdpj8s|g-MvnlZ_UL1lsM=Cd9*8G(zz4dfJWlKq z(?C`pDlJn?n29Ix)iRQhCf{9q_9=tLca&Tmtn)095rF*E;rZbyFY|3~3uo#{8mwp= zgc4y-v+~OfBG8-n3uluz)+-CMP6lS3L40~-g@ty~L6Y*SJL7yqZ_95KBVKoZQ?h0w z@p)YOvNR|XjgzCAJQBgA1B5ER`xQRrxe?34R9Dq*FfV$5lDKvl9?PG_x8o+5_Ktii zv@%;tsnc7p6xi^V)EzB-e>%3)-~CUtzP}YzOT?z}{~?s^LD}xHDtmMkSC1<2D9O46 zH3_FeNLKHw_b)`L@`HwK&W^i&AFV-+`!UA@-{=ean987aT8)O|QOM$*=OhQ_ep~L0 zTZ_HVcadxED_&{4lsxG*1Vhe5fP-}RPPZ)_p5eAIx#=? zV*0jA+ryF$cP!Sq`CZk(bQbu*6gg!q-}y9gdB-!Y>HAL3Oa0_XzOpo}zc{?+xWw^* z-GcIY-``ub?U&|R=?jXfOn?{g+$8;DZHPHlO|fktP&1&zJ9R-AoY!O3+pikOWLh+% zucF9bWVw2ItQ^LB1f0Bx;ck)s+CoT{C!8iXW-bAXU-Kx)5;iJS5dSinJw2Q)+nTj8 zl}#7?s^s@rR6S6yL8^mdm`3A@8Y1f+AN4)zJHX9wkjLEUG_)hb^ln&us#9vX_Nn<} zr>P_3%n`PYj<=@R3N6GhT}bNKReV%hmzt6r1y2YrqNp{WxO0Dxr6&0jB>{ zZ>mIuC{mgrV&8|Rx9P^(d6252fR3YbRKAk_S#N7+v>s%rX{AR_I!y)g{!_x8krYBI z=-iY$or$F9OVNO*XzwQ9b4&yV=s}*tb8z_h{#}>%5mvF@HHmJQljR-fV(;V%vy=Ch za49lN_d37Lm~vupko9J`pOoiuDX2)Ouao%ZX}vGqM~2Y&!mqPNx)KtXAxfp;YL3_% zY=z({DCbwF>R(E5yXK2QmkC97l%Zv4YHj$d@3>KR~>)k@XfP|lCue6mE6PvI_cg{yc`pLwd3R@ z(~hbG8|*S}vyR(!5>QzGvh^wnVSeBmUwE->Dp;qG>NqBkl{?J*4KIDrT&-p zP5$}aIZV%rdS_4F?>y*G4bW5b;n#5C2fsV@SBV)_+a)oEqv_i;>jU~Pdw~qTW3-Ws zde9~@SS47>rYgX6Bzt42)6fZ|V^MXyg|LBTio*ab&NrAfI6sfrHgOw(Bn*<^COw(e z_e4Pmx(<9UVbWKnO4XOrRR}{(fgntfjgQwoN3+DU&2^#8cg@YcwYrlcPcR@7@#kh{2+tgT08aLCjL(jdSdg@R68 z^${5Xsq9a9{;Zcxs=FQ(h<;rs?wr3esUnHBq0YKkj{^)BP{WuphgI_y$I>DT1JF?2 zd`h{0ELC!R1=oi(hN#Ox%vCw&*bU;$<^2ap71MTTsP6)}EP%r%I43{=DmQv$<9>rz zV?3*8ZqwaM0>T!2fle9)H(>nwC)69+*_+FQApPbMdQn8IHRdM9j14Q&-mHVO~rDSmG?T)M&g$!jQrpuAfy6n zJLix8fBP`1rRq`2A1H)+oC{zg8QWynaH$+G3|r=UKx!vcsD^Zmpn19CtKkXybcUVh$a2Sf@A`~ctm>eV!(F3z*RN) zf@#8}9I@+!|Ibd^g@TqGTTE_*EClUVcT;?*So;@Fy-^I(YMv)6d%urbJ#ILzF_a-V zp7F@8vw(+Ugi?pnQh`n#Wi0>cB?k`2=fC%u-NSuV?6_0SS>G@;JXJHV0ct~}3#cO= zjNi_L33-V)JVeGS8`!o|^cHi6o9U5KFU`{#TJVZtmbFwnd@9qdLumy~3kAt~9!bW2 zY(H?AK_S__5JYgtZH)ng`O-dWycA|>J92EiU%_$pr$|N}*QoXL+6W|vfhnpZo$sAk z1~3eIzD;>|7m@k{LaVtbVe6cugbB>gCh#5bO3 zXf@4W$B_vzv1r{_U65aaNWPm)VbQ{|q`;mBp56+pV42JHm3!%&9=G&Hm@=ZmyzU&M z7h%lCmY|#eTz5xlpzXu)wNjI{N~$KLQ|74@Ylls70YXM7){;&X#e7AIUy+X4r0{Oc&-~Nw7RCc>%<0q|64?-Jx7KXvMzsh-LHb4Hy!kolUz&0$l@rl~k~C=6>e5JRLeZwlnF8uv6z%72H|o*2rxMH?@fINICR_HBx2cz|-v#lXXlVc?hb zX23XTe4MfSaN6+eSgM~cWxdg^*w*q56$lm&PYo7H9{y&j1B9qEkH@h1U=UONksJBU z`vqdJHgARy9`J9jZHWcMzFR=EvM`%CxRn+c9Z?9N*a)6KL1+CSDW{3Y2HT|lKgI-| zI}O(HX2Ee98%$dB^DpVn$rx{vUpmI;0R|MdLimaJAq<+MV*Eh6`r~P0j@cdj*b>s@ zsbFS#TI6?Sr7mT;!j_zU{u+(*aeAm}=Ytv2RgKskP@F(_wl9HMPr%aC3VNlqpx>?U)WLVTy|?Fn-}&(G3`}1|*cCv3Tt+|u z**Kh^R?3aiWRAU%sbIG!*Bj+xc~C2(aJ&H&!WB8Cm@vI@M8qs0%X!+h3eW%)UM`u zFy?jOA2=Rc+?f>&&zKte{7qCcX+?OD`Z;3y&26?fiIiWqvM*v_$(@w*9N_kAwJVCR zvl4cNxrl!dd}$9G`F*_o1U!b%k@FOr>eWekukm1d;LKT56pe2bBkkv60XQ+KIiV8E zZwNBUzNfe(5kVH?R}a?8Az!nNqcQbZ1Xt%xVoDltq19XXRe=i$3NG=CohV%y92j$r zLdaeeb?w*fKw14@<)H7URGF2(p(DGkI`NC;e#r$c1U5?xu;=rc{_VBljL@7p)(1%u z%@j8pIULsod*|#^6>r*~MDfjDjMU^{8d1$#V#{XgIT(-xKif%Y!~X51^NCIa|BIq( zRq?5mmeU5Q&=C<|`G4Q@Kp|je{}nh2R3YRRhb&(}DZ3pk0ltCZ5lA~MLOjpyIvdQL z0~QfbB1SJl8{MzwFR_I&?fFLN*my26)JC4iKX%uLwH%?{ADQ*G$Yl%6W;kqCmI3nI z4oUY~Sib@CSX{nf3irk4EUE(xOAG7L&d?#>q{K0Xav}4WQv9VT--5ceaj5wGge>A5D zL7nTbrB!ZG2+kD}53H{xKM=7R|CH_VS%XJHlMG9ukdya>ivx{0SRJ)(qCi6iCo;iAdoIvPwzhx280IpwonL z+<($rW)wn59s9f7w=E`J{-y|o+@iyWK6UHel?6jh1VOlaMZV4^g{53?1KGwRHk#j( zmvk{zdW=0FDdbj0w_HH67_%U-RYOd;Nejksb(`&;oP09rF$Bw~$4h)I`hCq=4>@miT79hl4p?vmN-#}m$)Wc51OM2CUU<$^lO;EJ^ZeXT?+;^ z#gXJ|Yrsm})nXeULECpPt-q6XtbtiVm`Pd|%#+MU@rr%}T0v~0>jKcvAG)yA0%?^< ze?_+3lcSa4{)WS(H4euqRjqi5)E|^i8g9aL!U+D_tlwCW&)DCFwCHx%VLS;LH{oNo z5@KERS$uuV#JkOvQiQsO27*EZ=f&Z>Blyoa;qe(UD%#e@K46-Omo-TUIs z9DPlbINZho*&T~h;=0aPc6|@=A}{HSvO#l7%_H3G1X-fgo6wfYZY;H^0wRz_BO38$ zxul&=!6XS|eJ0RZOh`-c-cCvd5egsTTnjb~J}Y$=Z^by@bJa0VWbAW`ZT@C`X+x~d!8pK-qk|S}x(@ZN& zVxWz1^WR4zI&85vaEwHMczk_8HCk0>@0gB?4xwNZbZpXg<&+!QH@W$u`&}Vyq-M2( ztuCmrJ7=xr7HDDRY+(@2M3L_$Z%+d=hUW6OwB_VNlzBq|d3e>~pFtFPS=dKF{zXd; zC&tM`Po+ZUOa2nt-;oUTNJX1R$1JmwP7RK#Re2iOam=2c-R$7nx4eCrX%c=n@LxgBk5{3!;HRJ?=Y$3(uJddhpvqQ#S=!bSA8SKel8uj&%8u zn<>vNBHEk(t*c|I%#|YsBiW|kMv^Fe++R1kNc`h^w4RQ`bI*G}2R*E-7swtKF3>L|EBc0}Ix ziCTu?QB!3ZXGm;qDPUZADB)D#Tog?+PQ_Z$$@Bmxp+^Bc1{SLOltM@i#6C8FXr1d} zo=JR8gLzY|s6yUI+AMJXvm3c#m36?2 zqZbE-s+Qdy?L(O97Xx+66QB!wEE3<-`06Z@EF1faMlXi8Ox=QxR=XaCOBS%j4w+pI z!!n54co)>Mfq`d4|`tES(!pzbo@S27B+xyn@07?7f^e zI}L3CvC&3@>D$Ozs(OK!4H$scKl^omoBCCESqZ+K=y&z+^r z+X`geTvf;w{*<8YcU0WDjnh z*-5f=n}07d?y$~Z2l$&!W&$2?Fa`s9f^knxs9b7pSTw!pmTZ41sxYe$FaqG;EkoEL za)jFr8~Be%jXV%-EWdDqIr{B6``7hC6_>Ts!);7XIoU}cH}!zaW$5!0=$*oG;^F>t zv+d4@!T;AiCH=;@N?n3o>{bW(3tuF}V}F(HduqU;j4rk8GHNfA~!>7ryo1#F!L1J40t1I|iYQ2$_uw z=p`=5yKy~O-|zUl>@AcLOh!wIyyiGXoyxjkBQg}tQ?rBp&BYx*F=|DZiX!5>+bk zaMic=?{^$;6NgOP6_GGI@7R-pVJ^VTfpB_@1y9gp3u1PruI})o92(!#)SICETxI)o zwOV9K46nEQF1FL|K1;ge72~mAzg{khB|I_z)<4{q;~8ahniyXRFxq_J!tf^}LSy6R z^BnXQVgSa9ca1Mi z4PdgQR@4{kU$Z{&6V*OY9DSpERx7>TrQ5~-q_@w-)zW;^$`fhONLgba@aBB7E;t*b zJZtGCbrdUKfL-tVU@uE0r&|H}0?%X_TwnUj?5=(DX>Wt&=s^4tP-+t`Yxp#*imcV+ z+PnfJ);y#c7aQn23?@0dDzb8_&-EJ9h2nI+zo9=}!zqOH{_`k6(&=5_frJq9P9I}2 zjqgOA?ZQ6Yj0cU*vj$u!_$^SGopY3I=5%(kbCh4nwQv$seoS>Wee3yoM{io|qMOtm zh7qT;Z%+!z0hxF+l9KZz=M|lQ%CBpbkygW!27S6I5?r+_!5hKCbhjXAK<^dEUbS)i z5J(~D!HyloM!=4zxkpet#*7$3E9jIN)J`HSUXCEGdqirK&|_3GkrnVke^E?;m?`C#&49C5^F z&@EKz4E3S?^+nmITgO%C*sahir#rT)4@JiaekLRMwzls4=!?T9wz$5p4rs1Mi z(C*1t6*;xgHM4+ab8~@zJ86M>i(|;jbI`GHofdS5M(s^-XONM zDOe~Bfn*~!kqJTqsV(9kol8xv$L;_vHB8SPj>Jn%RZ73qZeo)#M(vHWVjS`_5VIHa zy!U=q!_^mL$zPjR86wmi2tmX7fj6Y75yV-rEYZw6)>v$!U+9VAf$%`MZmlCC`xdP} zFP*~A%gb& z=}7{)EejQ|)#L*%qm&rYe4NsjumVK*$>VWb8p~=-lQ`6MIC6|K#Y~@sa6!oYg0sz0 z0894`$AWY@;=bC4xbY^AzgINaC#0##Hy3@Nm!LEzrQ4XA>D81R7#29C#ZVu7(|m&@ zqMLkwMKvKL>a{qgUnUWgYLD`=p--kcAakL4`7A(j+6upaz>sMfP%jlUv%?<3_ezv) zmvY5>v^)e7ug`YQY;-8~sZv%f4M}`Fr5^WU6C!FQuG1)g%j0l?!6(--$sZXC%pn>5 z_*xlkd$kd>ZF0w{n3-iS@L{wh)Hec*K8ezxm&rCk#an+nz}QfJOW4`{>@+@$&TN8* zJ9GHgQUN?q1^8z<*-7Sl58189885gIMB!^)&;lEJzD}> zcn2g2ng)e5Rl(ySH#2SdR4pfEM2G2ZSjfvh4j~`d(^)^w1rb2>D1oW;`N533BJ*)0YMCG&a!%gg2PoR9XC6;Yi=+X$cPR5;K?tFn(ZlgOQ@!5 zeL6fxr54jnL3Tr)RCkS+Rr=J~?uo&4NsM~wH^QPja`FD^l{OC#hzhU>7_5VDCxu~` z{If$2XQ4<=LnDA%DtauX0&t+K=pnBNZg#&q3@R)3YfN%2Q7(}c_M!Ocp-(`78{^Rm2HEgT z3XEKA;Zv~n2>X+BM2ut5CLt=d!l=x(FNx$J#r&VcYZ6~a@;!VZWKI=b$RB}_(Jql# z)ebN4idoz>5{RtQCgn4DZL6PH^Lu%3pDp;0n;gwDy3bG>N2BsMmE<$*ydqsogVE$S z%%141NwEkaJ)Z`cR(I!^;z$BWXk$la52@uWLbE`d3K8#R{Q2cekVa8m8Q*+z=1F*p zXia!Hws-Sv;9&fs^JlKDttDL%g^hDH(}t>7114lLUa`q~|A+-WZlHG_khMgn4ra?t zjF7EUOnE60t|0Eqh~9!jbCf3vBJnFsmb(qb?hFTMDdzdS2X7Oa5!pO`#Vt8^)FSOK zoeRr!*6kd8sGS94vN7*8=s$6UtD~{SM3O10S9|r4B$nmqtE3@g(1UaV8+}T5E%dFSRhOhjxa@Ba4bPt$yQjFHp zd5$sb`h{a)@F>4*Hg8?P37BA(4RXp->p5^MB6Oa$4%>FPV@1No7pid~U4zS-2fu&o z+fB_bGLVhhE;fe1ZPCwxX7sDhbrijJ3k->m@Cs^a0B^yoLi|Ly*^EoRo|A%k|glXJ+(S#dcHKs&j zDqX9X8culm-60U4eMl) zf^(U2jR`6mI^Ef>{g-Z^kJs3m(99QWffAv?g`&kwA~0z*?}D&C#6W2JRc4sXSLO{_ zkn-$ippj!vZb^3N1R=+#+-vlZBWRBSw z&=CI=9Xr!AmC-ByZe5V_-~NRgVY=HWf}&2QMC`}(;q30mmo;CS^pl$K$`LO+7`KS( zBYl;UGQF^=rEolgq5F?ivAKtz9Q8~m+0?3lj3SD*w$i5vPpOW*jE}tUfCDUy@qhB` z&ce@4zAlZ|>}o!#Ab4ZqWV=N_GF7U|yVoz9#`mx;25ddk3xpIPs{~0rdW=m~oEjdR2L;Rj~Noqan)2<=Ey*^CbV(IdgYZ$cx%#kNg9Irq@bdneZr10f};~+=b+tFuNpK+d@_WU)8$%!N~w+) zVJ^3~kq;!QUilf^pBRb*Cg2xaU-=aWXD%p$lc;=D#kQVvA==C5j68O}0Rn}@NPliw zjZX=0QD6f>esSQ2BV{pJXm0c~Jy6%`cW%^4d_Oz8%d#naP#o$gM8ODhEhfbhWbr%>w1XAO?$TFrPN7hGx@8OXJ zIqjZChEt8TxeiB;a^EgmzEhb<<+a?Ba9i?cy{?-#O>EQ;PWoa=)bt~88!vWzh0t70 z+A1tK6=!ZM6?X;eSs~gdX+pXv3_3 z$^r6%Kie?mfod)I-?l|DwT&+0qM+hKtNj|p{dFg2V0_tj5I~s>%1QCZyTi-m^b)gK zaOY@FKQbrkUAJ#z)(=&Dxe+!HeN1eAUERAR zHR#(6J+czaN?1@ZmUc^~N9XiEV$4($C8vUObGDab>*PEcaMb;d9k*S>BydCkf&|kg z+<39=Frvg}=W!08ugm;W4MC?K__4)AIDCec{N<;uCyrD9ov@olN)!_WX44$VbbDjT z2U*k1E9k_w<`aGeRrm0*9fg}$DJtBnU-w@2^IXKEW*Rf8Xf$X{(O(m+hMyB1M875p zSyoMU-aRar@NPQdHj9_=Rt*5TQr*FInxDtLg8YecJiDQ$Qy?OD=R5O<&vP>a7t$%| z+N+g8Qhu3|27^3%xBm~@4D?e$P?zzWN0of3<_%&|-a-_!pv>`ZvX28sp@p*? zMbwXY17;?01tk%ZW_VYcrvUR@?rZ3MYJ+`ZUe$o+E&|*Jk6FVtyO#`8AD*0fy_@!? zd1`!(bx#w#$v7CrYdfb+1cKRA7JknD9pI$c>FjsmR#A^H2Z60}choUj2W!}sOF0Nr z%QhCE`;4K#7a^|M8(Xkd5qzzWKS0Q=MtR8YIQ7z6iaG8i8pPdCLH@j0>>;QkiUw+D z_xQ+KARFQ3?Qpsya0I9~zi{NRvn*?2t{QazB0VEM6Tl_R9HG6CO!Y9u$H>a|b^ zs2auOffSew2X6~tUN8F?VT)q^T22JZs+Iw|i~ucSZY?jDh#g37ls0YEOmecmWh!t3 z?QmDV4I0^kea2AG?Jd>-75zs$u9o#v+zVbc_gWgGC)v~<6qSEe8~X5Dz^ytzp>6D# z=<0>dCJ9xiP&>JE|RTiq!Af2i+;ey(qpZO+GB)?DcEtkt;hagei)GcC0e3E92tU z#If$1#nGe_OZ%m_m9#8hzt@@8vc=df5R3mh1Anl@pCqr!1_Ty^Wk_s{Rc$pjp_}0E XXdMQ=MX#TN+JLH}mO_o(gV6s6-?F6R diff --git a/packages.x86_64 b/packages.x86_64 index e5a18f6..5a5ad03 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -36,7 +36,7 @@ gnu-netcat gpart #gpm gptfdisk -grml-zsh-config +#grml-zsh-config grub hdparm hyperv @@ -124,19 +124,18 @@ wpa_supplicant wvdial xfsprogs xl2tpd +zsh ## TCET Linux Core xorg lightdm lightdm-gtk-greeter xdg-user-dirs -bash-completion +#bash-completion networkmanager network-manager-applet base-devel pacman-contrib -zsh -zsh-completions #virtualbox-guest-utils @@ -177,9 +176,9 @@ firefox ## TCET Linux Office Suite libreoffice-fresh -ttf-ms-fonts -ttf-roboto -noto-fonts +#ttf-ms-fonts +#ttf-roboto +#noto-fonts ## TCET Linux Bluetooth Driver & Manager bluez @@ -192,3 +191,7 @@ blueman # Printer Driver #cups #system-config-printer + +# Powerlevel10k +ttf-meslo-nerd-font-powerlevel10k +#zsh-theme-powerlevel10k-git From da48816f59f3079bda5864c7db69e2d12eac1219 Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Fri, 28 Apr 2023 20:35:14 +0530 Subject: [PATCH 02/19] Add files via upload --- .../usr/share/backgrounds/xfce/wallpaper6.png | Bin 0 -> 643745 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 airootfs/usr/share/backgrounds/xfce/wallpaper6.png diff --git a/airootfs/usr/share/backgrounds/xfce/wallpaper6.png b/airootfs/usr/share/backgrounds/xfce/wallpaper6.png new file mode 100644 index 0000000000000000000000000000000000000000..fc51cbe4cace967c019d7507b09a45608d68fdda GIT binary patch literal 643745 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

Ehdg*uzsU>S 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

Cdo4h znGk5Z==$K2xdjCU5rlg-?h0tb<~wHZaL%il@`esy?_G|hBi@Sgn;U=dd%nuSWn#Kv zv#B((1>&b}Cs^q2GhXJG)tF@x@@Tw*#f6S8mXwhirV{0hm51L0!Ve>)_f`Y`_Xma# zQ;_R`!xp<@-GG;d4oKL-1UA*w8;+ziV&GNT!JcYh>=a#P^puqR5DO8A`6g`9{ zW-HyWWy1d9N!19aY5He0n4qc9+OdZbVakf4;D2+xLD|0?w)v?n;BW(ANCZQ;(x*f)N@{VR)P8AH&xvxdX6@R63sx zXacNL&8xrrE_J+Q2c4_~7T~7&J|%7VcW2;Nmu>7xq~!4(TRveB|5L zzsF{vBMt6>q7n)juJt^Dui}XXN-L zDyZkzT^B?^3>^++$#`AJ+YR>8QJ9<3b3*VVaS0K`28l z+BJ?+QE)^o=N$ivXza85nqY_1nrJL%e$1nw9m@WWONn3h9cuE(>1^YV^~3u7M~Jp& zY{pr%SI0`UR6ypr#;@D6z~33=(bViSxx$U8-1nBc=WKYP@^wBuZ)x(CAqKUKt5hI2 zh7VG)Gvn

OR*$R+RPi9n?LbLBUaCZGNpJ@wP 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%0AuM`r=|swFG9{ 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

ZeTipPrB;J0_L%sF4fnN-QjBwzc&#Kn|gv^#5N~ zFs8GmfL^cRj$wB(5ljyd1hPnUtbLy*{5m!|1;y7L;1!6CZG_rCkfGI(DbwezCSj(~ zx#xItMsdUO=-LzF1eKy1j`BRo|J8@o3iNW+uVd)ovjj1k7{-%g!j!#Bk;8@vLIz{U7waIzM|wgAuwtjz%wK zp1&Th7+QV935=gDrJ+nkbgDAr5e_l9l8p;j-b=z^Z0H?G=e(`i7_{-_&jY37G!4aX z&t+vzF{(zTb2}7mpHQ#r>&Ph6GP3wwqLF?2%F-!4vH<#OLBb7gq`4RrBS8S$1zoU~)8+B=kNAY;pVU>#}y2$6x2T3oQiE*LEABJ_weL0Ko zexem{b!X0x zFS}eXjAS#&Amh~s-)ls)$?op?x1R>Nh6Z>5u1pTU^o{fPkOw#2O2V`13T2u{1b5Px z75Ij0Xq0o~(PeHYC;o5~<57<_XjJNlr3{E^X?lPw@I}#&D2{SHHI9INM9YiRhTj`@ zzNr4oDcuvEmJ?LHC>q{iphg4Y9}%wSiJoIsVdANs+j)&CE<67r*0;<{+I*ZD zYASm+HuU=b#bT==8VEULD2I+1H64mkHM2^&U7_9IvHV+^e|dTNEXWBsWA>*in~fD~ zdKb)pewzN)%V5=D%`QF9QtZ+Z7r8ZJ>r#{X?d!@Lprz~R1=2l378X)JW8Vt4Y4yO* z7>`j0fh9d`QO;OXjer=?p`(G|1(~-SB+A^(I17$8iaG@NKhcziAPZHwwLwnX%@9~G-b;e^h0_Ncm>vcCSEK4rUP~&jJ<3rnl z^WX0n$R~yrn5yR5m~C`SuJh zkXM8ORe+X8NQXu{M_=%JdtE&2rBhi&aKNR~@gwkA(^KnDxoz7dZYAdySy5okuUY{*nEnJx(zhG46zgbSeOkGk(q8F! zd_efo|IFnAer6tWbrQw^!xM9OL6m!MP~z<)7lsx_G|0!thqOBUzNbq?5*u7Vrdq*5KU=S?Jisu{i2TF9nolB#L zTis+oTMJ}A>4JKo?=KA3HjsDb z$228I>dSL9L3~lUOx-kte|of#b&cc9eL$zLFyDw2=akvox|vVInL zpzjt$0$$=Vd)LPz&YCZ~ShC?Wcj^;O6GCSk{+KpKw>iUE?d!X}g-&12fWAQFOW^W5 zx%oZ-aC9z_PlZXqHe&z5XU#gHt z@J{{paZ@ob;PQ-AaY_M~vKPzlP#h$zNE(on70B@^z$?$Sp6gIlyEL_55nm}Hh5){# zVLR&15u>M$R}H?9T{ss;!)Lpht1#?!3>j z6w24)U|LDt`|l8FWZd27-0l&Lfn5De{Qnfzi8&|7<3`37O#g@GqV+W)c_q-zXw6@8^*QcFzh`Mukq{j%Aw7*qC!=RA=}POl9(y^Cwnqa+x*g2e4pZo5 zHp;@R&vPE(V0f8q`!&z{i$U0cnx`7({wm%!_&NZ=jd9@OdFU!Nc(f`rzLGpa}cy22En>q$V%^s)$iE z3oZ?DwWAY_@I9-( zJ5?!iY>!7~MxoAsdHt0bpgPGw+)i2at+G!rh~7O69hwL$<^h9kHf&2&n|pD>Qx$P77xti;447?^^v}DjaDDYMB$9B!Kbf z-RfuM2Rkvgc-kNYU(gEw@(AAa1opvOk)Soplb8_(IKX^y*x!~XW&+Vb7Pi`|ZRtN7sbH<-v&VEX7o(ypfro$WVban4SaJe!*=#2U zjB->jr`60T?T%rW3sy&&b`lb_1Xj!Je&F#;i&c36CZGppHi48672ISe9TxhGFZ`!E zd09m}&hC>-9QZ6626LY%+8?UjlwIUTk}K$JXNBJ_`lmm8g%m|h>pTU{77RV_Z?5CUWyY@skEM5%KKyrK^@Deg2Zldman7!} zxlyvQM?Hcv+13lEbZG#8V3U&{di(R+BQSh}8s>s~k>WghdfMuGAT+_8N>`B>Wa1Zd zWBNkDFGfa3Sbpb!PXXLsijK;6>ScZ~fV$m*0{IRn}R?TeWl?6>fNO%6WQL;6HyGEzjJAS!j#9`At!r}Uz=lvc^&{~#+w?XQdID;wmlD2J+5%CW-o?Su!ZQs3*`l8>@M@OR$hbKlM1i5 z4lf-ZqyWAE(Ra%agi0*r4F-Zh7MXn{f?IcaTwWS(S%+Ry_rrHIrV>c=GX|xf=?qS_ z9LN#PXWV(2MEzVnpK}} z$t}@(RUn3&Qk>R6HpPF)9~byk*?E}FhfstBU)3IFdpFN8Io9~~E8yVUUVrz=)z7~+ z@lfykm!%6y#=R8pycS*(J9Nz2k>@V;O5NQR#bo5wzo|)H|16i2P4x=WVY`C_;(ztM zN(Y*gUpYG+kyG*~Dl)2Tf2_>GQ34VlB*ram6lKqj3VA@XB>3+KpY-)oT#sk-w8}xu+G1)G9LufTs~vK*4&}qmHYRTANEHV&yFOwgD8>G= z$cpim1xwFUGJM4*`=E<&hk1i13j-_O(~&~v?cmhXQ%bwJwQ8gF@_{77@w*!)>W z8ZQ_-OL9{?FzemhXzDS`sA^A@juOC7&Af@2iNJ>cxt78tj1q*=Bx%D&`1sWK^!_aS zF|)w22OOSc?dV5gr<*E>`bn-a6&BcT$rSU3@fX7UgduK=Rz1FHbxz#c|J4I77aV|w zmK`a9T&Hc5gOh z3?y7-3AXi;COVJ6D>cOC17Ig)ZRWx#HDCH7E`kcGFW3*jTjUDc_gYP^+Rip!z2*qH zxLUdNS;@M-38A4j5Bl>RvMW4^TTq1yh zHdRhg`h-e0WDijRJJsC^UvKu+_1<#RrruG_qTOBo&ji4L<-$}k(%fxX(_+%pj5hFm zAFzaXOWORW6Eg>_iA7H`fL-j?XvVKfS`zSs@;R8!3_3#PlCH1LI?ke8SG4|y1dEAv zobUXkXcpa@y*WOqg?O%`cs*Bx(}@~1PAiontX{0>EN7fWQ)T9nK{~Wp)xa@9VvI*= zDPa0{0yrghvSRkt@Z6&{`88z>j&ap@J}`2>BRv2Xb!g&^nArzaR*5r$!ipT(Fzn2f1a$sie`-75WI@bybW$QSK!Au!|-CYR6u#mN04`Ku!pjHeN#C z0aXhn6LfRAaEV1v9y?JxI9Sz}djf-MXwJgn6SR-atcEggvwbFLiM)CTUN~zAC+p2r zX;AF)==XHuz>1WaNbqV}h?80aJ-x5kXK`-z-M^h12bq1ooQq6j(-3Y8UH1~lnbULy zZ5rzbSKLfba^VHk#Ig5%2ojvWc?OD9S+F|KEyEU? z(*zlbF=hc>T%!N%_JgdpAwR``)&l3Ti}>-t>F+c-9w*J~&nkl3MilyzQ!(U&T-@}n zy9QE=q%_DP{NWHLc;bAwDMho4RW#Y|*~iNzhN~zU^HZ9@(=(aNlUeg7df9Hz*HdB` z;5yss7+>&W)-n-(`0N7w(@?4ZCzKPXg`fg2)LWJr)nlFVa?%#ixV{<@!yYA(&xxn7 z+#Eg%so&kDa(q8C03Ne;_EH=DX;`U1^{SEaI|qJ>LslP?Io|rkxeWrH){cE% zHx7yMq#o+Wvqr1Z0%~e!03bl+;iu|te!t634lq`c1QXHNXfj8#KfOnDl`V-A+e#Su z52JV@_p7C324-&gL5#fiw?X2E(i5`rB2sKycbV2Z)JVpZd=qi=$9B#4B~~|OWpN$^ z_)SxXJnMrGl{rjejaWHoa6ELDeSF9RJPNL@4^B(7Cz{^>DzILVPRP~Gwd2=+2u7t0 z-hm12S93On1bt|N;E^%Jn6`fS>({N(qffp7et@VFBMCr9IzEa~Md9ZrRTl53OR}5f zG&c_dGH_i{V^(E~>=GbMPSd)L1|)*yqRt{$Vg~uZdyHp&*x(35AbE&?&!L?m=h4F| zlc&YY<974cUMAq;qp%^P#M5(bCirV&%K}CE*L-!7!|nnSTm$NV@6I!yli>c(B|T6$ znU~Pu#7*h5A%c)fw4itDbmKK?T+1>rcm@vXWKGl4L*balrcZ@^#w_djDaWRZ4rWwc z_C?0(ig-21TCVJ4sYw;YMqVG;I8S#U#TW8w>W-Hn%X*E$_;$fW)WYeiNr5`$gIP5I zn(oOv)gZj*4<5)xP!~|g`YpQI5kLx_lJn1c9_BKk5hYlYf_DdFECn0k0YcJF>ZCRZ zhl-0_1I+v0PWk235?O*?r`TM7K<+5DnkNXkQQQkNGUTA&yY1*T# z4h2JpT#5me1HWIslK#`U_5Gm`lH`6cm{sw64+Yg&y)O#uBO}~sXofA>Hl%Fc205Sv zr|lP>>)fawrky3;ACjcg#@xn`aq%{TBP-+481ZRr z?(BH9OHx|Kx91k)y>mDLSpfX3nu%k7x=U%08HNTiWq>1 zJ{>x&3^8;luc zk5QSXb}1fSB@OP>rHc9lo^7km0)htmKH5AOwdHDE{)>yNoVo7%y&tNNW)xo7}R)rw?a7l9WIz{zL&Yc+Ql7SRsxpXt$+IAzMDeFdDqbOko$pl z4u^f&`&Zmgl1dVz+xTcXAH55og<%vVt2(R#2rwH+;>DH~Dp>cPdX{H#_t6bCV!Ut~{63SU{Drj?UpkNx{(l>;hw$@u_zY9)M~AP*)17Q0iWon|XmbxUx7Y<-?sBME{d4&2teHE-y%>9?Udri@orPuJd7YI- zG&xMp@>E7iZHhG(w;GOvXYZZS>X=v4yIm{HWPpyWw{zFopv%%;xZ~=At`fY+;aR;a zk}epx_1o!Q0-uUkh4`Q*R_ww}3n9yzWAPCm+B6bLDox~c$)Bp#w$mYZMm9_pf~!a# zZG9>^t$ibcp%!OrpamqK>L^3wUPH$|krxV<>a}<7X%nW*{bf8$)-3m0(0G6j4p=%$e6gq8FQ2M> zu`=Qn=HT_6tO$5%A+-ymS4O_+L$Jq5$*Xtc?6KgJeNaujH777IfFl4BBa}V!W7+a$ zr&_r$GVklM89Gb$i2-q1a9uUuSVh6=o79~rnxT_cRO#}zX~G&MMyOja>z{i8g1|b% z)ny*_g+hM-9=nOrCicm+S!>7&w|d~}!sq1bH@AwwCmX{ZH@Q}ct(lm*fLOteLmv0z zKo_CN=H;@)DN|t|zR2NcD=C_+9ah#%@LcB1ziTx(;)&|%;*CV`vEPfIVAK{NA+5BR zdLaBV`n`xq|BQ<{4c%UhXs5o}i)Cu_K!koIQ-~z}aNcRzL)x3~AFrEi^S_7OYu(~x+L{79Vpoql{>2cipl#vB^1&lpDLj;HJl!XY{SV|)*nUZ7z&rNDDl%cTL z0ji;US!6hJn{cP|r5ia>zJXcn#th);4vaOk$8qCT7nrN9+dp!`O`{mD$ekRts4IDO zV(=N<$&BfoJwwon`F^D+Qn|H?G-d0Au$~^zVFZwCK70T>>YiWEmr}3sL5r|`PspYR0Iv-zkisJTOto3b9_YU5JGti|z9lIUCQAS2ZR&ugFsI8}?bSY~EznMSIhS_r- zh7@K;)G^b-<>(^+wn!y&Dl*~$a4Ky8?qesoMM^RPtZ}Hwz7q7BLItvl%V@X|&Ph=I zcEIAj5aAuf^Bz<&b^MCM|DMoSRTTjob$4l2vJaKD2e=od!qPOl#uM!AH))xj3fZEOSdNsgPN zG3dCq(DZLg^0sY-xg;OJKa$ZJ<9r@DazMB3k|8|0#a8`(yGV+zd?ed$a@1oFrM{Am{ ze0f&?(3O89%0Qh2$xY>wn092v$_Qs6EAUqek_)5C+CdmOW8+*FbLF*SK#VLXPFn27 zYv!cIZ|My^^a&yipDbcfE=;3aFIQB8->qC4<5_C|xEAgzv8Jv#Rp1bTkB(vviSViA zQwFN98wB+|{qMshO}{St^B}V#9Ye(P!m!2y(bVi;2`{5L@Jo9T7l5D?g1VXMZF{(p9)+I*p!so4-fc(kfYMn|S5& zVIIBq#ignNmi6f?271C0=e;B9j;Pk@!YAn5b=S`}oriXb5ZpcWgdLqr6CXZ&xJ(5* zCC@s3=V9C&h=O(PJ^aD%yEwu^O67s+U~-3ERBS~>HU;E!C?svlx zmsrlmcm}<@-KMReO!coQ4rM>=9l{9^1hAC9Jak)Oa#S0(i9KI9KSiQln`!17)l-=E z!3=kcJt04jtdk|X$V=$lKteD%2!OSC*wi0%0e>e|LZ`H9oAn-9;wqems!`+BxNQE4 z;FZhuc|gd;=0X$R_1dHTWuw*Q=0paW;FG;2CBcaj$maHjg-yUEj}>_+&xFtk;Z9FI zupX9FI>!61U~(pu3C5*B_kJ3={L>=-a z8HHwWtTej4f}}=vhaEd#JEeBwP|ZDrX5j9tJgo50C9lUm()rru`t?mdnGs37)j+2~ zpnOR2{!0mf_0ZB0LCglvlE$|7G0qtgg0~Vb1{{Y$2v%+2UA7Kc2uA77Mc*a_${8fa{d16qTbo zJu$6*6c>P$!za}^^`5zDEDQEwthRK$Jfz$vrcWgboBH2#7@Wv^H;xtgGACgm>x&*6 zqM3d7ie54dgw=4M;e+jREh_ks&nREFx9%-W|3Y|5bLZM}afqm3%3d&mmhuF_^s5Zt zj0Wa5SrT;H%JZ6U(Jdmxe0jH|+1LeMRv95C=2HDx7;_dwEV!F-6crzPG%SG9 z_s?BN-j2tPhQUlU_>-&Pk%~w^^j_|F)vNXph?UWU>PKt>Ugu>FNCWH?B@LtB%7%oZ zEyE;4x%?}llQO#Bt8vmCC@*CxnrRY=@}={DUB^273)&YQ5(`hsT&B+1`fZ{o?jWb^m{&(ZL_Mj=(zFQR7rD++$;t=E8Si-3>L?e5* zL1kX|Om|691_hC@ciBet&gr|EwO6Jvn2}UQY*av~-mQHq@%+0o-PX=8E18{{r=r;vS{k`vBiKNbBItyLC?s zhESqT%3Gqa!IQKE4ku#zS>6WEY7V@>0f3zQAYA477{zt*8erS}VIgwH1rN$e?*J?3 z=GqC}-NlPGM6XTCBm1JP*!U&_A0%StMK%RuIT#hSChB@ z&s}8@i=NuY;bLrFUi)i*hEw@PUFcttewJqHLLInVT=iRCR(%Op1!}mL z-b|vMSX}YnVh|LysbOu6(I0b<2G-mLPGS`-n2Tu~9ulKXz!?BIVr!a-X~9ud+@)m7 zz+ivg>1Hzd_IWuW&8ML8??Mpl$501D+u>)a@3Z_aQ30~|pZ)0c=C0yPK&zf)2apF) zC2+i29p5xS7-W2j;x#(m|EulOK+}g{iKKb&ZMN#tFURGz{XYkj#g(}HbU=m%2~;(6 z;Hl{jtr%U?Yp4itW!v6{0-kt&NEQTx`%uWwI zw}174*G=?UD0h}KBmuVO=)6cNAg(11fmDXyr-PC^P*_&f@S2F#$040$X6U1)AdLB` zR!Rb=5D=dv8INzo4wl6UIw{U*w)t3g9=-)v>9dHy5FQh{*O2_YyVw-O*O$Lqt7=tD zz7Pm3xsi$GkDGiNp^dElWn_q0*I|1u>}3d5ZJ&ZlkooCl(D{#? z8SC4bjX*)0b#K+=wO!c;Tv~m@w6P~j?mP6Q5?x)ud5Cj)j!-XU_!ieifax(Ma7E<3hc<8^n;S$ZH7n!T}k ztI!Xr4>*%iLP2g}Pt1g`K~#dYJ7IOf=z8In-QME20f8UCLz#=&xuw5hR(7p8BCOQ?a8+D4q%W>qu~WiW&HIhNylv|tt9LU;;U+cf zCfU1a_>8TlZmMO7FhI{x6X9y^%zgokt9Z|Mfw>osYQvjmb(3G{#x?9K?p36f+!?Dk zjSq&3tE;_ z#`h4=^T`%~6BAZqJs~e?ygP=xJO962fZ+JeSqAvy^ki@yOWA@sJ>%J*_V#1P|5o@gRYrx@LS`I@mweYoT@dH0J zmZ~!aY$SLK#PdLDd&pw01NMBf4g7qki_iOeVyyg{arg`cLXGE;M}vo3Ow z@g8)m$@!h>>Yf4VP^q6iF(17i;TLX|r#~+!fp%co=H`)Yuw6q*xjjyF8}GR$rL+Qp zUW%hwR?DVF;edwJ{%BRrZ4CaosBPJ??w)VXG#$U=(uaan%CiQY18%W2IO~nS+Ye9GqN&Ea3Sv{9Cv)ex4^~H0laINcZT~x{F-|KZ_0Io(eZKg>dR;bd95v&8MIZv=Q1KGt9%`SQ#X?#6{b5N+ zw8wqTOI(vM##4neo8pyXv#)|`XPHMsrq2@WOIIZ|#QO8V7|YLDjd-(hz#;b)s#1yC z4a6C<-M!vxpS%4-vr=LyDgXpcHRM*|+V$j5)j_70Tsa<3P1rF%tc7bq)n11tTV@4V z{zXGYA7@wjwK%tu$^bg{?tRKFq%tsqV~o9P)38a$H2`@lr=gQOwY0VWa*2F&drk&az>Yz;n159Puo?Vf z;XWL{7@Mb9VWwDqff+Rr6_u=lz~AX=GRM)UB0tw&{gu~rWcw2ci zGt63E@sI=&rV}d+#`9Nb&pxZg?bHWVjDPiX`YQ%0e63;Wt74gpuEc9+BdCbiZFU&I zi;0{#+!Q5kXE&5harsbXSuDbi^?F07{gfaoTrMb`C^M-wmJR;4?pO% zC3~O*S0QSmn<0_QarTH3H{DldhqUprqNg^G9YR0wV%C%st_1!DPyEU^tgY`Y3h_W? zoO#t>wy2~;;86W1v%#-x1lo?MSxNxb28MEUFed|Pyaewinke)Fg9_(bf3I{o6*r=< zew+Zkh2SV!$O13+2^)+RG$`F`k^kIUm5P8~iO{lut-An}iMsi~kFX43SpInP?e}=< zjp453%jm=ClmeI0hs|-U2xBeE0!{yqfResQCP<{gTfk0bZ=54T4Ix)wkf1~S?o2oZ zUgRV7eQ}f*9oh};QWBraBGB(P>yd1D%F*F&C37!)jkl_bbyAXml)BW7@#2I~2Acwr ze0mxnBJ6U0vG3o$h0Up`xiXKIv{>`;$V(jm#`34H4nFE6FijkxSOBq=$5QHQvaJ0%h5q_OLzaLbTmFFStFc$Ehf2ViI{^c>Rbrt&NKnf#6C1Wa!< z=2ETDxQTA6OnXj=MfLVIFuJYg?Xki%mJGz+mc#(Hkvm+%LKQ4aC(5Dt?bbcF@k99Q z!n~g(g0J+*br>G0AU8D9xmE8h9R7kq32t)0TR=Ied=YwO&miTexUgIWUK}1|{V|#6 z1Jk?np@73kw{gg(si;I%gYgXYy$RV7QIVQ^X0DJW@R9eSco1gpU#@?am(sxr$p*-> zWGQ!rNfPeLA8W9vFG&THiMRl7z*ckj>)N#eSG)5MNE8zeel}^==r3%bbU(n{4_?zC zM<^O6^ZUeK^U6rhZ9XZ<0`rktSfEygysT7FUR^5OP~)=G>jJ~JQ|ZgJT2HvPl?v?> z5_+oaZ{BTFbVR);ubd%)qU}~~K-&wHHs`zTZiNNN$%G+*b!u|p+2Mb-2Ox#_WC?YW z4t&JxTn}I;hkL3Pc$n(xCFB-ZCbvw`B$>M2hD+WnjrMvo=>F|4pLHOxTF}?(lg0v3 zu6dAryZh3W+Cpk!f$K#J?rufHin^b>98#NDQN*O8B)x^ZifXr0O)a{$;o+KiHgCn7 zlinmS5<*hst$ZsW?=Z`vgRU7gXgxBZU8_7*Om_1x4rb?@Fj}6|zmz=lJFA}&@cqn{XvLi(<(sVs+?2KkIl~I1MFA7h@f8$^}VTF#vN2m z1@wN$x=V8HGNj}bQ_=!?!G19Saj9Y^k}rB+L~Ul3DxqK@PX$#|FQ0-nK51k5j{!iW zU5UFjvwG@1t28OZx~3#yplbXz0gK2*ZBybmtQo}-hLAg`00N3;J_0lwzEK(xm z!mc(y03||c$g`$!yOmJJNAld}R#6faZ?JolkUQm(#K1)P9?v?8LuJ2!76Od@)pn@f z{cRJ(gs<8IM3A#XKYqjzN9=(Rd*j01<`KNCBD1{kjaE!AIarA4!QSV6)c{ z-z|~G_-^pWmIK3CGXbzyUq>2rlr#)fpx-O1pCOe8(5b-Z1F!9Ow!#Fg!f(G}Ah{xo z0bP`g*ZUyx-^T{pr-JAH3b?f2Bi;~P$|C3AAzeE3P@ zFP3)D6YxLx;*X+IWPK`!&B+Eu>vvFVN|ey5+k3P}Mj~eUwb?+bPr7bkfkv zxitc{JJD+~ES9W{eK>W%8x8)s$AH`fr}(qeLVtSjAIli;#Gm4j2V9N1rA|AeV#m)@ z??;Li>DCYbNrLTV&)S6ZpY)@+971R+E9>$O^AFr`kuTukl6+J1T>(l`>{nNRdi{$z zdR%Npd`EjEC*^F+4%kF98y|1oo%>8|EGBcccVTnJOCn|A5QTu`*XT(#IZB*2A30WryKEVC^fn8rG(A6nObOX z;m2C<;yBIKg5gXy_FrMp(DYe*^`LUJHfZtl;3uC>vvT@7W_Oi2LD7}Qi1bJo>miJi z*Yr^oiwAW1P-5y5YP~-s$)N^b`Xt>dHd~|=lvOQD^U9=MJUw8YP$mHPr#8JL>FE?0 zJ4jr0&wH9&Z@yJu|E>+Wl)1V1SbYOEK88kdg&?0x$}zjj%->nqHic@FLu6a%GgHc4 zs=!yH;$UO9G+SUy815a{rfqjh_AmRJn&h3-T3ma6mUyvMG3brklw*JWCz$`avw8}u z^iFSsN2pW%KTN%4KvZqlHoS-KZs~66j-k5|0a02?>5!74L!=w&Mo z*0`$h#aHvE-{V>)@!&r}xiLi^CqVK-bf>QW?=14kR9z?~_+G|+`b7He(6LKVG;Al% z%J|`^NgaPRM%=L)y6>IcbUStVO2UDLZm&s-ugr=`j@9%kJo?|7$ycL52(H;xY$&z4 zi!9?b-YZ>zeEp&L=&$j|p9!&56z`!Kg+a&G^R3oW(kcUAH(m+SH4=KfiZb>rp_)nf zJfac9^ry&N+7u&iNt0{c~%zG&FfdB9sCtKJ>t?PHE1rvG2Ka`(^mix6PG58#-NA6?8 ztOOmRw2O2h&PZD@w1*mzuujOzZ99meCl)2$nRr%eBhOa_6tg<=8<%V3nW_}iexX)%I;{&1dlw#=3>2T za*rBCK^-lAf~B#rTWb0{2q|pVx5dy6Ueyuj&Q?8`_CYpw45xiS?+yUo8JVO*S^(GK zKfhClzuJe@MTKK^Pqp^WO*|k<3JXamQt)_WQ-wGMg&6YlR#EYkxqpkFQHg1drJ@14 zrKpF{%(p+Lm*|EZgmB!Ad>?knPh~EuAZR%A@+Oxu4w1jJO_c_F$#jS#uqaI)6oOxN zFg*k~i?s?1{NDPr4a3LC=2oCR7ez{R^2zaa z1;C6H_`j}eWWHo|PbCP|_}jE`hY!#A#1Yy)z{C}Em65geNANb%kD)XqfXxOSJFf_k zqxJWYXbjmrm)`1P_v5zmqJ}hp8~Jwj(vI50He$b!css3Cd}bW$<7?pRO@xNYh&M_* z=yp^Dm=V#R&`|1ykSRQ1HCEqLS6%7D7caMUhzF&V14G+5T49Wo;?oK48@cz*xby`S zCiAesag(Iva32t@JZe0mgJ)KBTY}~Y;Uv8U^c2lX{MRIAsgyH9RUW75V7!bi&Ou~6i8ot1`UkR>b~kr`s#hJHU+~KFT!(>jpW!w`Z14xzQ&sg8wtyM{N0;B7FAl<%bBeqDe^1W zCqUC%$9*zTpNA6zQXlOl@Km*phmM0q|7r6>oFskwCZSuMQ!~uzLoBt1%Urwqq;z?I zg}nvO1{HrX9cbzZ;pz%-rR9kxeE^3mP)R->1*GFcBs2-U6%!iz)(qG6rrN)$iewzs zaHr%f5^(nvoF6{wXQC7s!?h!;yCgu`jDdVA2j3q&-7r(2B| zD&#l2=(kik3VHp#8HBsD-AWBL`KtV9^`#?q2Vd2YaZ>pfenM1eM-e~9P}8VGwa>_S zV#s+>!o-q0JGdF3M*^w4NHhZ=zDK0a8Lo|B5s-8!5ngJ9KDGEaBy;LNinhW}Af zH$ELh$JwuE1vfH-Awy3|`>Tk)k1M_2A(@JU(oV{KW9OGrr>TMDJ$AAPtKFZkg z!J4=dnpjK2+m2m%0DJiavHD5nJw5RYIk5!qWL=*X+?aVYNlG(<-d+Dy$nlQ7S^%Fk zk(a7+22RpqK9yq^%1ARu0BYhE=I=N2UAL_|jgE}-PinR_PK;;^F(QxQd{~Nkcqyt^ zHKcjznT+9YZoBMW1%tKvf=@o*>|9fxaYuOcRUHSZ*#rbqhtWn`fI4}~UNiJlz0swi z)2pm|l2$L3%_Wz))UdICvAf(|VUXpur#@5Lt?=8q)$r69xJb-493-!3^Mmexxenjj znx_6*!c;BP-cG(zdrQ)=O6H3*TmHUokfygh9scu;_x^l3VE0RkrRW5oih)gmdh__T zjh4#V7bzDM9)3h0c{{`u2_JH@zzDo>*hZcf2{T-%%8n+y4?9YXn= z7w7IBR#E6DRYaV(Ef?_jmz8|N@St5uVRnbftt@S~XrV)N7?&1E;e@FSq3by~G!RsrqsCrEWm6E0<72wm@P<<>5xEGD9Mte= zxa7UUg$8RW`PL4;Q93g6g%HRn9YU_HmL$`8jSwcvYV#zvB69#+!(rc3x;@qkl|n6y zEpIqz)mzDhZr{T7~N+ijloU z5Le4ozWD_+9S@ehG9ox!Pvw9CH`$CuazR*TwCq|~IZ-DrqR88FZ$22J%HEWkQL2DO z>!P6hLgt{WLiHT{@Gje}ViZZVM?dV%z?FzMH$}Ts6EHSPOCCu>EoI*=i-oxH*4Mj_ zI;Kq?=AkeDmZs#!KTY|tBquzp@aC z>476Rkz6BfD|u}%N3^D2%7PX9I~^F!voey)x9Gb$&j&X@dBX=ElQ1(z$GJSS2M`vD z_8}Tbkd8k0p5ce^N6d12Y;*VX$!#YxnQ%ng+nF|=OQ&IWbB(VoM<4n=sqZW>g{3(l z8FIl=0awW=T!~0?tr1U|6h>=&x3(Q$qIdR1W)uY#?s_0o5aK=`+WU3*;^u7O=Hlik zekI+!Bg=^r_Vn@RB_YbfuA*AD6nmp>^`ahZv|ppB-z6r8`BZMwFtm3gP;Uq z{)iKq4vV~uh^#~Q$>NKEDU*j&*0jNE#TS|rnjf%4m8csQ-%7GoH33TUseTe91Ht(H zVu-**%;LF6bIj5IyxevRx#+w+Om&y*Q>xo4(xuXT5jN_he5{ZNJ@g#(?>X+uv{O1@z3|+dFhm+jDkSNv#y?lU6!4df zg^3^2dYG%H4onhjLe1j@?pc|X`PP3lhHn-Alahq$?ksYux5tSz+2IGH!OLC+r+cL% zn(Atg0)&(|wJz)lMCFPA))4*H^NNQ~ckgYcPl+aUc#Q{_IhEN&w90!16j1LJ&YQDV zd-q#8#*DK1eH9V_s~|#vo>fm`woniUi4LB}10Tgy3@ z8Ylzw8xiB)^6mGHP<_lI5hkXuu}0n({9`?ekS@|-CtkLpLYTb6pezVedlehbT94#? z&>BUyn$pUhOXfS|2os>0 z_<>8htzU}jD)cs--?k!OlWl+pua(f|OYU6K(D;A^OQq?WId~Ytml~W)a4e6Az8c?S zZ5WUJX}Z%!Lz$hSttIm_m1WtbQd5-dvB4Y2%M&hz^OgB%2@6FNrujG2bSKs7Z-hyeL9=pmRf&fhh$;gm1kR3j1qH-${#)bS^fcX$k~S^bL7LUyG}K)juY8 ze%~K-X!fBe^OHMfT@TznfDcp2b3GR)nj(8;9-j~!(w~>=x&mQmYf1XmSUxLatJJuV zV^f9wgQ?<@mO1M0(RyAVOS?T?>b}xn@0rp|l08%lM?iT+g*4}p4q(no??0(lNN)Z( zB2F-GH!w{|G3rOFP+m{0X2&W6k*`ZPr%c|n)#(!v7v7MOPc{~BurMkOjeSbsrnWe0 zVce0z+u>E_%f0N)4GwHZX)baMvWl%#292Z>#zG1X(E**z@q*}Tb6oxW6WMh{N;pu* zZNqj@%Y26XAoVT+V(>3CvIgFEtq?>EtiX&~m4fdA*vR{vOvO1paLN+>)bOOX=tPTT z`+8uV9fY7MQ5~!G{9KbU{?yrfA~ym7WKgBGEG%#I!C7dcg_gVq^i88mps=H&$z`Jl zjkcpy6#OR}8_g)YZ3QXmj;a@6bMkih%Z#i^sDmnPmw(*`^o?Bjv&lk8Q zrwP)C7Q9IEef<@+p8UD~6l(cf6^a>9m{DbmCfx?SXgGTj+a-kJL!cu(*v>Q|@|+$8 z;?6F2G6R=tnPKif&(Hi(uml(n;a6oeNKkX0lD|ZLvAy6h}V|b8-Az%x@LQac(ob zv8Np-Bq5+P{o$YQ5PX05vNx+!8j1||Yqi95%^#gVw|3-@D&UAh^4SRR`LTr!sXgge|F|pdrOC$rPC< zf-9nf+oX#D43l4D6KR-BM+%Rq<2**kNK#*BA`=C1`*D42D9(^fNl-jDY*U7xqMB&!WYUN%*0s%17d-J*;$A|v z^>WPY0S=xV(1LLI=CrDjm!4$v%*rgocC=aKr1*URs$7E*D@Q4yKD69tq35ZBa_&W` z&%^+eA^l|W@jmfARogM)!;h>dDB4n}j4$&zJdmHqon!4wisq#1C#%>erH`F(;z}<7$4>#7`WUvfJv@Zq^`mfYH#haUE=?Xde2Q}I z>Mm}3zS;{0>0i&3Y1!%O3ZAZ~G`fP0v);lg%R9V*=K{Y|G$n()2wel;b8kfQ>TTsUVY;f+II zrtxjq;3?*&^!DzJnjNu6tg(v6mV4@1KWx3oq9ylGoVCsAUN`xFAMcGby2MWG zi^8aRF}IwA+vUP?`}XaM39gUwKhQW(7KM3G!F(6AfR6WQIiSOm<&HW&r~J~0Q{A2K zrVIBeuTeJMwWzTFrWbx~E!xU1Zy&v9l@Q zS2aIsga(x!t=u`0iahXaQOBM0n#zd~*e62ot!sTT?&jIzEPD0% z$Z20HD;ddx!7Uj80EM~^@VHS5*>turzcnsvRc9jXf)2JNm{5Rs(9%`Mtbo3QL{XJ6 zw0ISJjxy1b2>&jDThCuh5Dv@i!@~O}0;h1Jz0x?gQqY)H9|mz7nsK?guF0E?5c+Jo z>qMr)(;3qNEuvOLZ3vaYA4Mxlz(*jX^^B{`UZ998xwHqSkPb68Iq9tTG{)vBnY$SY1s zb={iM4U$(y{$m80>06Qq*KB8gjtPE}KS}k#vP+QK<2_a+@>2t8F1A}Za~yI&K+nsM z;@9%$=ZQY!20gSd#Kw8ss?C*T2DG9`U2W5@P5|a$`mkAvk6S>TIBNB7uNum^L&^o_ zW`qSK!9HQ@w5dFD@a?_)VLzKAH}hc0Bwp`E{i%){=Atw`afQ^>e)k)3>sxFW@b@)V zd!glv8k$%TBL7JYDfFcwq%V_9mEm~Jpr2HeO4}`e`i}UiVSx#VedBed`6iW9CU{5g z2f=X^9m0x!rm#g|Eri0eMHJ*&xmdl`!@JC=mO_KU_8ZjDN4s{<2c5U~&(FCf5BnH$ z!S%;PLt!F?YTZMo*4CQJ@d0&OPuO0Wy;*+H=WY~f-l_^h?(DykN(QMB2w=$4S-m`V zj_2N^MfKz`{p9#gjePi|1FV zg8u8FtLUsFCe_eD>THEm{VZ&+66Nmjrp3s?*_N*OocnlsoccbeXz#%CWJop3A95s3 zaCdrwiq@#=vXvr&FUnuz*wu~9m%lx4tup?9qN)O-g4*Bs^{1wdIrjT+_3kMk26%0t zY*Q<1I}-%(VRwbzM^o?UKT94$j}e&V?IaO-W?PXB3!>Wl_Ehunl`*`mLG11USJ ze_D>U-PP1h*1~+aw6`)~NK!01g=3Bi9!;6QKl1uvp>X~pTA{4Yqp=y4Wi6Z%!ixjW zpV+db+Pjw#%eX7DgT#80%yM^fl#~p%--2Z10eP>FRG#ydW4>KB{s+H0slo~z(mkNR z^gv@&;snI~s25RnU?tRcDHrF`7!pL#cm31GW&-z+;NUy-BA*vhz`6|(R6MWo6^A6% z#E+MxH^8;Z{oZ}!p7Zl4>7s4DOR23BggF4HsaBl1U`!0sum-TGa1d$Wn*EyxtlyYg zSXo$&*~j>KsDgfl-c_BLZRr~1Arqd3@lsxZ_7gc*4+qu@lyoL zEng>z-3kt_T=lZ;iu&=p@8gtRc*pCz1yl>bcGExY2tG+8!=9=Q!K~_?6_F0|{SiG* zCy?{@%8lcrFJ-7x&Lb{VceSI5J`o)dSwNTcvA%h!qtUuVO32NG-pA|co9#p}@74>^ z43=mg5C12&tfTs*INoaaXbhN%NqAoC?C;d8zq+hJf>VWKy&EnAydMM|egy8&N*RMk znO$1O?TqO$c%2OnqxjKH&Vx8OyIkoUbE$oJ-rnd-L;{0Gz2uOVrK0GwQ3okR?VhHf z;k`W4*y%5T?d3_hrRz%8b4m9LO{@ybyN zi&+D7et8S_LWSvqlB&24X;$hw8x9%4ckkI4X1mAF1HPs@IDnyKkQK*E!hMOHe4%{X zfIublv$;+B3O4?~!Ez-+M3M=8;Irl}&69PiqWME(Ym|Ax!8zMKPA(Dv#6`z@DvYvo z?)h)EyAG~w(qfz@_t;OpVKUwT2Y3OgJplvZ=teyL7^@RS|}hj z{>wJ}S_}&Q<%1FSV0|Bm+$;i6#RrmzLcQa0=F~j7)4pKx+-?y8^g^Eu5A*TAe5#Jv z^p;A$De5+}^^c<7p{v6pV_&38ot6FMPUub+uS=J~G~!+$?I+OuL*QgJ$)@|>+7e2a z&Zo_pBQKV<262RAxI6|}LrgG`#Cz31A~Sl1*NtjL9n^|UKb7=ZKE#!s6Rr#m+m`S^W4V}M=s7|<^?H2O31`|fz?vaG;^4( z>rEF1DK%JaMN-9Yj4Kl&AeV}5`GpdKi8e}nl$`v`;xUBE*=3`p%}tsx4zy~;i{c){ zD0yKPob++LG2bJRUA)4z!&nP=QZ%Qqm4L@DwL3HKaAL(SQqN6~V&U5mBaFQ#bi*+< z^N2$84s80U#rQf&xT(JF>m~_kPuMx3Sdm{Q{zevk*Q10m0?dww!rXk_D^%&I9<1wX zmif=RzTo&dCNauf<4@YRsPn6-mvQm^nN>=Ixa+aN*w-_E4h`Y@P3M`m?|GekqEP-= zX7`J=7VV@ml0rlj#l5viTIFTL zM~A0?T3F;V`2+6+`iNq=*Yv=Ac~FoWQ))Bp2#4sj>x_VraTm6_n1(qfs})S%)1eXb z}}9~S{$ z*%I8$!yS*xYs7Q+dVgX0NXPW!B8oscMS;{kjwdvWx^ViR+C2U;H@)(gy&{Svl=wo)DhMs8>FSMNhkPUNqQPfm)V&sefP zq3hdwbhX4_%96}Qyg#f&!<{t{y)lQ07&kqBNp!5E2-38@yoLd2tdafr`jLK*U_eEj zNzVfp;F@SOSL@{4<(DV&FnA&G=TT!_g~T) zWS0+yp$g=DeJwWq6D-KAHJl*8H9z;kSdM5edaNmQJ^FazN3_7_rZu`=iBfuIf+iwX zm54#U`0Nrjw^u3=ICKO--k-vA!MV`>%@c(fEJw2p|9pE41f#|6aTk0$;Iy@gKC>yV zDo+Hfs&Yy`zVlCfLcOwG23?k%11ZY42nM9;sU64nb*p<%CShIrtu1X9qm~%Wq@nWP z0GA1jWX8T7`re~ZFujkOl7^hZ5C)PeD4~HP@(wic`5Ohv7k%mMCHh6q#oJ_d8pZh0)ISM= zGFEO8mKVX|OB%F>oN^vKc)*{jg|M}Dyf)MtX6Ter`UB@2Z7RLOfe_u`JYN*bqT831 zwp?tsscnLGv&cF(l47|57Vs{$4MG}9vkJroPUubq{(JFChABF27W>FrG?|XAQ6okS+W=Nzc|q(;75!9CSKTSnJaX2X zdRAO9(G+ut^q^yK_n$+2p2O?ZKEbr;KC|sxB!@B|c*EPBf7Cr`fY|YA8@aWpd!N5J zg@^Qu{N?3A$l28{?u|29Asdr9i;TYj=r(UMvZ6qh03q7K4*G;w7V@Z&J_00akSKMW zAPu!V`{L$AZK>hlHj}1PEQgb*u|ZtH0~f}L-7(#{%% zVDvx|ZBaU~ZVvJUgbysoDqUYB1=0SlfF&GUFS=N-*YWws(L+KSljWKb|o&~u+SCK^$*tU!jO zzI~o0G`V}%-!E=DJ({5VG;6yx{`ohT%wykP!pT-|zXtjU#AoU=f$K^g!AuF$(B%9A z(~m!4WMrIH42&U>QNnyoQjENogV^zRCPmPTyot4~;1c@wja4}}f;06Zkp)+}FReuU zD9{r>an=vJDP8mL7a_Mz3k*Cgv>iGR?K^dV*ROyQ2weyZo)qzr%xKUGy+%4@wQ(}pEGH1i-peCRJ)fTc7v zqComl$Ta)GaSKS|-z>Y>Bw(vLb{$H_ysToqGd+k3!M+1Mx}Ff}AgP1N%2lL} zImS6m*=u;2wiXN!<%c?olStSoqDJN|Hl$QHOp(3yh@_aiT5sZ*S72=~cACk;il4mjEGjMfB{``4vXsn+U-ywWXP2*UZ-4f}0wkRc z%Wgs^)6>(?N5!?vJAkNtP$K7<-QLFPp}}n|o{Me`MYZX`xBg(I&CM|IS*k%J2Hb&! zAXO{i0P-Adcs@Qgva1Jw1vbV_*lu|@cr55c0YUOQ0pzIVwdP8BYdk)QxRa%@c0jF) zXlx*S&zab3pqtgt>OKy*Y9%w;ae_UDN%^D+%Yr`>idJg6Wc!bZm-_8{pSn*+Xdij* z;HpR=PH4L2N{pO>aDi;#N}4jH7*%GoVsEW`gNfDSRYz11+ExiN@6P!;zjCc@g83Ar zftuMXo#WSB>T({MCK`z0863Zo60gI?fh=$KmQIdUMc^g8i{c>{O(B6T7T4Pg*W26M zd;?75r0p5umGj6r=M6gK3)iO~Ew2wNY(AQ0a);f~oA`0$157fh6ljcsoo2-4J{ZvA zK0Cf=DgugcS-C&6CFz_~vbt}LBbVbZOBjm7cW(Ix8-XDznUReJF+|i|&pWS5pydlV zO}^Uu)G9!l$Rt6uZ`}$EQZ0*A*+p%o@^txyP8?m&>gNsft650P(0SS!QTj@ShVR`( zk^2rTy;CdwV1+h8curSH=z1J1pfj)Ud^ z?a@EuZzf>PuWRqLPJ3yVFAQ@@B>eI$dQwcy#PU=vA`cZPd>kOuU#7g7TQyVsvh%$*` z;a+qc0TME)2Hs&2@C?z>Q_Ea;7*WBq#tT5f@bK{FrprorDPImhsllp$HI}R5+g@Qz z;Zd(Iwo7Iv<};-_h?BNyVF?2rUG-c>oxnyCwr{jarO3dDm#c=32f;M}JfsW$NCxB$ zxe=9dLe?SITz0E4h~>$3e2Cl+f?$*K%~v&YiLx~#v3N+g2#+QR+ANp=;ip|dAsEQ;J`M;SgaCZ6>cZV%2WFa6llP}2x5 zj0IJFP-_ltY@_Jb{pySOW!fr^4cc%-p|L8EeokKZfSp4s(c|w7%-t5@W8Iq*a(MYB zb3Z4ubdt(fXmF~O%9xzNkQ2R*aNjht&QCAygp`Mvk@tgH7Bwm17azJ0M~ zk_GscG+Y-=wW!N|&QBWpmrbqN^E(Y*bucIf!gyRwX*>b12KB!wdd z<$-Lx-F>tPD&VoopwF9S(o~^hm|yCvm6Nz|Q*Nnwwdl*FiK|aJz2c5&4>W8mFpY(* zzx{ZvvQi|FI$MN2T(3O=7UIir3!PrQCoruD$sc`ywJcGanb@^2a|i7zd(F&6jfJI7 zBe!p9>G6}a{c>zcoI8JvB70bPKeTAXIOd>WK!pOME+}25kL3T!hhxz4`p=S!VX{vD zr2eY3alQvQo7As|FT-uwhf_gMWesZ_K#ewoA0xRTbY%8yK*^uIMagtRq`kep_NNPB zof{reC~j@<*WFCu!c-FrHX0wWXNacgtL#0fOppi?C~v}KWdY)W+nKC0&Mu)KMw*8} zvXYCmq#-0iVe$1$&Mf%DakS%%Re)MqhDpyW8L3p3qBu0whv)#k-8yX%H)RJ;`GVdEiF{-3K-}$Q|49phHaJz>I#;p7L$r?NQXS>j9OPZ!*zJu_re;URoH7ig>cL&aS_XT`Y<@}0#)d(Dr5D`&$2~_0{`0XM( zFpwIA>~P7M*7(n|MITSJ_(A&dxD_jS?rR1C0t|21up`m-WNMlJ zhXqKc+Zl7pVHKm&D;MNv$_h9X1_!h; z3llM+q|P!mAsyXIHSj{$swP+J(WfVJfgCaS8?EJRv`BEU<*=s6q6zy=z-_0qCo08G zlGiJ5n&9NMWce7>Nu^3K8el}@PfSS>1fp*~2ye-y;Y;LK#8p2L+IrAiBFUX0C~AC0 zkd7L96y)qVbj#|+hp`;X$ht&$#y>J#(I(kWi9jTFO|gSu7u%U{2f3F9-BPz(X32cB~27ElD=?t5DAzK@`(*hJ&s^{=HixnM0U|D2} zDdYs$>_gUEi8_iPu?PE0tbhP3<>N&$?D2nbC>V2M_zCpb$#LAb5{s7*AZSsnvx%{r(Kp9soh|EtRb<+)(Gi^@f08#Y%Y#dMq?w|{P_o4&%9;& zQf{TT0n#A8p@7ukDj3wdLIxn7>nYi5GcY@)_Rd*kKIBI85q$HQ*LX*4Gk^YK3cQ+-+}?7K3(-zW;DwEke(WuvCy z|H)pyn|G?@&fe1dS!UGD%`IO9a*W~0#sVe;+X*VH>rRj@3BQm-$El0%6j}x$ zdh|AW-l(qi@6RX^nGtEEK}5A&33Q_}qpi~5-9%F}LNIo4dPdj7?)Z{jopekV7i7;} z0L+Fu#+Mrf{GOj}2=|40>s5dW~wZfQx4pk8Q7H-A$C_&(u$bE3mce>|HmCw z^|&4u9&|CRSm0Lx5nyVz@hLf!f^S!yk=yhZsfxlsCxq@5-F^HX`c9sL(F$mJaYUcjC) z;as`@ME67ITxOIzBY|rdNViu1W%eTsvB^4ed-!|f+ZtI*^Y|`E8~;DlVSVxo_nlL1 z8D`=$&#=!a2k-uMMtye2bRQg#`>!K241|}${#hqNLrbOGVf=h~=1Z&j?S zsw(5KjOJ&N&pP~Iv-$1U|7T=A0MG|1HAwz7vT?*bN3dB&-6-va#4&wBDmQB*IljH7 zfdWx>j^LF1rr8Q;C+R<<-ieVJP5m8>HLXeO7%7QR7(fwu?61b|)FYw;3=SV(w4n?y zesJ0*r-8s-zF>63LTS7LOxm2PIAeBA3tmy$0$k5CRSEddu{hed)z_({hK}H}B?z!Q z$OgXLf|zm)0cmk-8#-EqjY?SeoF!UudyVU0Kw8WPCQ6W@Km*-p_G|qFWl}G+xNFm8CHXiJ;yj3on5~wr5G9PmFd@dY+2EqYtJES+O0Ko zM1+J;%zha-m!s;Aj(be)2`y@^%YMRESu2q3(ulkEx2a@B22^}G`z_g_z|x_s&Lw?gBmmjYGP-?Cv7NG;qIDK%Y#?o27i=l=PkPfQI-GbX#} zvT2kT#>L5Xc_z6bab29;2*-&!Cc|40Wb6Pkiue(VDIi8xWmM$_6Nv}2{vBj^TGd7Q~b6+^rv7u-S6-+ywguZW6yj2nkV5rcH96L^mW|^SexfT zJUh4~h8vAFZmnpXpC!zmzJTU51n?SC#ybL5Wvt|KC}!-~k&~p~YE)J*nZ^@I-T+@j zL4GU3+I@_tcb4msS%!~yAVcnft00u;ac8XHuQorhv{WNho<4j83)A+D!|9mpKJ?9; z=pNJsTa|ux&P2g#fbr~p&0+d44@=VnUIo5r&95Wl7&TG>x2s3M$n4w!6$>dgvY@H@ zO5efzUe!tZjM2MaGqOhW&9NE4DG8-3{b%1<#6^)lAT6f$Q(_?>H&}Z_bWs1&HTlmy zMp82}QbO(Kn9T*?)sb%(3Upsu?6HKvqXLdSZ%p#m%mRArFQeE*VH!99sZu1L*r8T} zVa{X((A|wAFCtvA#>=ghO2xpDgD%t@2=To7F*5(a7`G`7=Dej^vWqdT539U$Ufu(| zG^?OG)0rsjzDZ=v92Pndl}8p4CX2wQyhZ?&4Gi4$j5GT*+J~~W;w>L`bm@W!4Doh_ znW%f}8}H>2wAx3;mcdRsR6v$^t9T2G)c?}>4~FJ~xodcuAJ zG8}k^>l0jepAddM1}{1}9DCG+E8orpPUrWtYd(0=pu+ubzha+{p+DF6U;4^7F zq*G^c;(SBLFPa4UR_?ZnD78odA)7!-b@*tFW#JX6N*+osgln1s#rdGY$~S0{z7H(Q z{8Rlu_3Z#~Xg>7nP>VDB3)65{;EuabKQjP&DsFmvh?jc)XGmxuMS}Kh-a8XAeYaEf zeceX^z-oioPCPV2X~o4YLcg0G+l>WK))`|Ja0Xw;E~ds=0NZwr2>X>~LIDuub$DKD z(wo1Jfhqae@Iu5A_Jl6TQtExtvtc3!PyM@NI1@jLSldzk9Eq0quF+QtP1ZGdjvmdR z1HmMXz64EF+Tr^6Gp0@JkUv)umA5X8s9D!tDM*soh=0e5;tzrQ$geyx9k!oqJP2UU zCC9#&SUERf_GKY!RG*8gzt-Vn5vV!2<&qKB%{L65ImE0%ll}zP&S3uv+d%@*c?wX%%@vIe7)B4l^a;a=epQvBbw zJ9EScRivysJtHtN8j+PKqbHZbVor@*O z9w2)vLqYa4yY|8BG-bKe$C(O3NPsCAq*!PFP9vuEjePpslpUW!T665G$qCY<7Xa>Y z2Wq<=&W=&#ZPA$h^lk4=O}CU}qiNR&nc$$7o?QcTH$$`q1EZt3qC!cUtB5N%%rZd! z^Zkg{H@w3~0eNfwhw#fG6Jh;GVP3zQ3MbUr+>(-K#Lhwn=I&~k6F;^i`W)y8w470p zqaRc-Q_=Gb#FeY7hU`rrJLb`VDP1}!jqyrj!A6%!qb`2a$cnzc?j0flC+wl7Fkb#00mVJ-4V~lb9YPb;8(32RCZEW z_~rlg7r0H=g-M|bI8$;a(|aF(g|Yg7&bWgjc{j=!%rTL!54hvSkUEEdVglfCe1lhD zDaF%~vl<8SYpAQjyHFsVdVqEgQvRFsa9diQ z%PgTVO0MY~=axIk%4RRkqt)Jz*H2CS5_VC1G*I%qLL+B{Pr0OSr~)Q_EAadOKE|$Hs8K+9Alokm5NR=v)fCbH^q|UpARONZL8s^(KX7^ccp$JGT%xY1E7gmzZ~|@NsTdIsWXF9DCWtUaRS4KjtyM zp@y)QL^ozVRZ8ALMcbAg2gpuw#)hL%+fQDJwq_YlIWO$|K*K|QAfP7|xCC%Rb$eTf z*Y?XVu(^_Z-6?Q?e!%4){21%&%l?G`yie5Eq7H+ zH{xRkkoLc}N7QG=4A!b1SN$!h!(7-DE)pBM+)As@;2L8<_roh6GS?w>tn7m~XA$7u zu*7P`I5){^R?X?A0nJcD(8X1P5P;j>NF3T9f7LyMiGx8Yf)`7V@cmQcjbx zT)dATq&TJ~ZiHQ!7tB9>U(PI~FYGcY>Ub$81@TO9|KKGU|hE%7$nuFsm0Pp3#;ur-`N{i~$(WxrQ-( zl~!PPC(7aF*`wqclh9!HTK-qi4%_s}VgIoX*-Jzw_aalr+MB(zEtMj;NFb6396T`< zmsGVxhkS=T`T|P5?=7O-2^3;rAnx&mpA@k)^WtywFoyM* z(l8mQjk{uEeGe>F*qn4X zWj97S<1N5C*4-=xy>D*EQQ;Mo89P_$?6%i0LDdL6=N49Dko7;(vgdVSo@C%4J6~(! z4%famni!@5IwOGtn|VbPxLr7a#CKBUI_5^ifGiut{clQnz;k3{J@UjTS5B=OV7PK1 z$7t*UVrrhOQr}Z!`S~9qpVXddJ0pbT@VqIHZtF}O9v_R1dUe^lq~$p*YK^F^9JDk7 z9bappjNF(wVl#U<{Ivu)SUmwX#7g5aE;^D?4ho1`yv`Njv4f+btYL#F` zYT(NuxjhSZ2+f}3+1HkzAVxlOb5U2Gd%{TSSMzhN%_*#;4KKcG`!oLyWLBiGz5)!r;< z;T1N;%77gQqXu<^@`S8P{@_JdYg2lhCptn+GVrg{#QNZs4aE=qm*BI$=}a$@;Rq6NOoPwLR%SjH*l|HbBs$#TlPMWRc|4n zj#jTBING$9Z4VpO?*)iHJCHFECDbRKn%mxRHa)=w*W_pPK6$`VJBoY?GqlU#Z^+-HR*G3 zYbHtOJ;mTeD&?A`(<>435o&jtLAP@;uSIxYhnCMQ*S=0^Dn>>W)XqN%mR&)(>jnCa zY*A4CX!zpMl~@14x=Ke;efEe?;Dl=0{@YnJqk1;R1W_6Nqmoo`GZwu%}QA1nwz*z&QTmOyA@fEq~<*n0i^z`|a2`pp<`fD}W`(|z`T$W#Y3VX}M+Fqpp zh1nZHGjNg)%)kB)e?`>O@h`syefVvU$NBEjqHaBl9_YRwmZu#X^*M;;hXym%axyd{ zxI=~EJq9HsH?rX6x9Mh6s+FPCOPU)1X_=0z?T zqU8;dX~w~9DjN{cGY zWm;nDLLIclUSZmoq=khy8e#&T4JeIVsf7ccDTHPhJR2(P<5AXZFr#4@;vN&&BLNGR z<*sHG0tOJVm8_kRWNKh^u(f*J?6%5PdRRo6_!YQ=lph(TZAD)v>Y{+XYYX)k5-NAV znZ?XRc@w^P5d|9fPJhPvyr<)`znEM3w0Y{Rl zT%ioRL3A9PL`_g!pZq^QrQwyHK3G5LG+){Ad-zNavixgc|IsY3D-#%lMnjjjyxR?{ z0dl2cl}P##$K>6Diov_Ve{&ZG%%D&7Xxb`9-KIu!?>qPC=K#lWrLICZ03g9f+T>C% z&X&s&i#cW15mAu@;cWxLDAcp~9LmSqjVP#k zP|GjL2|xbGs(=FoaPn6s5*NWiW26jAi0ccGVR2NQ1QtbAx8F;Hs2r1;d}$FJT)b)J~pG6lnf zXG;;8!~wn^38Xd#5!44xFWg_(WjA5*2T9F;M5SpXXOC&^SmM%tcN@g$bjt*Ow}*n&wg>nm@WDs^_6Pp309}IbsTbb5VcO z|3DPT*AA+KBKozQ@CpC58pwaq!@u8ch-TarIg`iNK!ZR`yvYfI#^;(rVgd*n%yXZZ zAw{zfSIS4WPHYwy8!NEkqAQQuC8YVr-0(m4P-!orn|TIt{Raa0UWa@@dg5>?JdEkd zJlZWy&Y5?$K+zL(E!@w{WyUys$vUVFAd;e+y30>?}@OHY-sQKk*pAt6qQ z5V|o?5PaQoR)ScsW1B98l3$h_(o6Y9O;BFHJv}#?k5-ZJKNuh5d5%AyORk<;ru6aA zyV6-RaJl$$aq2nSbyb*BNA`L2hw)hEBH%*5t34`RDo+miAHfXaOSl8@$XuhRP-S)z zCgc2eJapzBI_)rxcIwfsQ-LQRC<`|0+v(qzj1OS$1I@+?Gv$pBZ{ zNzL}RGNJ6jxx*j~aHbssxoC^Qfj~{br0StGqqvp{N>=wrcR@6*C+6tS#NPbahw}{a z5XjcoN-v3(w@Zj2D|h~gKPBH4M1T7<|Jt~%8Ct5|VGoI5uq-uoyu2+teQ%9)~sgPAsIV_&-z*s&Bm$ zB7NCdr+{yZs**hY69M5kPykJy0RoZoNTh&RZ|=7@qv#%&G@cx6)}Z-BNz9vBnOsdgCD>H#y}%G#rRS)<{sZP|)$a)TT$=z)!%bWha9^t@5^$4<6)??d&b%V|)7X zxjy%FsuL<~KXqTz+DMo)QA1cdEwy%aV*n?vYkKA5Xp2a`@iKagDs77p5HxR0E4|vl z*dBn*hfMwP2pUZ@ipCn3`kTDrfoTwMBE6VyLu&Gc@@}4z z2GaB!exz;qS*_caCJjW@32<}~7rZHc!o~;@BRjZKi**AlpeD(@Hc{rFO~1$-fzXbT z85wP--dj{$a79-FB%84TldO``cIvzXIN2t)_scuL*O#Z6Vzq6PBA6ymEigi9^3TZ$ z*!TgX^*>M2%?$ogGyxoK$=?P!Kop|;j(Cvu$6+@ac>?_>47NWo<>i1J5n+&X>um45 zWRzTYTcq#-)zREgddjk+~2A=UI@2FyewEF zX(Nb>#Z`XwtSppU{_*VO4&iR&UMxqyxEA;#gyM5Q0%Q!;f?hmKhhUK* zyj&&~AqgWocZ}ORo4-&#wfc+kiKDCJDFez|+cvw`v=>K;XfDH8; zrsoqLOvOWjhx+d!JkIuf&VY0pdMxrzVI?A-eZQ8l*#0?!%2JcO317f6mr6-jRq^f7 ztS%ilSRHIjjA^B^q`OcAoT~FHq{ohWowL>0_*}C$D3NqtA( znr0KRb4sfC(-9Lp*t+wBmtX}6wUlv_IwlG#c(jO~S-wx4z4?%|;No4z7?|J_>XNQw+IS%HK~h*T?X7$(Yn7zsHCE zbklpvR=Fa1)~-o##keLvM~;H{;A&OqjiGx?nX0r+cNCxeg@It5zs{1_UDcjzZ1imkZpPGl zsYehOj~k~XA<#<{V4)O*$F~PWi3ASut=_vTKH@~8z~G#+c0%u3m-?A5S7jMZ z6uUmu3XW5M-@-EFqn*s=u-V(GGk&Sp5xMJc<&V5XaMJn*n{T$cY7+YW^y87(1t6s5 z2VBkvnBF5dixF$KFV;v$0ro6)6b;!0TS zP*Meki8ndnL|5q%T>L{2{bs@bOmXCQ9H%nxA>` zs&DfWOlZj7nY$|C_b#p(W`D95*T!HW?6Qb1O(k>_11g>eJEYucx9E>CVnp}z{*RF` zc($rTC3JuVu{uGbKCe7_!#2%2F=e}5e7sa5f%b8UpycM*m~WU$@gXlL1y(M0wjoy4WK{wPG&Gs`AWo-)a4Zs;y-dpe2F~HvHSM^M2(6f zo^9vTFKGNQ_5}xNGpd`(gP?BZbV-8kEy`@D)Mj9UnqxtB>z(kpnl#F3Y@}*jVDGFa z?}{c2CIWH~y)a){K2SWFaMthf9aa&`lz?&%$l&9TeFY zNFi6oGC>Xx-GBJA z#*Y$0P}JYMGh)pT^>m^|_!7B$+poa{{u;%Y)T%HH%cx^lLFyj@Y?=0KD6t_k32vEW zfj3xXt3^5d)RrB(qvPj8m^KaRa8avC43mOZAZZtKM8ku2OM49%=4f}}5e8yW453Ik zB+26tws2~a>Fi9>S{b*$T>zl%hkO4)2IbnBcwo&aiG>17D?Q~cf$BuaYq;A%jPRS& z?%5w~a;%;qBmphKi%mG%U+UkihNNrenz5q(qhg@FZ3*;fRel^i>#ukWSUBQ#PaW}f zf~t)13maa2L_rurB-2-*C$TU+`M4N|J|cX9Z`$f@7u5LLqiA#C|gTH=jN7|6QT$NMTF56?RxWPT9v(KvogXCJij269KoZ+ zcD?}MMgKQ!I>;);!PoI%RIc+?bk%+tcLnsV!DpdWX+>Aqp``>_QQgPG2LG3e9;2wM zytkci(=5Qw3?&!!o6#o=&*Jc6-vLBfR7Av~@l}vrS#Q~+Fc~M>JqIwlv|aMQT7!ot{8lJ8>2@a5xl05u>;0=|zOWPr?byk+hMF zJKPO8)89x$B>iDn7EJ!Hs^D#R_qzo$A>Aa_J|%p`eQmtPa#T~b2USjsg6pchFE)rZ z+ql?Y&>3?3+_@y$6*7i8!VqxO5VU?e!Eia!>XtQoyn`oYjPL#asD@t{txY7}^7V5NY+D?i!AssVjV-Kp$ZJKPeS=of-*#^U(e7Y z)88x*54+WL8a!Et(H4BvfZfn22p8nccMLy4I6HuQW>ELb_X-wqP9b}u0E;eG!ftNwO(p)zp?A#!OEemB4+<9g7Wdua=j7%Vs8ab=P* z7}Uf*RB$Oqz8AQIX?D_vgtGvDF|_H@X6YX!_e63WLuCUR1YYyn^3o&9r3^2A23Kzv z<8j)czlL|_@$*N+XNm&}45z0kj;e0S4;tMHGjHquOy739C1U@`tzpz~sbaibTzgsT zj_u!txk6D_YIW~-!^(98FiLnL1X)%)N-+yR1(q{4qlLblanJl568iz@-P*G++-J zB)q>ibu%vQ&}h9~$GonoYZvvI4=IOV!D{bpI}9EFr0PUVw#bJ?#vUWX32#7>1^HbR zbYH-Y*-w_4Gn+ZrBSLcLP|}MwcFH%vlTU9rX0|ReLw-$ng7qb2C*FM_KaT1MBv~XJl8TwDwrif>C0q`J&Yh zj-J>>g%&lDXy~N|nstx2Gy1&SU4J7$aFzk|FQx(WI6Mx%Afx%pRE(QE_dBTp-f#S( zYdbnBpWZ%(4e7Z`sLY#!aSRDMWG2XU*&5K>9{f8F-7u7BST-|R%a)1!!@^9kwXeU` z%9qErWy#bqr$MF=oZFAA(d+~-FSY?(D})!$JbjP;qIpu~X#UsI8b@8U^^3rf{W7U+ zX2oOax-j*hXve^+1%XxPp&V!+Z5jGSb5v;EioUv|a%0o7N+?rQB^duG<7Zh%k#9jh zHJNjv*-hv4rHj(ziz|8@OqEL_?oHnj1L6#K*bp1phHe8In<+|7Z)FVD7~1!ZOTePl z1>*R#MINbnvV?ftVDfGiSn3%GiOcxd@5Yqpp*-$jjF>YLMBRD}S?ziQLg#OABpgzc zF6eedSJ;(-&#;mJ|A&3mY^&tR=YrC`kVqHZp%i&;ZG`1N(hBiSe&ActwDGGuZ55J!oEE!|rsyA}KYKOhq@b2n>cA(D1n}Tayob z{=hdEJ?NMPZ{q~O<34OaZ-USlOG4vx^H|{a-sUunm6m5tMUB2~ z;PJAqT)Qhc6!MY@`D-4{C!<)n1GG6I`1Yf!kBT!%7T$J7cB)g2g)SI3V&g^f`rBTy zgaNHH`@v!F_kg7>?)1RVifLBmsY~Y)W=$dAa4YpPxhbW69@- zHt|!#VeUw7P{uITW;m)eei zi$slGPHeakn%NtFi)Z7kbR|JPfqLy;)3&tGUF61&WFMpC8BwtGn?`gjlSNVL^HpI< z&xDVRtHUp4a$rOkvRH6Itkdqo&hkH-L@DAsUK!+gPmYsfAqC+Za-eAK*-vb`T%MdS zKduQ%;+0MVq=URj47psbm#N|T>2A*|W;d!EsjY6BMb6g6-QxZFeR@||zfd$f9O>}7 zJ;tJA_vn_Eg2fLatv6r3rt}KhH zMG^q+7$fQ!AP3<)5Nm|DoHDp*+uT;nZQ>@z6Dw#j3-2d2{Q5}{wx59{l8oY$1Rd>t z`X!%?J}yi8JRz7h<(U5rF0hjPDYgn*6*lpJEX-iQ)UJnxK zyGhgrii5_5%B6a1x0ia7%oC{fU$Z`>SM45C@QAq^I?+v1ketFlJk<=dA&}m=)M}jxpL^+ym%vy5O(KPp)XF;{CF)Z>e`*d^q^~ejh-^ZynDVSU(i`qSfH~+l+ZEBk<1AsB2oBv8qUdaq~{< z=$crylBd{$V8Py*-o?Zp0q!MGl!xhE%`P7(^~=o|i@GBI8N8fUshU>^L3gT>LW8ma z#pj!7BCrCdLbjt}w)oyv$NeQ?H|oztI*wev&$`)3L>kN>(QVq;O|J;A`R&An*b;!JN^hahRkil;VSnDqSE2%A?ZtaC%v5 zMEg2*kv!5cJ3wfjJ~hfx+z&jxk)GoeFYMW*-@30Vm1FZ2+Y?tbp5{N~P6#i^g~a%okn5(c2QfLfk~$^O-3!>h5#!tPKUYiw#n7WUb3{n>r;usY z>TdW8{Cr*(*>*1b$m{4~7n=0UZTRLN51}V@TNx{9VQAAd*f+ZU)HwLs`s7@?AmsC8 zt0VGL>^5UMG~jfrQ&8J^h!G~-u7JM7$`bFJk1R~`RIz9^$!7FrduKi^OR&m&CvHV- zC3KP+#@A91gxXy=S+@9pTgCsAIP-rv8y5xhBsrgdQG#qCPc#!A!l^qmMHltk(;=bu zE8mFw)esz)w|t011Vg(1Z4!sZo?xeMK+DkP$wn>&S(MQ~A8&m3{atT9@oW10nElF+ z3L-Q%N7+pzW9!qA)04Rty1%^7neGr;)y=I`?2>TE2i_&m*RoMjQ91gtH@Abz7Lh(p zO`Qs%zU>hW#g;db0MZzitib%uNVihe z$j!sn`z2ogx3Vd4J{}a{RWo*%j)iBSV&al#)FSlAGi(MyJ`0m{M~_J0Q5N#IA61+J zBa}NQbVvIe<@*&nU_Ci365j=${BSXuX{c$-kAntWkspJ-=@@i1vV@sr!5Ph(%Gah~ zb!*LRPM`@`J%JVS2}@3P5bY_bq1Qk6v^iS-lPxe}m~1}}`M!MH5wj~IU%A)JHq;QA zg7=pVrIUrcLwJs;1niLQon7r+tXTV_&r2yKq0!Z}QRF2cJY`&1fE#iDX*0JiD|pYZ zQ-DYYb8*y#6;*JZ6*uw_WRux^+Q92AeUTSPICLA+IV_aR*f-TIC-}I@?P8B)q6wm@ z9?O?XGXxe(9TlE&){{U6wfqCsg&cF zQk$E$N<=G^10x%LTc(+A$xiJda6)PI04B|(;YSkbjRMJ2ghi>wk+$4T2eL9@5vnYP zfz25k-U>~Past*P7D>J&@W5D6B5(9@+%#PWC({HrZxZnOcZ1Eie~Bl#_~59+L5cxY z{)rBmnp;?I+rM^nXk6$BP+w9Ne;*~!o!=}1GfFB+0hKd0H&#BZm@)$+x2$|rp=*Fu zg;vZmH}=AzlM?;>Tv`&Q`%g}!Fgam2J)yViJ2iOVPyfS{%uk6ST3ZyW)WFlu?BR?O42S{g zyi7uy0vV70HD$ZyjD)0$ducZ_9H+DOQNj~U->MhCL6tdJrVYYq;!gyC!wSmYczB<0%%FDYQqJXS$N*E&3cWgI118)+RB-0U((Ylq|OERCnZNDVAOm&x_kO z<<&YQ924U>`@IH_1Ut-GvBUCn;m4ObnSwsT{2$+o-cjq)im-%Bh?pYbxC{}~id!Yg z%+uq?Q5<9`3eL(&NXJ}0S*Tv+=LxCL$#QtLB%+**3opjLyozO~n^t+afbGfEFY!J~ zNhH770RS~rNfTfG325NlqZ^-w(j{En%|@zju@h6ZGe5=!Dw(|v^!WQDJO#= z=0plwrIVc6rJYRJ!7)O1;zan5R;-0LF zuICm;8kEo0*VjE-BXGEYOumUDcU( z`Sj@`+3Z0CLZiD_kZbSz-X5s(UNg92$q+p{i~r6~0>fV^%`?Z_hJ5Tf6%!*H-cK4G z5`Fe84)vPv)G#qTQTE|>NuvihDdKf45h2;GMw}wrtmA(s)g9n^68*@i$C1PkMFvo^ zHbHUa?;-!zqMDJ#T65*kb217OIbg4K2xz!c?BON+$y{t?VZE!gfnu4pA`j|@!B!aPaAVAp7`e~l$ni+ z9>$R_N%?&eXmbkltYyOABEoYXS&)l-FJXsU_18ThZ|aezDrdSZzRv@v0t2lb*ZwHF z{|yqiR`$M>px;(nmV4a$S7r}v9s~9Cs&W3v@r^BCL9HL}JMoL~+P+%07mWy=l*_T| zKk<@81Miq$LS-`kN)hU9Tl!v~3v-!oc#TSwtO_?Y61-?e9S{;CiIgEs+YO8P%f`7o z(4;*<2cF94gXKl+7etDs6UU35FT#jY2y3mOmDq5+Nsz=;)$L6e@12XM*CsYt`?G7y z!YFdg^IcY8gWEK%<|)SDJL2|abi>+8hujbHuOX{g=MAUj`%he}bW|T9nZ`t`D&!{u zL%CLIZzVredt(E?YTslirO&Q5f*G%L0jjp`h_`z1og4?mk}`+NRfh=F?NUpgWu1yj zrkdHQ7gNOxelxdU>#vb0Ui@HCXMqurOcLX9^iD|2d_jdqJH!Q>sQt5IiV+Afl@5&? z7!bqFHX_IOTbIC0Msr0KNW#P!fx*l8%r770$tkRZPRWC8C>cMx;U#%{J;jb=e$8JW z5;H=>C)^8RMd=M}!y?t_%ItxU*|UTA>m~ z^4avWQ}DhlxRxWl3vu+L3bFxszO_}I+dD=TrZ7K79QQISw3fP6?GF)wpBz)Z*Row) z`{!7hK!PNeW!1-_$_qx){_0oJN>E)?*4STDWfw8XtLy|v5pG)%q1cqMl62^=IMgfa zQh|;F*MSd1#taX7yAzjlzOWYBF6Yzc;>fwdwb^RDyfvjmvpP2RX6L@)EiUAUR_MaM zIC%Hf+AVB!BcJ1ptw`;NwZ+$~8+pP6pg_09*ATV-7Dl~U3HO#Itqa14Og8gJ^U?f9 zj`~xzZ1z>*zsOHO4d_Hh_@ZUnTA(oT@`Fq2%oKbyA7T`zqJpw!v}*1ipF@t&1 zLZ=eoLu~sjKe65`rVy^`W6yp_NgwaO2|D35(ATW#Y4c^|BBNM)kO;TiGgA{R(WAo5b;S~ojw;gg(GYm;(?-Mhq( z<*8c^cy9JMy_)pNZqxbSOpm2d94xs;NEOn-#5C8hsgl2ng-se@A#Jnr(0n`-xK{WA^6%9% zw)-=rYSBB$O7~8>t=3~3ph31wI`#}}ULu*gIv1qpuX}?|8e~c}NGg@hdMEx5iEkQL z?Rz67c;8tz!Wt()qjl59?cgAy#}1JM0Quky+>zAm&C>t+C==TTrnBLj=v5^6bHWNge0Y)5-ni? zk~CQB*gR1vJS2B+K?U~}s$=8(h&rWK_k?}y9yU#?6ll~XOxzb$(WOj3t|ooN&T_5T$*b*)Gu8Ajbb_S zM1xr`5dZ8)F=KO(;WO5c0Wbt%Cn-Uo+1JA!L5$twOV9B}0;f~~2L>NVCw`lRc%_Dy z96wl;GUVu8BbU@?|CxBCgSZS&7d##7%J=*G3+dRhc@YG{;P%xdRts74ogaspBX}Gj)}tm zHh4M^eVMV?m6x@Cpy0Zd=C_LO%dYA=M{nARno{y75e0znA%0&7G2v%#pqPqRF-h#uAEp zdsZ87b|=R{?2Dj#iwFiS-Ptt}_*0U9L|DBaRs4Zo?sRg*+oFjBY#7#A1oM&o)tHbK z?{#s*R}Mf)DG$~Vsp;~=5kRnM9n9;Z6v0$7-_f8ySKef;u6TyG&-@zfu1`!S?gZqs zg-?J+Y|tpIKb^VARGjAOn{rUSLwl?5?XOiUdPk3g8ySk7RDSXeq7qaCGufyCY|oG} z!gkzffY)brn2ND~h|XryvbTbbMgQ_XI3q?3+G_othp^z=v^TXbedvmskhs_l2aCqa zjRuy zw)tPt2azLX+>Ag)Y&&`9)>LpayNPMXL(1Ewn(~MgLuN-~reYeV_9vlbOb~>V4rhR=-l`od;nW(MAlui-a`Mb8wVi&94<7_)n3QVfR-} z0vChV$)zP6&&H7;hoA7<08X>(B_wtseRqNZYI>P_3yDuX+0!z6KQacOZ@G3bR^+8I z%CGP@Lz>wpi#Vcv{?%3ZaAR#}1WT5PL$!W>ev1yzm+n#nxf9a2ySZpb=O52Bw8=v{ zTgps!1h2ir5QDOXJe1L!jpXuy;hey_tJEA71A!Z(_=oDxgCydxmA0G&Z87M7_QUs@ zL<%}@|M#oD?RiMa(gq$40pJzlhUTRS4#?FnEJ#o0miP698=hD9rI_IaM&yp8Z_6Z@ zk$JGv!v1-8*_Gg37YeqjX*+R2bVUpoAk$KOx@v?Zm^s30;?LsvXfSEJmcit!1Oaoji$#Jg2?uxY^^$Dl(C8w3_T~J@et{% zq1u;A*kXNt&KR#9FGXM@6YouL`tihVVdMa(k>2s+4+rsWh_DiFmp2i@CX&ZV=d&Lc zLs)@|+v-?iE(_RAL4B;I3x^$k|o;*sZ$H!hkqs`50Y3Qn|&lO`@n8-aa(xI2WD`d4h^jV#VpQK zHkP70hVM$H2`146ikDJ;yWh!0I!qUpP?Jy@yj1xs zMGR?WS~_YrCT!xEDnx1;?8d$jCz0>(&TNp;I@4xFj^o?1DZjQjc&MlLcj5Dx5CSML z2w`%enqRwnw;u8vkpz2k?)Lw!$* zSPUI#YT7fPsX?$&1nTCb$6p*yUX&Ewj%#|!7bbE=1HOp3dbb{IjdXD{`fou@c~RrA zfyoljS$DZq=#-JvnTa!@Y;#)vlZt99QyBijLdV{eqzu);)EFFT1l?I<+wJjpj-vG= zRoNkkfTgcs+2$Zv(__zJ;wFTIlV`vhT%d`YTZsr+C0+4aBs~*Kzw#X5M{Dida;~^O z30CZ*(|#>};=DY*u^+FGH(j#^O$G7op7wDZ^Y02R%*@)RScH$c^pzJ6>3b&QDZH2m zMJq>7SA%wCbAk3b`EAUkMliSs&hPALB&p%})XR9o8qRrF>S-gb;_9XkLDJZpv_ibmIJ*Nt35hmDrTyDzBj?^pn5$YVSOUlbH}_i1hjYjFZ7z{b8) z1$b2Q%AJPXPUhx6YOyYpffiV3rR>X-mmFvs66wbxT2veL7~7kNzQZ@C_-U5D%qgR z;lQo9#N6qe5f-}^2sq&qFHR-Nd*R}(4$jruzdF2IY&` zl*;<~=lf?^CvHF#qWf|lyOMqAq@x6E0ts1d$mKsy!bI6~1o6fmLhAiUPIgEG)>e*O zl}h21f~Sl{VDF!5`q7af0aCSxMhPUqbJhsy<}w&>_K(5HJ2AvK7v^Q5B8*TBOQjGg zkk*W63}*ZZ5B$_rMiK5GD%NfC8(~ulh11pO-^k$WU+~oJlN~3B5!|DveSLlV9*@`3 zJ<7*WI1`;(IT{-s58?XzE5rm~vk_Q|d!)%5r@B=_H(vF7%|Kyx?{)bytUB{K#MvK4 z!$x5hxxGb`toMO?{LSQ0oKr_j=*p)d-pf}QgteJeKc8ZoH5=Z0S7_2>kNGEh2E<(O z~*zN}Ak$6y^mJU5!2_ zw&iwI-oe$pyFp2Z`Qsq#>H7&Pz9FGe&{Y79t{LpVk(9!CmVAcQ3k%syz``C_1}sc1 z`_s?Q`rcjv^^W%(5h1Afn@4{XpM6$K3A1h|QlX|BP&5{Pnj4MbxEj6S@HH z00})9-Yuf5`~Q&wqA1_XZ%cDElQ}S#JaX#Sv65~vjsgiOy%uH=d-S&P%`H&w`7r|T z2+i4L73hC78#MgD8WjD2qjLDDdy~G*-B}?Qc4suXxYm!oZU92&CBUMDep-t$-O3ZU zl3E@zz0y`S1u&PDb{cmqHCEch-4m+1Hxbz$I(|jh+RIw|V+pTP3WTi4E)cT3B!uQa z*=!5%B9}b%39G%EIaPeP3E-V`h8r}gJCA*AfB3k1CV=vp%das~K$=@q+mfRBgWYun z?EmTygD(=qRIKtan9-qv9LIGh z#K;Q+ED|H!TAupuqS{pAyP_OO97xX$Gk!4lJaoD2MQi;-|6MRE*Z`A2=IZ`5ec<`0 z09St*Ir;^y8SfCbr^GmMPI7|Bk8@!n>TccF)C{$D~B(f;hfMF7ig+s(?5CR z&u$B4;;9AbCY;iM4T`qchR3#&n-|%!fCEEyIjo4$pxi7=AAEIJnplMwOrEA$;aV05 zG<~=qBN6Zl!V5!%@YqmF9@k6IzQzrf|D8J0E!phs)aCf(Myr_MgrsfyGUE^}L4yp) z5Q?E6kUiePWEDVddQv@f!A)^QtGJ_7`5YL<*J}MWZXeZMEk3YpQgkWimJmjpx#@28h%`MZ z20boBt4Kk(9c{%P>1yCX)dikg^m4PSm>sZ2Q`BkO)h&!w$E%%o?_!qx*`b9 zn%kD%Sb|b6j-+Z88ufRg_{Yoo58cZ9mosC@OyX{FV4MnMZvQkLHnk7AH%hx6B0UVv zJ@GaQe9By;wk6PZ7Y$Ec(MjzWLtKk{XHx9Yw#dkB`587E$ z&;8o?ZON~;6RDe3Sder7wHN`y2-qJb1I~MuFD(>YOd|BDSDr`5>_@>9m@aM5n@%}t zu-p;qnQmG-WG)7SWFuU_C&kRgDtUUTNMzP>9oZ|OIL`(u2*QTb=?x&i>+aHB;1@h* zRxuWD1>YDB@Mcv2`+qy*$$iqCkXU7ruL*o*1j7x;(loD!K)1F1p2{67Pci-i%tL|) z4DexrL_@*tx!=a)3xkFMBU8Paot7*__)w?Cw%s_{zDJiN*;AK&qrV&Iio0xZ`)Ydp znX%JA6bGvP>`}n`3328ZHR|B1>I3pCjkJoz+kh}COw_vU&=^$g;xW!O7vTzHk#bRM zD->9n?zWZ_nUtS~f(L@7m%&VEE(+;8$rFa0!~c57sfR?L5|*(AI2{OoO$_u2ykWs6 zdB;;@7H3;wpT z&(31E+WPj8+6T8t#o1k3tCDmwpRPW|AuMPy4A9HdLP9TedC zF#jCs5*QN`vhw<@boj#%?e=Soa)1YcwxHc0mrSW^%Zj=}sNxd!&Y(qSKpeUHI_bNE zqpX&nfDlRr6gd8AuZL?I^4O4$TA(yG3xCM0!2UpNyF6c3)gc&aBLPlhNTMX7`0NL* zqB&C!l);!&UaJap>FP!pDsI)80S=%8OG1uPeZPZ|LkaX}d~nuZBk}*~idOSUvvH^S zH()-nJ{s2!b_agawANqyb1`wH>2eM51jO~N$mr(~xTB@3I9fPC`$M7XnNuph6Hdlv zrZp#lg@tJOL+*+ChhAa`kW2@)VJLwEKP{mmaS5(S{f_?w#WpV@r~J<-tztKsXK18icAQrB$5KsakD zE5U!(gfrCOF^F_{vt5)g*o*4!a3QF`vM;B@;qm2dZ%nFJRhZ%0i%)PeG3a<#39Y1%#)pb&`wIG8Tt5~rfnia zdveSNp%xVJjLa@Hv4=>p{T>!v)wY&%JX~);8bRJ0jDS0REc<5!=^!EGxoB6hLxS5T zi0@x%-T@l0^ZI>Xh9h^8YW(tUUpeHphl|}AYWHA)sC;T8ZZpL3|JC2rN4-H#yY1@> zlK-=+a7pjDpbxPxoyZW`Gd@mFX!Fe=J#W*)p>-CJg=$%S1PeF$i8_>M0Pnl$2d9`QYhzsAeF55@uocb;J{>$ejMu86GSAF2ios-s4N- zuc%)}GW{|wE92&Hp@4`CXcWGS3q*RkXM$O-i}AwwVE}qt8?v40zAr|!0Hy`bqO9Vx zA~7XKXrc~)4%vh5co7u)Cr?SN(%q}mB2`Uzr4@SeE3+!WLIC6ZTlnCwU91$m5LlX2 z5`T}*z^Zjwyc>Yg9@DBLu<%Kyeu|qJjAWhb42>m* z-b_egY#*Qfo_**JEF__cQMDi1UI<{*gSz8<>o03y;ytky-8!y2YWKNE9xVaD=s|NB zq{G0rBn}8A1BajaCm(&7NS#5V z>Kvme3>CP)qA}1Vdq;6VZaEwfm!&~KmW8Y?p@MC^Hlu=$8a)eHc;{|V>435wWUw!0 zMJYSC?_qcRo}ZO8vQCoR-_g-?zUYG|n8TsXe55~#ydzTY#RvaLWHxcLz9)N~Uo21b z7q~%dj0ln~NWQKz<=i??JGyr1ki-sPOahECT=n5p6ue|29P(oOCx_BZB7%$ju@nb| zT=^g_FtCmAMbIA7mnOWqt)a-cBWpv4%=xWM9c+?pPnU;R%+cI%Tq5R4y7RuKnd@ zz={we)?miR(*gUJus9%eqxcQ!AjS{VeOVqZ7zMOa))}b5%2h%sc_&fLEg|m2Cjs6< z@0`O6;Mx(bbOfK)KFlfI-CSx`AgicH&>rC`tSl^08MR2r7_ucz@Rfdp0->K|YeC)p zyq}1qAa=L}B}9Dz^Mk+}i$7>>?82s~29Zc|B#|GxcePuCnJtDWH`$Hi?rXvTp~js< z>n|a&u%OU~eKAfl0n!tR0vABwKm?22;L!*0#w3`M*TJABYng{@pIxpstbRl(=u*l} z796S8yt3TxzlBcf-S(fZvEK+0Sz;i7y74`}9MYJzoj{?wQRwdSp!s&h36oWa;01Q! z_51OgSv-5zlu|Vxblfn6rZTt9)JOzo?nlv+pm>i2U>pmN%S|au0JXA-4#P;rkYh%F?{(jgG_#iifsplo5(3j& z**%yGoPvvJilNNro>N>uyhWdd{dir31;&i8Z>uOEk)KK_j7$1HdABSr|K;R&Cry}@ zgwnls^!yDxioA_JP~Tk2#1L7U?YwSUaXVl~qvDb@x*(S!iG(>__;v>FsI6kPQV9c& zZ`1xk%7v$6Tni~D-O(r5tD7z?H%7d-6xqg|p%e!QC#<-@hE(+8^GB|AMUdunb$zQI z0G3)dI%2pyiZ}Cc^K;8z+nYO=_=hvTQWk)nzZxiZrw@(w}6ehCkw)iFPTCTc@{I4J?HLsATC1*(!vn9)aA<_sOgF&ZU9j40B`UPS6TgK*f0W z^ltObya~TeSEgfs>G*1fY^`0o303^?$Ynz^d@o2OWG8CjY<&I^6RUA(#e(^#t9Rkw z4y^z}-72RPr0-=~u~TqMpy^Y#fyf}Buyk!ye zNK?z#tH1hDwRDq5#W<2rM$^%~)(RFEI8MO}M?D~epe)>GyMFlAb;oiSV`ljg8}3uE z`5Sk?E&3Jtjjz;jsms znkiW*Nm2vnT3mRz^I)olc0U1FI#Zb6No(1byH#U~{$!C~rgpOp>50>Sfzx$NI*IV= zLtiQTFLHA8oZF-ZvI1Zj>=rV=f_q+Uz6!}K%$(8n4%I{%5nNxt-=_W3tJoUSLUQj` z1pfD(Bc0!zm#|MJ5Rq*VX+VP{n#RV@=?}1$gMuPPjAZdixMZ>?YZICYL#IEql)yet zad5kj78b9lJaAufyDLFDoB&;IEE0^VMsC0CkYfh4C<^^kUofQ^y?*$ev2zy)jj4pJ zfJ%FutdO47i<1qlvtj6_?XPBu{FI0HoS;sC01e*<&1H975PAsjg9ea5bu%FYll0O= z}l$881FpY>9Q$m!4NQrWQ^mezKTj9 zdywSk$Y~rYzaD}u$M(}a-JcmLfjc1Cl7mtVO3Q@1$q4U35};|Xt-O<~ez*c#F7q-6 zB4-whEJc4R?sA9I`pwyXwC;}w$wxAq0I;=4fGfJh?`lx>$bG8z@+<}@_K~>dY))Ia zu=o&Gq-91shZ}Go?gznHpmQokM}lZ;C+&aeETq>x+hlegKIo91ALM!-HTKP1fyHZP zMf>T-3_X@Lusg3GvfAQv+%;9xuFY9?A-uwa-F5pP#K(nXb&?q2+h`q*)V#Cqh6xPEVO)h15ZVUNwvO#|BaZ$(x-NPqxN|=zG)}Qcs@F2lR;+Jr8H=X|lTQz|PNMhNnRf22=z1Y9?edri1 zM(;|D5r!dIO6U^f_l5rcp#tFTMT1Cr?`pUQ`~LiW&9)iFMe4NI&18|}NWQfdYt!*z^#>@RpuQU9F`?@@)h1t&M0)mL87ytnR)=Hpp2m`~&Ugh*MtfbnX$9l?zHoC|# z5dHsD>5G|US$tfjdJBD?X>P3db_uQ>6s&uQk2(ogmZ=O^HL{==;RI2O!2NVV-}My; z?IUTq4CKp{<6{~oprA2MEnDZg-IEKZpjmK(`wMC0f_wmJ#pR_`6w|iuuMjY~zu0_w z@lM;%>zx4g2k{UGg(^}oX-qMJb-|nch2Tfb+5-y@ae$tX&{w(8ZO|FV+7k)-bDYQ^ z*DC=oxt5@F#9*4VrGlpG(kE@-B>#v&Z5Ttvei0ZMI6}V^0OucJ*n(T8c@&b|+BHDG z^cQlbsbQ&E6D#nB9(Q>hDYa7@?06Ira5iw=Inuj>DPAyq>DfagD+&`OVxES>F z_ogA43g7SriqXZB_F4P|xrOhN6Q{r}XTT^_1+t=l`%@#paMd|lOu|hM{c+5ria8Kj z=73zuY!f%}jY_YL1stT|cne*1XpI9_0hUsL*%`S*@3NG)>dcbXG!vjw;;-DkA=>j~ zQl;cJPThemFr+0uaJ}Y1udv$j<9YO=?I%j#m`Le~#h?gANZm86%QS+YbxzwkM&YS6 zzJBlGh@U%vd~58ZB+>fT@@0wK8Uwl;E~cFlc5qNy=m7S1=x)!{F{JTom#;#00b?|I z7YknhhcWj#09cHG4BpF-ekdX5cac+>3g$N>wXA{_|F~lIT3Yf#CmCzBk42#0M<_ zn}c^NN-KI$g-%EB?fyoUpVuB*U~|xP6VLr3mvd02EB#~~fAF$${%u9d;FyHOphXi% zWL1EHM1ccUP@fJF4s_y~4CT5oIP-_|R44`>3M+LUVn|^F)Xl?&rwdgg4Zm{ySto;D z8-I&S;%|0AkS&8FAkEPT#Z{#Z$nEC<&p@=5S>q(@GQG$>JF4J<&Yo?Ww1}UIuN?V& z#_ADvoPj7z9-4kxx}efu)v&*XL)A}c232x-*6-_9NJ*CKkB>#3;SIfF(Qys&l=tqX zkeWAHm)!iVn{H|qyS<%?a#^-3!IJ$ z0ETf=Q!u#AMgRfDl9yJhgdDFAO z@Z#N6ISahku$I8~{up+>!SAAO-RBER)+wpyh!~48XZZbPL^~$SVHNIo$ z2wKJrzw#$|l59*LnrwTQ0+(R<5m#mkMKzqkkllkW3!J^v7Px+k33#uF4~wnh=RJxV z&{I^8Y9yK|cmq4JX+Z$04q33B>uh955A|DfRZHX*fsN}M^tFX%++71ZHY4eNI&#dA zfSNdIJ7`^#BzoSuRaAv!=msMT>+#zg<-=3);Gm%PItYyx!eG&@bblrfdrzL!>v?I8 z=im;QntZ84k)5fq0a2JBZVU>M)^{ddVLD@kl+?5|Se=*~ANZva+Yx8In%Lwlx&)Gg zv|1Q}%z+~3dd|O91=^zD6<9vVZO@TZees)x=tdyX0d;E0ax{#r*^TKbQt>3KiM4Nz z*7=O`BD}Z3k@z3(OslIuf1vA3a8glXIL2>%hL=odv*J-wV|qjJ`sq6JSUfrT4=@x* zWL)RjLtn8>^Nijc`{9#gbAL8~G;kCW(u2mBqBa*iNITKynbWb($C{v<{D8H_*S%G2 z5zm(tN*&6oT#>Hhe+YgC-sJ;{u`o=ZoD={l!WbD}UhaqD>MQ|hZ_p{+skbE6XTZz@ zN)H0HAlw@Cw%_Uf@xjsF{x5s)o!1@=s5U)k-g<8e|4UCdd%88fE>6uL5i~cwK&b5! z(!bt5Mzsa9*UJpxJss?kUfY@%1x)&Qh&Btqf@zv`laYJ-SiRr8(HcT}sFfZ2Bvgt& zK8qBbg6>2t66~P`O;JHXTqEmya6K)Stq9tlKT$xz`Yr%-*WK-=)Moicnu8Y0Nu{*K zrS?t#IwP`u!$!!ApAuY%jCeDJ1DsMlY7<0bzPW-4yjaCBNxkmVH}{}5Fw;P`fzVJa zHCM`P&b^=3ZKdv%z;PCQLs~j3AFRHC{>SqBez-#kI%2VY$LKLXEq5zUBvKIAwZN|q zwEm8GUQ7kGM**34vaMzre&x2O%Sb$4E}4QRj+=LCmnMBxLysoZRgWCw zP^SSqw*wvFe;Be|t_<19)2YJ=eBmJJ-(GOyFy2aK@xJF8dh{$5gJ!}@fOhln{Vz+5 zd$gpjN%9e*$~F3CLrR{ecLHL%05PyuM~Q9~XfgB&F5sV3!S6o-UKp=$u8+FKo?-ln zzwp5suiHJqUJ+J8HL)t5>2+=5K)h(hi&ta|nGRgw=fLIwp!vxT&lxha%Lo;(zs2pZcTKWcs) zi$c-~t$~w5GcgBcC^#W?cqxd+x{U2~c}z0JrNy!o21~szag$8KKJC*HR5cAdHYfsi z1h#XE)3dXAPgbx9M@)Utl{))gPJMrx=+xc-);Ldrkh@z4)BF%Z|8fnBpLiX6>Oj-E zV15SMWre0Vb!N%<{l}?>dqUzretV~tlc*I+=OJ3a|6s6WxSlA4=m#?{V?i&56$r>z z37m5fAwNkDCXY8)=6Bg3(Y|XeDt=W=>vj4Mwci+@DHv+D(e&j#wQNmRLxP{;SfBUD3I{W+B~(ZMvZND8=XZ{_9vYE zSq0PgiIswjA{Ffm^sPE}a-cY=cgq>kkpCO{tPh#*1aT}yZwvW5? z*%F^v3T`zLPm+7MTqtcsJH3Q))5vACW(#N`Nv(-2RPVR2xQgXDn^stUA!$bz9i9H1 z6LS7CQiczv(c|k$%8;1e*aeMng1sBl89DhP9Vup`q`1c>Z(@ZV1yLumaRzW-EFOGm z{mYru%bwg(P1!ipq{WY@%{%9YftHl}lsd>M8I}(U!zOL~m#Ei*?{0ih9L(jGlcbIM z%3EAe^doPr&`;bEetq>JL0DKom13`Xl#;9Eu3%jWasoQ2z$4b!`q9utL3mC&v8wwX z$22r3W{wa3rB06cnP_$P?OS8op|YJ?JByN(HLPFRhJ-Ql-M-PaaJEV(Bie>aj>hv> z$<0efuf(J*_@JTgcz@v96_H zZ3XSgN*D73q@%>%VJ-`MyoImdA$H-DdB7SZB54{P2%F8Yi%<9w&Epdi7~udM*t6|o zh)>S3GsZf4eeeipLyHba&?X@>oO*-|^b`8`)i7DgHA(9R0hZwq0p@pLf1GfhVzKBm zkbGoV1M;ECtwxEdxHFOLEaXJcih1|qo;Q7ZxE1UBIr7#$yB(HV(aIRZ58^4Siy7~E z^AguyY0E`>7(;|(WZK;GTJIwiZu&Tsz%?!~m~P<%Gn9o2Lowfm`b@;TDGE!D1OcT$sVtEY^t$e%UOM_&(%jlC&?uFl5paAAwu-kI(8q z+@{L8Evre}PA?hv7xLwD(HX}V+g2pNRXo%MnxLg#js42;K^&ji*iaQ}Q%Jh1)5uFL z%4*=5|8)Jp0FhhwbgZz9WV_gZ#j?m38hPpa6X$Iid!&J*dm$}(UAgp|15y$^&*9Qf zo8zCbo=&Bq_ZORXOc1;;yOodCj&g-binVu~a0?439n)vE68HA|5+C&L_WB6xi;Tgt zgtTXPMazd6`BJN?T{F3MqDV2lBKUw%7x_P7r{HrK)I3(3sg@wu7Q%}LFdT=oJ-ha3 zj@DF$+!l^C3%#R<3R`7ECH~pkj)ONnJ^d*ICLh#pu*ekUt*tVW#T554vtcPGI0Fz# z8v!%E2APbeAHD?do5@4OH(s)uB^PzQv$ruyD{yhjY-tIDfg-ySwN;400AdyNDog;29r`dR+94DXv+~jJC^t6~-I` zimc@m{6=k^KKpp*B1zK2redG)hmiWg)-{6i%6n>x3}H1@u=9fE`b=`HGkg2_tB9qmnx^BmAJ$zdR95nvyF)l|FFtq`!)1=+CfN)%cxTtIfhX zS)0$+Q(U@fzGa)ZMZ7J;9CX>}d!<_FWF4g}G<+-=QX6&C=rmGxb9tGvHXhr79fnx! zXt{d;J>3KP4X~`;YDmadN4$p4wFdBxX{aw$;2~w0 zLHU>CwWe*J8bNj=h(zn`C|LE2F%C*~ zlazTP`Biz$PTGzQGY?$aJ3ZAIo*Vn^l2?sxW(f>Xq6;(|bpB$)Lq+0S#8afwch0AG z54ddWcl6+MfK`@XlYH`#R}Ub3GE*~a`j~_-{kermUPlSmQ^2gRt$KKnb+^aOI+HRF z7EDc*a?=dpJO@9Kk~P3N*grY2Y?&ilWburPvTViH!2LMIr(vFwGZQx5-zqB$6P%}N z=y$^lyF)g_$++|fB(EP0I5&4MgQJ?v`?Oq3=GG}3mcotX?C?Zk)g|LccGm+ims5(0x znG`P|RQ*huX9&^ClaQ8d_Q!Z~rWB9yq1DwB?`hfiukMH9A4B-o5Xr)~RG+Y?@q#*#Rt&gC zfI8&&RYMYU|4z{*!BgdW$sU5P{cM$8FAANYEi5@1yX{oVyatnVj-_DlZ%0WKWpCXf{9E;3mdqJfRcAm`+*ly1B+` zwK(BR4`GtgK2&F<@c4^pXjO}5);)73Gv9)yd9APjM!1lMQsKPYl~PXg3)dL#X_kuU zxpq3jvW{8H6FLk*qb(tzYs|b;wmn9LV^vpYxiw<6> zvM3sBQ_nx5@gp~goi~0cnFOxi;BaCZ1d{0WlOjyVOy!sod5o1K;;Ajh2R>b#`oS-1 zDjCsoPcfW;14v7H2p$Vwc~nJVEE`@`iOEROS<>-;-so3-uR#wKmi}${l(g=gbI_#7 zo(}OjZ|tTa-8~>*(ISc0qqF^V`20DZ*>mpMqH#i&pR_lDO{H!GRy`rj;_I`$Y(T-7 zg;e0BbT!7j_d2wG`)-WbA#g&lPQLxzyu8IWDR+}27RBmAE{!Pmu(Cy%;vjPm|0_1S zX#pTM|3VC}7*NE%_jwvPhQG#%`-I>Rxkjt~@j44Tz`h2@Bb_(-&Eut+v`vKAIi`8_ zI7|}UCqDx~;ars9CAHDvpNfZ3NgD9kDf;caaxL{nG>{rD!@AdfUf>~1x&6#FxeOLq z<9G!#kLVahUq8CZ|Hu>2d+spLukl{uVIPx!Bc`G4I7IB3{PQ@R)EYM;I2*tz`*bps z`<*tY;_T*n-`fy6l%vGtwy}$R9D|oJT(|YSNg4316z7#)d|qJ4HM&nKvJB@{YDFJt zMT_bc4)*BPU`iS0JMNi*GEGV*4BVq%ziPZ7Qn~K>N%%gLD8;=heS>^!WY_$Cv!523 zUMSss(fFS?TPX}0cJ=d>19g#G8lPc+Ld=Y5O28+rplT)1E17j2{I~RA<4iMOtOvug zRaWbE)o%qBX|e6Dw=o1+mPkuZFS(Sqd@j}(*?F!-MjWYuo7%?s()H94p{x2}TZPOg z{c|GPXObVxwc%h{HSk!s6qF%_$ZP7|x2BN!ICla;p&ND0_$t=n4o0Qky7%nlrK?+U z>S4+}qeUXfKg2}g+y2-mc zIic;#bNOnUl6-c4O})lO9Amv%m@I8aLH<$-O?rFSyHYl9_w_`^;P7UaEGF200I6?P z#e-OQuyyL_MeemZjLmPw+aqw&Y(8fFd@;IRZXs=FgoGRKI5xKsp04FtgXu&Ao?F$Z z0ALL?DLEU zN+A+IQf2ht^3VG28oD9-?*qmOrJ$}yoFx2MV;sv&qN?RjZ4cnOl464pien? zfvoMFDQFTh^W}pUX)aR|zyCCk?z%mY6rNt}cwirY78x1p`(#*}I()hn1aC2;oY}9o zd9So$1C7RnORstmbDrh0qvwIL%^7(AA-Z^*9di|w*CMhjn(vOCPIs%G0XTt7%0>6q z2;)#yxx};VumTxUpni*KYs>#7D%O54T0!^u5A#OYJ#oVX`Vv1>&-q|8sdd3Z>RYC& z=c;w;r?iqT4I4C!*wW&zdxSB>Od(XQWI8gFZ4H!rTHELZR~#9Sbf;TO#BtPx2SR%N zVyeQQfGvgYhiQl*$FEBcW}CGZ<p7y)}bHWsZ1e`vnHuOuu-Ie_(>yD8`N|YJcsQ_78KsjJF@DNlwIiq9D`u zQRW=a%i|k{e89X&{pz3c>g*h4dI@2wioc1EB@v^)vs})y$@inLZsFkeoAcPT0m@Bn z+mF1+nB$GAe;r#`euGq4eW^;h$a5PhuG#d9L3StrQw!B^hk>x^R&+X|wk3f_Z4$gY zJWJsji8`(mb9Jd}SWcv?iK23)4#4C3CChD(XFfm!TW7nQxr7RkhSHF>hBbG|Ui{85 z{a|x_w-om;akY;I<+;)GRAkxzK}wukszEf`u+f~Wmsy2jb-jmn425a3f6)jips`y# z14L`i)}|l3yLKiJ*{0@r?DUxFAzHV)rl9U~XN1%>4a3C>cyg~8B`hT1!{1EC4->rZ z2XP{}2%C)$I5eHo3MYT1Q$)R#B?4~APGRtpkmI<&T)zEs#@Xx&UEdqNk9r6agP}&GVLI zXYxElBP+h*rGh!OjI;K+@1~cEOY%o{03tL(f^W9oypbfF`NusPNatoEk{WdU#3)#) zBlQJi?^jme^MMCXE76bvjt0%f-q>#%E6>8U8PXL@wQR{G>!G^C8q~?lyCYctft|c! zHNSpMq1$!@@lB5cW!SW^hD~KVo%>r!0p?Ixor!O#iE)}TMrH^3^(XeAmS!~=wEbxZ z%*g*yE-ZDth&GbOVN|7TdRw`H;~ zcX+JSu9n6k^#L-)+)`pARr4B?bmOR@r)VX>6spPwORtfaJgOf4um;WF5T&t*k*MlW zN}G#MD@lTI@SP6Gv8KB>keVX`g5Gn)W0;{Xrbj&;DD#1mAfuy+8hFc5Qcc74dDCG_ zBIMQe-g`|X!%sfI(Y%yeseyV|MF#!8oq3Xn-V`FGs;3HZw12`Ky{)t5ZJ*ala#oqb3@+3Ds@n0^kPm8JW=ygt|GNtF`j|JP}?zRyi zX!`yj+N+xnYd5LQ8nL=wteA30jpsxQPg%a@+&$2?#pkynA9&nk8Wk#2+9K<*)t2M& zsP2of%ERXplSs%ymqe~08xS(gg^mTu7B*d~k}D#hK40oK{ZZY|PyE}`N^Rt!w35I;}t+sW3f`6OA7A?6;v`-Ys9OOfKKlSRp?b(GC31SYIoQ7He+mjH~IB zC=2xuoyx*v(SnmT^}Qfy`RzGJ3{hg5WcF~%@?X~sK0q|8koj{~l2a?VY1Fn>NP!=a z&i=Sx;QQ0ck7Rm^{h~e%TO*rkx7cV)bqzBZpjF9GDEW|@Ji;KltMG78iEDm1~rnHGJys~D@g ztQiu3t@cB^MhSO5B^UEz(z3OC%U>d}l(jGKH`37+)~n(YtG~$13Soljx6F(rI{Neju=Nl4QF>giFSFJGM>&@}6w+n*7>~5wNu0MGeCHe*cXMY37uV5BMzp-IC zp^fPe&*IKUcp&O>9ha?U4J*0S?BxGgYCA#&wq?M9G)PE9f7txh?omPIo^Bx$qJjMv zPrHeFV!G99me^D2`IJ|Xi^hpKuo2;TQ{)-Z|=g-PaGJ|40ULC@~~oKAp+tw+IkV*a#Ybx+Lsr|S47qxoovP=(4CE;KVo0AuMJ@+Rt~ zqr-tbZz4ifSd#zceZ8qK@i$Z_8PVWPr46F(*v6D1dF zMGDj;#dtZt-x{IjzMHUW)p@rHW)^9kBU9JL)sup<+Y$fblmDOuh@11Bo$8HWFOiDC zMB_SK_fMIJWD|byifzuWrxTCvzybi@+9{C$B4mcn8@=hJ>+N5_7-6bkgN$ET+OkI1 zV{+`}wZ_G1ivz8B{Ev2$P2TD%TR_omz-7kUy5%|Az881clsrA(G^&r%!!TTh+SdkMD^Nr$Q7_Wz0EsLJUzlImX<#ha z-8|2?nZSjU_cPxMRh7_6kH<6xUKdzP0;_=y&(JObBHLeJuZT@Q;x?Z|%jM0SzTv}$ z#I_AySl^-4`un8EQI=VNn77(9^WGTo!`^Ma_@6wMciQu1*u0x*zzHiXvwoNHxdQ|D z_=Rq(_Utw7n!`E4# zXzD;pZlj~8O%CD4qij7Ew#5JTh_q~CLepz6E)U~*+Hx0&Cf^0|i}?|%D#&h3iyda8 z45Nt}3(5=Nsyc~-$hfTHQ^ZW5?Ex8hfnoEkzy(UluH4rl(pp1(QUT9NGx@mD+FX^2 z^}h^7b4}KWx~4ipX&rG@?CoazJwo=))v|R4L0vZ@Km|AFTswz!Kl2NJ1yUf$j{J;X z1UKl?D<;1l6$Iac+nRSbN5ON|_~+c1s{YqhBMq$@-WuU)QV&uGuT=8`>x-B85-uTNVB zlQ%3~`_f)dP`6j&ZC@uM=R+?v+hRJXPTb^|M+&v@jHGqWUvJ0k;4VO=3YK--J%B(c z8g7G!2Q*-ff1mb$y|I?43pRgt*s>z)A8^OdLi!-m-cbmQAH4;=G|*E_A94l>P9_Rj zRTX4#^#d99;OxjmGiSIzC}dhnRIgU%Y4IF<2GlJ;ynDlyxy+im#GNRkR8j{#ENmYo z%3?H7ScfY_BxdrqnnE~ZR6NBXkmy0DZAwFu!_9T&vVk8KBu}dkR$QxUUf#?UTJrPr zAHRJ+z@`+{IB+|O&LVh?N@baHX>yPxW)HP)D?vp#D3xr17dpd#>SIwd3vICMlP7EB&fJJeO$d>!i5h`wyRX zJX5AepG|mHhrp!{|1d(^|)d_e;bC2vSIx2(@swEbYP;M-D+(VOx6^tmI>PjYAtKk1^pKtf zxCS9gMYTt*FQP{*xm>r zG=w=+^&lKVlE(a94Q772&c6i+t1}r;KyLh%#OGFXFg6I2-J6cDD2R9m+t6wclPQ4g z$tG?JPWqa{8HbrC^qrkp^pu0LQ6H9p=0SW#fLEo_%83X0>G8-p9cc$R09rBQ4ZLXb zzqCv^x!xH?{;I(ea=87z#?^Pxwv;<9@aTnY$-_>V`N9V_0b7?|l(H25`Im>G7JyOd zuzk69`P)+%VAle+bJYR5oJfl<6ySN3aA8)edS40~q}6i)?CueTQQfu_Y@d^Y-#{uRIo_@@)6bZLYx8=0*k)Pl4iv!5=y?zS(`ok#|OU$s@gvL z`W9Mweq@2M2VlCYCt5OZrcgu4MeTV!Y$+gEA9FcudaK)P)r#R-+tY>2AVf*m+3C^# zG9gNa$(ujW%2XG>e)fwR5_moQg-|(>dq#k#c?Roj!R+;edfbTTf5$LJ;0%%R%uG~f zc@zE9-p$Bg599?)W{)#4eW)00v#Um=sR`FY?d2-MXU(TYnWgHe{c#t?CyK#Zp-UBK zv3HK(2zq>U271E>xZMM8j-HH08yEo!72#_HPT78im4yh_rYQ-jSbLdk+uVMYpiw(GNkX6a1Z!72g{1c6k3wK9X zGyI*$lYNm6#(Flk5~tJ1#`TPSQ+(@uoqyQYQ%D?F<+xZK)nuNEe)tzQPhwxl!S}Gd z9)9t*uc5y^&;R&;V=J@mQ+;IPZu$ z`4-KYQhf*ny4}o-@x(u1qN9DYqyp9fRAy++u*!a23_J-h zlHJzkyy# z;gJJ|{rgBJs(HW?UC+&nb1_#<|7(obrN2fUj3oWZa?VeBlt3MELk~B)Kc{N9%LhQ% zzB@Yfk;*4wl|9sSvpTTViXGS(Ga8Ftm%G;IDg)_WKM!`?XU|y(144^GmHBv8KJ4aW z_(l1~?`+BZ0SPvEMzLS$MxbcCz@LJ)ACfX%)+!gXfa{$ z92aw24Lv(2<``KwSmb;+1dg=uEYEv(LcU$gUwoy_Vp+wh#7~N zrV?f8;r496BM+|__j+J$SdVDo!;CHNdA z0lqq!$?|0=AH5>Coblh?v@eGdAPEDetNp;SgIxG5T=sN63&uWcG}t|mn8^t|;}@mG zyf-rPNR&L+VcTk`0@*FZmlho{4m3o5^jcxP$dHibR$4sB0N*8AUa8BVs6n%uh<$)= zYg}7FxX%uyW;#joG~D4KYBUpqbx5dBYm`#+jfw!?q?|pU3$1VceoDD6$hwM8j5J{W zyoQI=Et7VUAU1c#xjKzPAv5h=3grt}Ay>ZLX+PQ!(*fp;T zR`x-<(w1-eOk)-}xxKG;>^wyW5$NGo8U#Xu#M|hGTqla6i7B}QDH!b#Rd^Oa>_7_~ zGoIJH6T5-YBBj)vhUGxJ*o;0w=imt355LrSvlp@BT|W@uzt8K^r{oBWRR6O zFSi}1_gG)rHyOGAQp5I5Ku1~|2#quipt{L)>Eh&s*FQ0A-#ofq#Wg*<2&V-2J)VQ# zQXo>+Qw2^jUPr%HF=7}U+7hHiBri2J<57wRL0=kBwHNNhKQxeq>42Xh&n~p*swn`h zBO87$VWftasspS@^+$2?7Xla`oAgF*+T1p&)f>CZbbvp8`HVPv`RNCa__q!PXN=Sm zk-tIK3BMT`wENgEin!#PwAsAGOP`XEqrzZBod7ndixK#Q3jBk-O|r`ER>IiYTw#3e z+*(Z_zr;LFmOLzkJCJ98UEft?e~3%dmA0m#*W_M;b)id-Vy-Z2^S#*h#ZIR0uQeZ9Zu?AANO`=5CFL=5 z&DQOkN`jSC-j#0=6|+e}8Uuj4046$-JTIpG54;yTZ=W?}j*z5pY}}ot``~PnIYsQb z9=WTR=iFGfqWr#?dSCFWlmDKo(zVi}WZkVj+!*U$YCb{l<-wV1=#?lOWI@(e3<~Wk z+5_&`@W3a~G!JDgZkcNz@K!bbIW>dGk6Srv6>Un2cbVbz6JDO4r6eH6Jv9xc_0F)= zhxBF=k`JBoo!Tz#u)LPS1yUSxcZ2$62Cdz?@>ekAJ#b|u`{()?zcDN7sq^ewXxR6{ zWZ-?k<4(>z{B{LfT24(_^8gZZ6VcqK*?b`e($Se6+{i(=hj>%w{?`ZbvOCdP-RWoi zaOw$zl(`W^K0S^P^5cbR%l%od^39cNqbc{;dbO>$a5fif{oe5dKwicg(!zx}YCOXB z`uL&1U<%>6R#GlxT4z~0-JuD0J@(>r$JnBDWs&p-3FAv7ygO*?z z*o-iB7L|XJl@2U(I2%yA=Td1=#w@cVJJHP^boGHjraTBQq~v6l)+!GYCpP(ZbX2*B zdul%#v-~#t`=kb+pub9MW&+I(ZQ3t)MoAz))>2LA_#Q^H%m=|g13I4%YuABa@EF!V z!?ND)03{y@9^}ndLP#M#SJa>36#f&Pf8r|nbG@^uIcmbx-liRmf}R%jbULCpUS7*! z8+o+L2!s+$sgEI$P*kUAAK;cz2V*`_B7R_&>`ELbN&LeQPwcxq4#>{_%&01CYJF(! zGfPmv_(jd?sL7=%{44px;Pf~z8G2xjAM?Siq6jQwkBmi!rm}oP>n$qnH_Eg_Hm&++ zOz4bbCo$ZaTJdWzU0+@;cvs24K`Z+Zkd$R{@YG2CbFo2{TYYNCYke{vwu5 zTjZWe?Ywl{-Zb2g@6FSomcIUGiJWps#RfCP(ItTjF9mZ6am=YaXbc)Xq<5K$yL z-wVpJIG3L`k)48b-*i1@6c$pnBN4*`b6<3zH7GuD7vQ*?cGt^DjAPdQEGyo*)@6E0 ztdw4V*AcYEXz$i!ql5gcC81mMfuh3mt>nk`8n*qk!@wBc=j=ij21HCQq-CD|JjAZY z6)nP5jC}iw2)o#*BoXJVFUWD-;paOKWLA13O9T z^N22pwSBUeDv(V=dHgmenUU#ERtW2GC(7A@i;+hiY;Z0 z%6L+=yY2_oA+aaB$nY&bHb&~JlMy)~p}pgboKo61;ea&ISSEAEFb1lKpdD=pcv+tE zfVO6&R#Pq!Y9n`EI4rmM{n+Mt;@@jXyzF_vGSa)tGBsKF%$6={ebpj8q*xDwq9qE; zwKYrw7q~DO_-G-Odj&n{j1@Q~UNMQ2Xo*Ui@w9Pne9!=zK1!>*SjDJIHud=g(|c6c z&NASCD#;3wVcEFQiYn#8#NyVZslcI|5ntpbU@5Ie@*5_dHR5Tad z5mj%!OnK7(wV4|DuEfGYq3ELrw8Mlk9mHVX9~*|`(#8&_s{BCIURnX5UTtk9#Z6R1 zj>LLeHG_+az!n7k!!qqRsIcjciZtJpIvHOOuAhDaoyzJ~dkrk$$uYcBmn|$>GHl!b zl~aPPffrKp(O5{-wC-igvakN=y`&1E(f^Uu`=VG&)B5ZXMW42*7$76|Jb)eJh<}i~KY|f>;u%pwD-}+yCP2_zJo~>xlQw3Hk7A2;3Wm&!s zP;QlKcltsEJDs2p53yaBY%oSCWH+2X+{C;6%BV-OinLZkp2zL0Pn5M@W2<=27-YuI zyq(gPm#vGqSx$Ab?6Y0aL5fMQI_a=ar|%@~(qckV{q$vpFBo9V*!wav?qI)NR0>3!1nCN}WlF4>8560B$W+9`^!L z+dU;)g~_;WCuxZ5N!bq`zqFV20PzKD?&?qYvjMNz8#VA$A<_Y(6VqEyU&|{(g5bYV zPf?gs_`z$tp>di1S;1R>*^PvH#n{WtfhpSOekBB^Rmx0w5}=L>ax?Y(XeZF(C1CtO zA$GI+u6!D2>VUnLD@!SvTZ9y1LUckkbvv{4BGf{!L(aOaQDldHGUCh|Pfu*U;eod; z;o|mH^_KraDHlOr%v{XYTY(mRQcfT$9GIx?cCXA%%$=~z5%S>0>LmMZDJ|MX*Sz8O zCO6TC3H7hvxT!j*JM$}kEdZ(a7I*&fOU9BSAhV1dhLWNt#$$G_PK*kTv};&<4lEvI z`3@MBNE^E3orJe~_#2^v-ohU=sa!^$o!9tg08D#KelCQ%piOdSX*H;1t~tMj?{qT; z@)}eDd4x#;Y#B&}D`OEm)fC)d?`A4!jwv-4WB#9C^4p+p{PeSu+iY)!MG`V4;E-?A zZSJ&;nj0<&gYJI>1Tqpub}OjaB5>F;%2Pkr+7Bh&Mh;5%bCPLzI1N5eF9mE>$*EH?EGH8Vak|9e?V`m11`)uu$plP21-zR-8;26#rulcrk{Cd?P%D_ zS>(W2SLQaE@&NSH^ilotQ32C9$veo#2y5jnSN3C0PZdTS!IZf$%rXb>eot_j;Cmg7 zT&xcq5?XHyW~k^fJO)-fatI0^RQsISvh|b`6mXPfUDDUt(Il^IStNL(i~Q_j_9K_U zSog$frXVV$M+0vuG@zwLH%nDflc!Az4v@qc+hDePa5EXx&o6}X;ybf-IC=tU0Ak+D zn2}~i*%{c`5XepetV>Bu(iW;*w94`U8Luvt{od{{eO0dkDmga~FYnmL(I@exJ9$9D z2L9#LBzf6orZR~Pcs2jt2xwrS&yS^g)wdI&J@CHK2iCZ>!v|hMhGqm!Xbol_V(W*; za1}V)dPx{wkND|$$0D1dddl!_pGT3`^r9l%B7%%Yvi6YvaVH~QW>gR)9pPcBR?^J; zB08vDc1ViCoVwU3x|P85;{!zQI_hRYYPJMtlVC&_zPv7 zWo;^WU0i;(;ywa(KtM*meP9{W)edVO4s|A&F7RII;%t8bvXv zK?jaqjsi$|_hj{Z6T&Swm7M_B@OPvqC4vUSU@ia3n*}uPyjVNu`;MtpS*UU|%2ft! zQ5RMDxU6BBvI~kYjUsqT?}<5197ahx`Xe0Os1d!!@}ZnX2wy9jOV-)0c)P?^+etnu zpgNek^E!i8O+ogkYCz9EEvEuO6_u_KBk}lb3D1SSue~z}KtZB`kK2Q3b=6J*cqg zFHt0cDlXX`OS?waNG)bWf~&TE|1X{us@OeLMcM9NWBN=#j2N=rk(j$wInz|}S9xS) z2^vLN?nm@GBGHy#eh2Bb9gtUF3dL)_cuEKl?aV;XAm(qEF!KMP>Vxe`dykY2_d5oj zq(VK0l|}g%5}uO;8Ra7oY=+8K4xrjbFx5Vq6Zs{!Ss_g8C5NH-RY1P2Y!!(}4UD`o zr>t(xKcmG3=?sk>WjiL3O0~rQ(3IKmoqjR4hGdZ9tlkFJ)pF+Kd5!P_5fZh&fms-F zFgE|opHt8H=vxS$+~pIR&Q25)1rHc|__%ftzOPF9;XPykF{DX}b3dVj|ECIy^=VMq z;6a6XVC08K6q(qL_uP46#_ufw1~(qYOeuW(vIUHTGwFE1n-fkeWo5(NxX{sFn-WT} z8YZV)_J#gkx7!;;2&QV3m}|S0{_O?oOxd8U+OiJT}PT66^(v0@iws=Cn=JeS(&Q?jqh3z^PY=ptYz^3rEFTvooDC=fv2vT@ULu9 z67_0hZsARwEKd*sy1{Az_8!QI$xbllV7>dYi3%(s$f()Nte^(8^^5hTuZ`oc4CD>E zCjUAr@#*G^xZ2qT5Xx)-^*c{_Dt)H*ufzA@L{Vr(3P8|zransHDb9k6YD^!O&mrz% zlkH%u{lwg`FmJV z0Lc`4>}jyqO0*NVgkfUV>#166H+VT$u>~f={tqQhh1E?N%dLwb>dF`cm$h_?a#Y<> zAh1rq*E`kRZWp&0EX+HEOgm3b&c9JLt^Wdi8Iu#biv3!c)cVpoS(m73bs6Dt0oF%b ziv$1pO4)Q^^~_jc;_|1E@}NJu#n}}7K51{9MFU6PmegtX1V=+)*p~%-fw9`dZ7BS%=v9l2dqxY!wM4=loc$K_wCo=Ai06UK5|nu97ue zSis10eF<=LDc~*fgTSp3xCX5UA0+4Jo+`ZUP~Jehr-_t@8@I2V+&i&cAbGod*~@DMMsB5RWBw z5CuLhy47Guvw)DM#};O8z*U*mg>d{pRS=*LKS{#S^*1oeK~F9*s#V8@rM|2DL?-Ap zEL%T=d{dXisJWzu7(1ThJ1k_wl_;-xIBT^r>zAbdp2Rs@&!PW2BaAgWMZmWA_@>zIw`lBwBWoU8g4($TT? zmny>lN7Yv_RJ8_cZ#pETgiRv|2-4jMk`kgEkq${gx*I`28Y$^6l@#fc?o_&S(+z^e z_bxo=-uwLkHnXPQiDzcq%|r{N-9>8dSWn{g0(aQbX5x+y%qc11X%jHA+rd8XvqQTT z-}O%s)~`SO;z(DDeZ78fb!$oA;D@AI+37YLdJEgaNlkqM{rrj_j*F}T-iwhj;FXBt zKo-6cqw~%4_!w=g_VnKDwd6+;*xjT-L0^Hldx7i;W|7=(qo_X#j^7YnVLxnWperfe z*sx)&?I!B*7gi#7?CJ`XROg_IPu!ONwp&d5qf>ey?%whWGa{zcal=juQ_$^bmt`?P+Z z4|Cc3=$rIT?`@VoLzM?j3U4UDyU#5Ig?#G+OBZ}uMN_1=i}tSH}ora6<+hzh#3zl#by-L+C~!8BbK1H^lJyTCO~^S4GkrsG{c$Rz14_J!zV1uZr3`|k_O-umi2&FG9Z*Ka zs8leSGyG*-pWS;f<{d?I5kY-#+x~~8(f|kp<&W$^u?J?$UL}eQ!w?ms+1^16X?|{< zk!JXqT}e`nwuokW$hY}Yu10vvK>12TL=z#6IH(jD{O(iv&$Xi>c@iis8Tr!BxWp2N#QvxWw30WTo9& zT%Re=7=BZh?{js)_DAKLv;*yQK$2SZDgjK;@3q~WaX<@!n<`M*r(4E9_`Rv1=||ip z9FvN&!u>x}AO1&F-dWr=8ysRpuvG1f>*6ip8?HmL5*OiDc%V!I#_6&v8RkLH-(J$f zF0ywd$9zaVfPgae| z&R#i~UHRZy>k?|eX9fmG8AM6rly9GMZJ*2$B_yjTI=Bo!gA~|uvvTSkwXm_x z^KipuA@GE$XoDw=C?qENdPIney~ZTuR1X?4bVysr8yk730Kz(a&kBrf$KE3_t?~vv z_U>5ap#6ySQaO#&z(V=eX580$gE! z3@QoxS$AFdMKqjB|Fx@CssLFa$+nW2M=ClT0iSRL`Ez|tM7V_i5+zUUC1qmIb9p=% zn@3vP4yApLrSW78H7GDJQHJ3>#XW;ojq;#6xd2Q&BtQF?60P^AiFZNocYD3A{7tz) z_EwJnB6{~bEM*m$Hh=?%HG4zyX%#(Grdwm7qx&`kwEbb%tJou_(x_6L$g zw&m4@o+Hz4F-eh<34di2qku5{_JZZbev*3f3$mQY=Dg|#*;FI-Iv~}85ifbm!Dxl@ zzeKp;N6Ui|cTM3*xk?AB)y=Q|VEE)uVtgR+4X_=pyi<7lSI1L`klMXMBT@A^AvQH$IPIB4!dGMa|+YphujBfb(XTau}8h%!=}WaGZId~J+T6)A1~*M8{CcTv#Xr0hmUjil}#hz8G*i$N$S z?lcz2?}E`DD%Yjcu|3dQBifIsmZN-#Z|2GI+9cvPdgd(|!t#u3iC0Qbl|T2FiV9IU z;#wKMc%p-%*?kK5(F0APOX^c91jYP*Ei?KmHqsSzL8Tv#Tl=fWycuWmqHdoDvE5*| zEfZ?LR|c&rvx+-1UvSG;ysV%{d$(b!Ow~9OP!O28i3dJ&GnH$Qwsq~2Z3(xTyZ;aZ z0EmPIxIW%0$3%C*&=V$qCLF4TN9@mTqra$R;P!pVJ=M$}H6qA57ENOx7f?_VI`&R% zfJH0P+%t3s0iRCWc+dRaiP9-Lp=v1+7t1f3k8J(BZ*!&R44^>V*c>f zKeInjBH9lb3X0bpou*>_l{4i(WR3_qc18rGK2Oho`i6TkrG@sNA?awoTAJq%?-%=h z&A9-YAyYF+03&ONtD#T`pbBCUOnycx$zjvy`YY`!c&0cpb=XYB9cC_#c`1unko6Yg4GW9^CU9jDw7s!nEiL?9T6A4c5hYOoet)k@LLk~_vUG;9zZ#` z`HD%&RWYg9oKc1I38hj5$gXGS56A6hU}XZpW!N)^-oRI)On0QCUGM=@pqv+mzU1&u z+7mN2IpiceNbge+HnAJ?>eSn)z(e~8X+$TV$gB2HtHD6@M~yfx-Vbgi#LDL;rMF4z znD|O3DbQZg_3Yn~PJ1b+NKr2vD6;?SbX5;|#!vsfcxabb2tc1PGT8$Kz6GZQs7!>N z6bey}bjMqK$4N)}XN_VVhga!2-^RS4$~Dv4iRz*Rt4Y2+o|!jDtN z1N(zlMEhYL7Pa5K@G(dPgJ^?&ux*`heW%M6{B%wX zP%>OIN&tX6;%tI#a*t~YUrEeVa|Ww~d>wZxa3I&xOiwx@hwnyt$m4h#CH;v@63rI} zrqMz`!;_?KeU>)wp{p^xvw`J+0doeq?hKfi6D7SUpt}`4|cB_YbS0 ztzE^0L?Jr5^>JWlti$Og4^;^Hk?Fasuo|o{p!Z2EUDZE2gaHJPe4u<$cjE64b6La>OBDKkZnf@ zV6;^8@a?5LnG@?m-`3WGI5IKbL+A8}yH^h;;Mqid8A z)6KhlP+4;Omx9$ftp{*LH=ttis=>$9Qhz@X)vcsBYVIN;UwxVEDTV@^yJ4Q zn;gi|+ev1v_#nR1`F#FYk-~u@(Neh>bY|(aVgY0O^utz{+V0WYT=fbO90kOQ8zEn$ z1CJu%z4>p?jbGEE#B^S<@wq8`eYEv5c(TS{bXErA~EA*itKbN;)pBxJB{G3FHFw`a;9d4DfMt{QtWyybe#3sYtw+bdIZ zz_e*g6`4uWrG_UVtv&C@=mT9D-y|rHgV*4T+*>7AS%^>U_;OBn!65vwTn{7T17EoI zTZfT=@+z=8V#o)XYGy#PBd-Zqm!%Zt;gBV|iR00$>}eUnvQ$nN7+4lo>K#%)FE)uf ziRKt}9TST|n!k zM1p-hy!yf3NEz~0qdhhO5B^lx>`80XqF%bgQNfKfb?Op`cHzO--Ver(G&W;`^mv#x z4ky6G&+NeC7BCkB8V^x37X%B=b=|f>eUy>#7G7lqJqzjGu-vTK1B3-Ef)=^^!{d@} z{Q#J-MV97g$>{%B5r6`N#R)BA!WdSa_g}?Y3TnxgQ3rOyG!|l?^N+`A5up%`l^#aD zah1J#LY?s+9Zxm&UZjf#Omnl3QjCZWwj>KC03+$@aCs0l`6tp3%Qh$_un{F{^Ys0^ z_1EUvQlMefVz|wV(o1%zRD2l1D{o%>FB42ScmNTTf`ABE^6wDyHa@E=%kPcK-3Ha{ zk%IA+gkaSH->MFjxK2N;RTwwWQFJ*`5;NbcTSE6xE z@n@#6VC6s&qWdsBJ10jD{?@R*)P=o_tgH zlRJSYEiOXJ0deF6;>gNsUg;D24AoN)xD#u(^)F^8vgOK=p5)TA>E}1B1#e(~Wde9X z6bgQrhZjYZcX;O~Qy&$q1?;}EC`xCii3}p}6_vg5|Ad7BgC*H^5WwX7iwr-k z7<63Zked7qAJ7%fT1#hZ%cwF6s{Cse$}{asz$)em&GuPO6xt&U98Fz`k3=C%ucOQ- z5g00cD-~frRh}c9f{`#@{fj8@pBTmSu`6ZUBA3 zfbO^>zR+eS3BT4}S_NF9{5_KIyM+!hh1&qg!xV~;rYybFweAaj;?g6tW{^!;R2j4S z1NzQ}f|b(&?b+A1AoC292?g(1)5ljyfDV5JYXC`EKN1>rn8Lmr2RtTOupoZdYcC(~ zCXYreDXhD*?7%!~9>j$^%jJH9tdpU$SD~e1C@P31l8m)=HaAc;$2P1waL4L=QGN}C z0_6711h8i1=gvpJfU#5u-|70LUL95&op@fdo%K#bFwsn1OYPj|ACd5+((ANJBl^E2 zJvcPD^Poqz^TQ94#&QVgL^!L0-s>~!07FFKxX2qNdwu4`X>Cld280kua{93czFWdUz?lpsysBnZl4Y;2^F1YiVxGcepndO^8_x9)|{z14Z zzQ>r8zY)4C$Mjo4Za46_Ri;>@!hSEme2CW9r{~9NN>-fLVj}w$%$r&jvwmlMnYW;f zqwCBg4Z_Ds`TwD)?IUB(@{^_e&e3jZ>4W(JjIThn=3Crl8-z24pMyMOXpST<$JB(s zFt;ExqYwB9RF{mBK45Nw+saJKybC1~TwTsRvhmb;^Se#{FK2uq#x(5v1IDyNjQRe> zs3+Nvz4g`hWRD7m>vtYEqap1wh3OtmAAJ3?XdIW0tab^tL^kz@6a*EhuX9wvW>sG0 zrNjlMUY{3CFmtdxB0xZS6dbvujtqL)ngRI3bn~-GFGwh%Mp6DRMYIeILEUPn0}ovx zr{Yy-n!Kc;_yjy_axbwGK6U{A&I?sb7jCKzd-P0AIY_cU#ju;SQ1%xNo_r?HU1Q>- zC+jn0Ww}winjnDhE?*OYJUF$?b^C^?r~Ez3gO#kuoU#|yP!{%Fc4GH+Qe8Qcq%v@F zl_$8BFc&g4-@z{NkutSXbr90l&N5xNrIFm!>3RN#1z2=cOp3|_w#FsM zD=(iHA*v*T>%{F%zx!_7^3-WiRp)?ttaV@h;o@_9SD;OQXK-$2_`ys4ZQPb*)JU9* zkc63=iCZNu^`HFY6Beq`*B2>wfosggY7aIfITOGRPQ*u;eJf^j2tc{EVt@HV>ig`z_~qv0mpqXsBF#(4-9Ht%2FSkWQ~SuH@_m7?(ByDvrQz;eFp8u!pF* z1`r{?wFeO~fc9H`%m4h1=DjNH!PQDtl_cPNIx-@k0EmyMi2x@r!*JciDc_&sb$X5Z zVsnhYOsRLMAOPqPZ)8VOfvdAa>7E4cD2*43+-3M%Iz3(O8If^R9M#gUXnjI*D=9Sa zT`Q*6R7gGnj8-{{LK`AZTr0tzGyP=6=I!Qz0SD zb9L|m!@>2&KY=2S%+2Wrd-uidTlaPHSn1N0kw-NvdDwoEE|A6vzmgG7+b-x!>0F5J zFshV4G8He2fbMCD?ySj2g}VKg%i1+q)vQH2DGJrr35)2)#R8(@m-0> zpwbPGVCv9+mdF4xhu3o%}3g*XmLcYCc zG0FSWcF(D0U4ZHlYIRD}Pgq!Q>s)gcxSY0p(4;B^(rJ=+l}49kr}4`~8#_$TyMan^ z_Tz$fq#9flJ4}S%zj#JGJTpdoO~J;dw{kURQMLtVFV_gnq5+JofD08Eri=em^M6UB#ZJKQ9WZ0N7bC`p9;9hU?^>{Z)McTxY?)(}g%8_Zh$kjXj z7#Z5>*X9<)`$Z@8J4uUp72rbc_bN(|;C)c%X7a*Ua%hd3Q&G>xPYWLnSQiA_Yi>^5 z4XnMzKiboG2)wZ+5M29iG& zH7RTbN1wx8z#2(-tZY+;AjLy@eK}4J_vU>mM({VkE-llFBn` zeYW1EwM9*wS1K2fBm$mM!(-bG-vS9N4LJ;l)&IW*j6G5de+= zqXK0(*gn0Blb@=y?mZpp;x#24ROgL>^0%xnY_Z9b*T6d1>ynH}kHkI(-V0!P@|oO3 zRdTM<_~+0*W2e%)86v%;?x@W&m%~T{<$99B=d&*I5Bdfv-DwWN#*=(b1B(q0gCvT; zmxL2gJ-agN5Ijye7ZW=D_sl_?z%Xzpd*WCF+&=QP5sO8GExf1pE~_~w@3@$J!#4f2 z9otIZwng8oWDqBzY|ZG@NqPJqZJMp=e~vn{vylSN#Jr}xRQVBHVt;RH2X_Xi)pwxUFNUJJijN(RlfYr+>yH3AV!5W`1|wuj_z5)+4Hi7Kmew9krC+;9BRGG{ZRM7SY9!GZl?sL<_?OC>S#l5Q0A~(SMc_&QJ}==*s?Lkq$+@b@&AefgF;q z>?e{Mb3SECfg(CAN{)3^>>Tno5(8l-c_)4r)(jEn1QSEw%$6&-tylYTTt|+wr+1v& zeeM}WVgC5_SK&xg%zQptUG{L-Z50rtK^svQo7m-sP?JaR5l^xAo_~Wv(_L46&j2BM_sG{BzX^Ma$%v zOoX#(A@j|GU7vDuPs%oI7)GYCtd1wYxd0jZ>pqj6t>xAcaeq|`|JR+lDg$@c%vfIZ zI>-`3uhp65rDULoMu0o%xBsBZ+`iQc1}7f3g@uKe z)dj_eV`pRlZm8@@hEHu8Bg@TTj^W_^=%BgvYN=ZScd)<|>+UI@1}fWhFFps4@R77v z9y_|%*FC5H2fz0LqcDW(o~{3ryw53BIpVpNIS#zP^PBcVMlZPh%19zOwQ}yMXoGQI zvvEkzms`K2fc>*1!!Hr; zc8|uspH3##&hmZ>Z!W%oN>y_SwIV94R1IJM1k$&8m;dzb!H8Z_40hy%xh1=){Z|C#Q-g(=l!C4D7;R$sX+W!@v9qEQL03`?)*))^Kt1yS%_&TNQ^^37;i-f z@-G97$uZ;^3|&awfSo?LqoeHW!S%mfYqYVv1_ozGDuE5(HGiCl%`xLD2c}PessT#~ zwKv3(|6*`>JAWfh3#)U@N5bi;6Zak8wSi_k6$%YFhIfP%Y$T*MxJR!hjs*xecG?&l zQmx{u?59RL%i0794K@Wqs0RN805k@eP@s4kozC9sRgD%_z0fQZL;K9{*&bw>V~}NX z>RVpBhS_yKM|YR5e1i}6_+F_#0}G`B^TwN=XWg>Olp@GS^WM24Z2j;Q1rc!O3NyJ4 zeZUbfu%Ehwu!VhO+Cgj1xI~J;>FEHhEw3pW6g&7gc8tH&$F)`yne?|AumHc>psoZx zq2bpo#IWX9@g@g32d^r^BKxG#LX^Dniou==BH6Oc{r09=>noZIg*r5rdfS8qc`4`7 z;I*=Au900*s~|v-1_`&vjpv!s^}0X@D!A@AYj_lhS{%pap>d9w=5&u*ny#*JlsYH@ul##Sbn*#14ViLPV;Utxgs1)HtFan5Cb9xDQi z5D`a}=3#Cg@ZuJ1X)(vU_|q?9IA?9@@^9|0`G7{MnMiLH3^Z z9)_ry9cPdrAyYLo*E{(I)T^Q(ek>mVsUA__`jNKOI~`De4GT3!YK>1p!c-0QkDgPp z8kz2X>Bbsl$MiXfZ|`cUF-Ew~*AY07<5B~jzF%Ox5ylD4slXnrP91U`;sC{zgyN8PhCv3X*nb9o@h#RuKslx^kB0QqT-K+VnwJuU|h~^I_r!i2`gUV z|6((#Sq3y54M(b z_kjOLjyZD~m;#}Djq-)yOiIFX?wZ7t$7CM=30 z$SYrzA=lm8{&0mIW|#Ol=tZE16!(mOO#__kf5nIKTcZGg3Xl-LZ}sb7fHSHMIvsLz zto0Vv*GlJnQ84llIpFVGekyTuB%y^%^WKegWoL!}9AYSVWsgoP%7&MxA{~y)nPSJG z^HRlOslJsA;o-a!*ke`uuW>d&N<~bF{ixY%h;KW~9IcXLg6Et>{+QjgUv6TSPgmou zm(|j>=}>#Gtqt>BAUJT?N(K7}4kGGj;=y-OGnRqZ(2Wgs3G{2e-IKn&^^Fwfx*mz# z?e^>*Z4Cf$1N}cC9llia{U@ivK%b_p9`15=@{rUNB2U&`WHDUayHb^vML#_$C^Jqj z?3EbR`j^GLtRS>$MVLr5mR8$`}%fPJl>_(;D29jlnq z(wtvDAgkKu9-0oRGL#by0Dzt5CMl2$V@Y=UyKV4Ws-Y%79!ASHp3?GGwN&o@lJ3ex1z4XZf~q`kYG! zcz4$Q*c^9@j|y?vG> zeLZZ9t3eb*zrCAeTpe`aDk@u2(=K3KFkhpjM4?VD<%rS^&-9(fsx5#he9ON2aTI>_7S8I0}(%>#z$E>Skgzs`;+V1(CIOwdggFQi#U1|S^qz};sn7!qF zHY|_E@?gH4KDc6W*f5T3a`xUsu!`;S{Aj(F=BYm(&?{|-8YhUFMC6XZO4)Qtk>J}b z4quuzk}S(Ty^(v&u94iD1q8EM@AGei3u0&)uWc;v{zUg}CMU#EYWbt(B^d10>q`oq zoQeZ$0vE(?9md!o7_XJPVJZM=2XGiAvF02k%S7~#*FVct`55a1=5toCEn=PtD2uyD z6Gcl&qh_R-gUo0~K9ds#j<6RcaerfF{?uIrE7WF{cU+ZKj*`WaeT^J>pEW@dI4>QS z1{9cJmza?Z^TJsW&?)v)G~Sgy+%Uuo#Ke$D*QpJw?3G;PVsHH&Q59LgC^5c*NkB%t zKq^N$D@zBH>^tlJqf1Zmw9T|%A7-fMWC?Pel?j%WXlN({%r#d<&n+I#k*hwOJ?C z%U>VjO*R(sjBk{vI%u(UBjkW%N|X$7Bg@3{;KwNvHLBj6wHCm~lUCuM4F;nVFtQ{F zl|@wj;wvWFCH4V$kxj3wN_cF1>=#*Ph+-8|p)nxLF+-E* z3QWyE4>C2vlNJrxchpdC>xITB;vF~|DVZLB!~AOY;>JG3w_s^@(9UBMfN=%5UCI0z z9EGUG-d|7V6N8eD!&QZSTW0y1Q88UZ^dcvMygK$CE6A*EqadPaXCBS?^!@TU>`v0H6XFA4HFV{hINw=hAfQtM+*<+F;i?D|hJe;7Y+d-8 z;N%MB_towOQ`QH-q4=LQ;6|3=J}0^xP?&-7Xup^VhDVKY{+VxDIDDm~*uQ~QCqP#m zBRG-4jjSspnJ&pqFF)Nol^d9SKTph(wsK6zt0u{I@t>JsCci4RQbxa*z0A{iv%_#)jE0Wc)C+yH4&q#CHvuj}&a=9g8vI5^603MXF+s;!U4D8n z?OZtdSt|Q|uwBs<|8-Q5Z0E8P75o#>6zeQ3kN8peXT~Yh>QQ_OP8410Xb4S-B-nxp zvn6*4C!s?rJOhE|1mow7nER0vmPc*@oBseD%mAUmLIdj5VLjXgQjY40zhtnz_~CS0 z?aLng6v_k`GG23h);dPK3`*L5IBdp_b<@hE@Pi-*OKy*^VUG#PsUk-mjTdIPLAH>O zK}{~!qQ{))NXby;hh6as3dC<`A~4&-mm55b_zEWAyXqPA?JEN`hWiV_nJ&+KgRAgf zMi1{ehaP|C!T*>)zzlX+a~^x$`G+OL-19-j`%!4nXEce3v^Cey9niy|zW93WVjll= z_2DFliQERW1ivatL3B7ca-t>|(6tBAZ)ecAsFz&7HTEB;SVVy{Pu&_%Fa!Z^PMi^W z8Guvq8vq)D^g!!XNO#Ib+UdRiV0X8zO&8b#JWtBSF2X(Y`jYi0!~Y@WX)UgqX7+S; zL<~S{z+e#t=QW2{3BPt-@Fls@TwM%ip4I*=e-!Pla_HC*8K)pGmA!2DE`lMYn$hf_ zQ@1{G-7)a9kOUgGM~&_K{B|gjOIgkQ2y}jPv94jwl5F>mithB6m|q=fyclRKoZWxl zg7T+#ij&vfMfqpHP}Xi|4~CtLpKZ843+q)`3pGm}-yM7*s^;mCf$J!(95cF#zb zE70T0-Rifc+A#bPaxaYwJn4eNx?D)GfmOWn`^FjVQ8U4$e%@o-gxHBS$Q2|R*Ics9 zN3#2r$Guf$A`R+OEy(Kya4GZx$TS2rcK>-AvwWd;<$VStevRp- zJrbV%MZw1B$8QjdL-;F|{^$TY2BsKQd{G|PCtbSW94~Yas$oB#1P~H>6bf|u{Nc|A z^{>8JP$)K!{ttxis3p%G*cfS~_)PRxf;xX27fW&vbV!EX$iun0XFfccuX>h?Y+vj4 z!>V-nnDM;1It8i(D&W(Qj6VY!J?soGmFYq_pM|o3&A&wdF-DL>j&Oh}`**9FGqkGw zIbEx6rw4tmA&6Ct=66g0xB@nC`-Xe&(xXV&c_G4a&Wr-jF@Jqg3iJ?_PVhQT>219QY+eNTny6PC_2)+Bl;A{;&n4WP2aVK)B8y z|7DJDzl)S@t#@S{E*^$Z;Y`%Y`0)#LFlf{TPIg2i{>WngBbkE1L5AN5Nr(|iL88nO zd{6ntkwC*-f@6~hdI5Eh4Q^0GdYMKqYHP!?%)%DcI%ku6_aI z@kXL&AaZeq2b>4!*{D!G@Hbd4F>*PUKg%pf!c5RoiQU@t@P*SW|4~Ueoqd*ifBJ_Y z9PzdtO!d+2JowpaK^(KF!hmcj@I04$v*S*&M1Atyry%_k_#Ai&nrnn_5LMR~Q_BYk z1GfDenQ&_t`U3J_*YQdF1Drs6fhY?ZnTC(<8WeDEzYnGEu!C=e(;ngwhjTN6zZXn^ z-lWpYN1MT(%3#EfmW^WnU-^J;Fw$D*Ju=W+3<2(#tY}`!RSxd7%(omp1L2@X$+jU_ zJ&ZO@O?;~eY4@zoECcZ#;jHrTx4T{I-NQITd6^Pvd*KKM96C90OfXjLRwT4Sq<;IT zzJQlHKNe+RzF(^IMeonc;;=aHH$)cz-@E0+cNMEO${MpsJvd}S<7JAPaYow_$8>Zu z`r-}53r?-3XsI|g0llcJ=+W{=0FlK$^0*QL*TPE4QjUjXGiPlZONIX6* z!J*s3kp}3Kj}CSWiB*6{n zpuVN!y}#Oo9E0&T{cu0MdZfG&#vN3>R`z18SS}%;S|lkts4&a{7a{eGc9Wk)0;!H| z2I`}#g?tU%@ZAGu4{dHl$*CoD&jKb|C0o`E-(}=yD*|C+Pj&r1tJ#l^wg0dH(u5RWH79b3dMF zi3+p6l~&|iX!HwKz_D*u#@7s-KN)cxc(kudvhh5PEse8h>4eT@sUwtPDu3ToWpX^i z{3RlF0=D0SsxopBF?M;Z!yF_!AlHV1ixY6S?g&RKU5GNdj**`l7H=$Y=#KJ+dY9N3+0h#kdW~9Dk zD&W+1jXo@%pp*UyWDJQnyagHlRUHxs|IQ0DK?vr~~$CO#ExBy-s<0-J{nLEVO2-4ny6lZ#Tv#@TR8#_{)?V5L; zOhId%k6+(?g2xCFfDEk8dq}W1`>!+UN4_I>gpmm+8dI>)DF-cYXIK8bxnGC(VN(j0 z_GTFqzT1}lXS(nouH4sm%DAs?uamtcZ#kry1iNKnwvq#bFD)<2U@pb9wW&|*Xd7n7 zxjao6ZV7Pk_nT0Bt6&qf9CqJqGI`PZH2ARr8c7!fByVxBB7ph2&m6L6n4=l_M4B@^ zhnLOzN0>|WR(7)1RV>s_h8*>q`)LsPnoSD=#L)rb+S&e9$U`a$c%1lcye~r=E)OPK zVa&ehU|R+{_VjMc+M3R|D(_oEVKq;0KHw+R@A_2gDO=)F=H9jNn4HyVP zaN@c0VuWdww@5$jBGnZyglcv-YdF#^jmiUIK;qaYZ=AiXCiF{|1y3fX<~lG)#dRr? z)vBiT>oO&iO{Q;=hU75tvzyQmc~q#4dxmyhWuVuSb#y8 zNbDI1%ql^3isYuTr)o9xJ$1k&sFJpVFq^dcTOdD=9e!QGFM`jVvc*sNilA#%>u%lM zY&X#j;QE{-xj4qvn+7)8=2ULKvxF^Ko3Z)KzRN?AS7=^bB$EhNb(QkykQZ$QHyP^G zbCY-_4c_s}CxR*?Qb^j7w*f&xYa$SkqvyOdby<^UMI=Dbq$x|}jvX8D#)9g|i!NKa zXpk7HqZ^30sY2XHjQ_&cd%sqU2P+W#e=G45tExFlS5fNhN1s&MBCK6b5aGwCcrPF8 zE6Lo#9FbSJcKPP@zZi(FcK-72u^m6a!@3`2&D383oR1q+wJYcsLlB&wX8EddWLrPs zMu>{c#>Kx2;&s<9YO3+pYf;6Jt^yR9KfhrI1@&8tDx=dxuyt@zb*&k*Z%4SRg>V5$AS zw2%KDm~gEwnjP9Ot|RLnf8?FlWbN4tII^K8Q~@|5mVNF2{M5I2Uy_oN5rVI=4&5Cqg5Xj?GNv;GXgBNkfDDc!#p<`1d5CJ5*>~* z$YAD;2r#?AD^G}gCKkaX^ONoeP>&384B*wLY$e>E)bbZk{5WI$2FYdSU%BW5G!*tt z4TiV{aE=^#uGJhIq1$8Lq95D7BhC zt;v(B(U&dM@TZL?oc54V)afa*yX>S@quWsuiy|v)J~_(2=xM|I2NnZJseocMS`LY? z!p!=~4>GO6$`PirDLZHPJfOW1l3 zJ;lc{`2{Ttwt-L0;7)(S@+oh_Cq1y%gF57fzBY9&-lW_4_2{cZHvj0TrWbxfS?KiT znNx(mb0OXM9iyHYlLYN!ARLi*mO~;fM*jQeLEK5Q)A-As2A)Kxf+GSvHY(%Gcf&*A zfOVD0A-+BJF<6)UMoPiRUHjzXN`tEJ<( zAoHNqVa5xqAU!nLDjKuOwn$R<7iNG^DeH$1v*Q4sqE0UB`5l_s-6`$>u=|TKCY>w{ zpkFyVN94N>Oh58S!1j!*&sx*-xsjQd1$910l)H3YUA2|T_;XLHLTv5CQQ-L}oT ziZyaYxGLr`ZO3)oBDH_esvsEj_Un!WGQ#7wk39%UZRuc9bLBn*Av)W}>( z7=6PrpI+3AEHFM}go9l$@fce^(JBV?>M!&Bzc=65ApuT%Ke&@YbN1)z;P?D`X4;_H zsTKo~2Ssfc4$~l&N^7@jpDYCL0t@W`H2Cn|E77Z{IqxVcySDsIp~pW_=ygr2Yb_l8 zs6+DXfcMt=o*fOKKW(~)-eb+bl(gV={$SG*X0xodQ~BHDp5zqjHiXnCO~uBCqJo`v ze#w^BT11A==U8sw)O#B$Ot}|Gfbn{F*T6RN(@o>=tzy2$BR$(%-#SM&Z3zTh%JIwlw}4W0 zQ@A(HYyV?#+=KBcg{)Qo{2v|1F_ymf%;zNEr+Uv`GL%mA^VO31BeOWCkUxJku@8J> z(}n?CX>uq?xpMCRF(AHeX4Wj;)&6~jc*j$4Vr>?f08tuy04RO^WmNwK>Uw#;pb_Gn z>k_nECAuO6mt;;T@4ac4Pf)AE0c-g{r5Dyc3p#x;m|{(n1bYKL;ZaIVlP=bDWK#u2w_X4jiMtdFJ~08iuVGf!gl@UvsP$qWJ; zEWHQwLnaol296olA--Sj-Z7H-9y1p z@ICo+t7EZh2yX;G43jrHmjoN9Y0+zTmI)WA!E^2&PuDOTeE4os9-yNDwnr+0JsWK( z(%U&kj*4jNxme`Bx@k@?W>S|V-rtCe+d&=ZLr+bwL@|Mf*_`lCg%>GzKX-SR_WcxP zf$#RaVb$rlz<5Xg0rwnBeS$BHBw}nF2}IRo+aq{fDY=#|zYc?igHEOQssp0rpl6-N zEX1(?nYSqQ_ zVn72!Z;BLL$SC$)^L1FB1@{gE-6{AY*~M9aFyQJrtHa0+Ofa;m{f)YSf!@{Uy0X%9 zHx0;!JBqe}%3$w7ZVbjew{0p1z0rLXL&mGGz(L6m2!V(%qS{i4I|S@`*bIo^)rr(3V}%L?D5k5m$JhunPHT}=lW&Pbc;LwGk}9TyHLd#&`P2F&zClb(=qsQf5DoS{q(D7tM^sfYz-gDI;D%o@i+VqT>EBWSKP|~W z@DLfcuYY-Ifh0qbP)qP(REkgNL40D89G|-xic;SCeg4n3$DkWe2Iiw=wy%@)81Q1% zDqb+tV>k&)fee;c85lfy3?Aszi0u!Eq9E-`6U`1tB3F&X9wr?C4QYimMCBpS5R$=F zsug?Gey4KW2lmFa9XaWc$q42HO(i{xc(`U+$>97;IeN?1l$ptEaC;=l%+mZl^X86m zwZQsDus2Xs(EQH_s|L{-GkvpCfj|mktWqIV71+}&-wMV?-+&N-#FZ#59Cr5jgSFYC zt*gN(WuDx6Q>l@W3(!4l&9M5iCTckpb&fA9ZSlnlxz7EPjXL2y_a;c%z_27BrP<6I z^}DZ4O$VRRUY~Xl?<(f6*H6GEZ2RI`p`)8GZ`Q?4s)GP34us@PC^63@Vf_zdqnD>t zhRJ8C`I<3R7@iPxF4%lYpRZ*yWoBT^hOw7?QbH8KfU|wDR zb^^K20JZM|B0eWp+LPQ{rfgh6{rw?&m$E;at+uH1*MuYNJGwmlBE+pD14E+; z6~60HQ_y3(4i08^OTLtW%ZR)`SgyW!Q2_zTnQ1ivAp=XZpio-ELo1x`lQj)jTewXM znsoZPMfg3?=bA}))*zC_B6VDt3Bcjw|t8eX$L@q>B-)^AEsko7H?Cu{?Jyu~01s{!Sj1XD+U+{$Uu3qx_2g-3AM3!gL?S=@yg&vunPM7h+u8Pjq4$I)Sn>m!*pvHf+lNEkO^PaeubS-+QF~W%;D* z@H%0dVAqwgrULC*oWm>1a~&Uv6iusBKntnkl7_JKeIrF2+Sw+;#k#fQZu0{v=1Xb& zVAPgpg+;7bp`0Y7vk`2VxUO3gjp4GbwJ0fUJBBxgR(+tm+bHTK;?W>Zle%vp#nSC{ zE-lOTVG`#tY69aWKc5kovphfMV|hUd=G!5QJUHfh*siY;OzjihQsBN&HLY;wLz_0o3S`?ts&M zKsr6E0~!d^)+Vm`W9_~|2f16RbQLRe*1HD<1@5)U06e~(oO-ElA0v>ZwL{nK<~&Ie?b}T90Mg zet$b85)B)|{DVAB$Tp3FW^IN_@Y9$xSN?IP*y)H7X zbSl#p{#JJF9P~E-hqCJ|VV|@}o!hovm)=QR=bpH=G>^$W;qo;Af=S;eNV$8vJ0gZe zsjnmFLe!hZ#Kh~$YyHK`Z1MoF`mFQu-ETH^nzg7l`$Z1!3B@lWF;PP<@S4uZK7}5O z_!z1tvKV}n#I>oA&G$|$^P;Xgce^u-Wh-ieGby07+FKkYsMw7%2K_8eE~ZY2boAL<91a+9wj*#~+M2G#FqP@#Mow>KWX;H89WXA;Mg&)HS*qH~u2DMjnp z3SvtK^RHg0xt|kFlp}DGg%>p?*B164)rS{-bQxZ>YA|~42mksBjWo`) zu^A|afA-(Dc9={QxfB6V)1H#swNiO`v}w;VWl|FK%5So~dA5;PHpXkDXZ4df;}0Jj7nG=GjmhJ-rUPI+N+ z-ECd-=N5&K!^RyDA2qd-cKZmKKw%bwX_Lpuo4)B!QWj-{+)usFG?1XFqzeNjps?yW9Qw0&7oU ziZD7X3UCW7nkue3(J#D-S-9^-K1+giY@C-8%xWwL9BU>oMVxqvSjJyH5`<FmJwd85I=^>MCG0oF~x5H~xBv&Kx}qS>O_NlYRp5s&=-%9Buq*wt;ll%Ye_{ zbt3grb|Ba`S5ceJ-=^K~&e!#kM{GG1Z0Pf~z@xonn|u+=Z)8AnI^Udi9qVxcgZ}~+ zF&=70Z;Gc_`N%?t`OOHC8;Mfcfc`M|1);jhrQ#&;8z|$M%Jc1C-l!ag%>R2fksL(~ zy9&J{pBQC)A%=uYfnA92N_)WPguHr~Sv=_a-$tEoalS)w0Vd z9(q3*uBOPPlk1fBN`&pWW7IDmIm&fsCfCBMbsp8H(J!8FOI~sm!~pnZ7bA`?@z=vT zl0~v`vPrc|>8G_o+!?7LjJ8I}8?U0Lx^?8%n|hZka4KUkI&+PtCzHHCd4HAuNZ4kF zHiNVZ^-**X4>tCQdOkHH27gdk{hH>N-j=?VD@Q6Vv)AWJ|8G4VHoI2~I1iU>yhL#8 z1!*3tyW=MbY_eAiy`@BxhKa}XhNOO@dA?rE_2Zh>Z51?->RD_`kwl?vT+P6EfgZ(x zPuilD71R!c{D3V?HhcVl;ZC2*8G4@`BaW=NRTV;01~9poS?ZEX6zqbWc5X$_t&tqY zKaorPsWvR~0R7+-&>4I>^zraNDGO~}=Ej^jyxexkK(p35wvN0j#+nVF5hOQ>_Fy;z zDw?p$h^3>~B>F3h+;`}6#d#D9U8_D~9>B2}J4T^CozY6Yf3Mle=kKtB(EV=eVjG`0 z;kz(>(o^~n7ZEteQ?cJIU-A3v26Egnl5%EcIM4hi`=bg7!sX$-Zv#waF44MjS$~1D zkz(YYWUN=>(bRLIy_AXdy*@Kdlm}_QY2~zS1qmt3U(yx{rp^B&E$Nl%>En)gdEV5I zOa$mfW2Fdg54o4OR@L##KU=?79tzf-omA7^5+UU$#eD-j1NhoMo-Ik~{p`tv>AR%u zNy&J1xrvAZ#=j}^#+oh>>L!)AQ3rXl5bN3F3y%^I_=e(iRSbre^3l`C--@9m>aKF% zDETUbjs*1gTb0lx_F+|C%Bvc(AALxJ% zG*We6#YEj?H(QF<;IC|g2|oP1xd++_mDMZZQ}1vLWbeTxrMW2aZdg|JT;&USo*QQr z@z^PNuB*Zcmxv6P0M*N~J|JKlOzvTr2K)`SWdZo{5BEzsxTbIP5n;lYuTtnXc6`^@ z+U}alZ@LNoJLf$nIAfB#eK`I}K?Xoa?Z-K9kuL?qU)WSx2liyOo{f}c;T3x7#n`#qe{uY$kl{t=fcEr=n`z5?Bop2exFPt^lxj5)yw0AZcpI`>#o- z6W=m?`;u9Eogk04hgND(og|6|tKQKBqJvSgew#&gPa4|$h{9!`YZ7r(X_#BiC# zVVs~azxKJewGU&Ge6s9;)0}#C5K2%#Q0{_hz3vpN3e8ZB-z!|$2*9JNUpCZ@Q?Dzg zaS7$?Ut9IvIbD5_w)fAkiunPhCnok>^DJ1I6&G&Yndk)5j#8A7)PB6neUsW>P$InkSK^JIHH~W4a#K_6*5gv`#1rtqyx1H1!rj=Z74mN0=z;d!*A-r*Ydr zdwg>o=kFrl_ye|`R8Ct*`Jy`FOS!o#a|&o6zhthDhwS8>uhRcD)BaBUeg z>{;yz7O8bgdGlLqKE*TToScevClB)T1?M$iCz2gLj{h#6GdQr?l3xNL!PASA>t&`t z;p?S3vfY7W7aT#_~Hf6@LyXtDQe zku??Tl4`p1nCL6Qse#~@GUpb;XT~E(23Drt8C;ql48Q67sN{VsK(<30#9lc*XMSs@ zZ0DIK21?{tGeyAm$i2Nz!6Z4)JC==FO`qCQVBzlcWudqE+eG}|9+F)e##G0NzP)@Q zEoue_3)B8gt6fb-5=g*`{aqfEZF3!S|TzK2^Jl zdjKoHHr-LKX6XHAI^w<>A6@7jdKUlp2$fm72(Oq|%Dn&b>fF0RVx4-P>L*FKwLLE| zP@(OIKPiVC{Pj8GEaKyjM~#Cp)QN&FubVT?>)tAPoh*5QNY+Cb0%B(LYAg2{{g);A zt9)H-T+Rm7FI7fb3ggeSr`wtAoQd_&6_Zf?z1$`oMYQMq zvRd}^FkADHeSgo~{uVo}hp|%NQ!|KKkOc{uToh~%@$+b>i#cH0egika z6sz3P7ABgvl10vi_L>gxB=syJEG8*TEN&6uPmHa#&>xvGoKJl_COMu;9LQ8h$HPLS zC@voBu=dJEH9PP{t&+4E_Vg{(OLsacx! z34RL<+R(S(bU#mZ=uA>tvH&-Xc4s0q^t#<3yhCZ{oq$f<-e*EU4 zbWd!*yWZQd+P~ZxpWNB0zOFtp@RIJ&mGC)S-I6nTqT%Gby5d_G>Y@}d2yc%H*v@iH z%2fDdkNL`kLkIhufqZtnQNk*$qK(h;IXT9;uk8KU_I-4;s-I7IUJ5YJKK*P9446aC zE$7EyCd?ow9EI6(xz3CKIugvNB7OK?EWsIv;ldXTo0Hq)umkBa#e5RXO$lvz$Gm%O zC)B9#@q~<%G5q}b{$YREM|lYFSBmOs+oP{`+j2s@95P0v6`nNn*XfRMGn`(bP-$%s zQn|0YRXxbEh+nKK(G0c?;(vP8+M~wXls>6BOpO}W%R{JOkZ<>V=WHbMm=ep0j}K*X z5|C10#y;~^s3T6zZynHi-f|ikB>sLg0zFu$oID&rZZL1o8KI&iWsWyhE}5#<*o#BFZ3dxV-9u@W2Eg-gEl29XZ=?z`9e0ybvL(bO(}-#(=UzO?uwT{ z<;mmw<#{!h&}RSpknz;ksylG_BlaS%HPB@Fv899Ia}kZ`FenHvHI9M%-DZ@sPT^fi zw>`wxaoWqY`h|JnT=rm?tw&8At>uE;F{r>LSG{RZo$8(Pm4_b=1Zb)SrynS&*rp<( zo-~b7O&L!^-v#&>WC8gg*@*i!7;zcxuo7et#v?>&1m9Z|d^vS!8=tlH+w<^lt+^Fk zfa@9>TA{jCr>|TR(LF22f+(zWa}16Vb9m-)%&=|5+i;mxs@^U3KMEV7yt1Rhh$`?P zQJ;kPyl<;c^HsmLz1tO&*p)$Ws0Gngxnou=(@OP$ZBxYGoq>s$%_AvVFJ~Bk^s%Ip z{L~6H%}*8)&X)Isn_|nobz&FL*yAfQRg?G& z+aRx_vxNc9yoXB{ZJnDmAe7-hvgq(zddR#@fnm|$O zr*`X~t-FC<4Z20BPf(WcVSS&@+AFRnQ^9Up6`jM@G=&C#m+FF$SIvYc(oM@pE>oY- ze@Y(B+6$Q;GoyLZ+tn+5cF{= zqNYL=Yz!B>sn?hVp`4g{;V(VFuE0aFpXCuSmGNpe8FZ5>>zGX1q%uVNgWaU#jf^^~{#b``P%7jkT>cRIsWxZoYbk-qtQ!P&6niA7H__~X3> z_H~JO<1j2CrCQx$%HP$TWJ--}yUi6R)+Ouji7+AaIA>;-SuyaeJ6YVKsKWolSW%<- zwg_~0F_6p}rYtU*5$olSi*Zl50c5VWbBzQoYsNQICQkxBg?!xel@{=XPi;WSay9AglCuzah4J%0 z0`xPMT-*AU9s0+4`D!dKT|x&TJcGGfGv-w6Xj$x}9V7mpL;?E1M>TsdH29xFH8L^; zLDx>5DIqBfR9%@A`xy%pFe;k0XYuWOnt(hQIpe~b(3iS+WK!t{)9^mVm0GYNzn2ko zlyzZpK9)0v>!JDl!LsO#JqZ)aJmCD`3l*Oq(A`{c{JpI*&DjvoJ+(M!d8W}c{w(g+)Aun2a& z{?oBaWk7rBaI2hR^3ua|+gVNWAJ%)PRYUj2W&C`5 z;ZgZXgm=sc@6?+H0CK=z9heVZ3*p`OBp8MGVHnJ}b94w3~ z56outii`ARO@liLCk#v zQIN@3SfC&YXPCguApDCZ+JjC~$;};kv~aU1S7V)jcZ~O?AT3VF%8{29o_`k# z=dxFcpX(WnGJa$Vb|5Vz@D&&MfSU1|`jsVnP+mWPb{0z+aYsM#vmqEg8o8 zs1_70b+RF&eCjJ&Qok78NQDCrIs&OnucxL|H;x35&Ty*osad)5pIPZSBRIlzIgflM zxw`|Qj7|6VFtQ2)Z}Io#?Wb^a@rEkAhaUWF)8@jAMbhT8gMG~Yp)2Qw3* z)@moz26#4}!F|yOoN%;kWV!4c`${E&M*KDaI(*<&4Xl(8b8D%Vw}eM_h{CP zs@_g%zxVfxfa-<$tI(LD(mwXuKP-*9$Kt95m=ft14N;-ZdK1nP7w~@l{w=6F01XOu zj@GRAsB;$+rV82>GXnmjt=i&t3DxuM-R8Fe1_9r6Z1_H;mDlIvN$F0+Gg#fNc2H0Q z%d+$uu`J2>7!6iy0j@6p^dgpWT?X^-yK*;s#bXYZJrDhjIoA$ znduj>Em&Bvc+t>4@s&c#*3N2gTyl7=AFaD;RsRb{l3r)u+QIt?7wzo+IaB(zU$c41 zYAeTUVrvL$noS;g&06i^(qr~oj0LhPGEs;dmrzjvDMdRkLUF& zNhx+%K48Q}zaIO3r<$%lx$m0b0*bXmcr;WZr2?#B=fdW%Uk-H!1Ltk`>;|754BvQt zqLcrRaSW%7OIi^c4H>@iNno3Ou)BQR6!-b0NFRnV`K;Q!Er1oaPuEbLJogRKZN3Zc zzkJ$eIbM`X16tdl4gtC1N>K72h+8@7sy+F1kO4u!+8q(mDJWlX?+sj_S&M-ct=o#O z>^hPIvdN3?I?d(0ewwu_m|$00XW7F+#P?WW!+`t`Zx6^P99za5>biut z6*+-eCs~77xKVXHRnxo5{}WPKG+yJ`kMXxSx~89P{f1GyHFdjfUnctx9q85SB}a>(AZDfb}f#c@)npwQ7%N{A2tT&Kf5dQ<}M3_@x5G#SxE$uXvjTJ{V%qFuDX6ZJ_aK}96KMA2;! z@K4YL8K@38ABO*SPoA!lfg7?U7Yj^1Y64jZ!#=xJKjPtad*DW%!WqCxvudDd*VE*i zq19YtPWm{Q0i0D!+Fu>nJ}o0lK)9>ZeAlnd4Rn|ZuOl6q5;GkJUe-I(`_lX(41(#4x zawBG6&3eP+L71a5#I9<$!QH-(Nq=(=n{D$tpZV9NU3rgVH8w~;8?ke~){JeiJmwB} z(H9pN&$c*#Z8Z_+^J#1cpK1K$$teHFMhURXQQNLcfbIjy`}mezX(RQEt)yJ>m*`Ix z zgoAEF2nXTdPpOjNOP$stmwMTXr!_Nb%n7ns0}j08De2L}bah(?)hC6A|6xR;Y?>+M(O&X!*dSUGg~=h&E$Nc84K#u>M+ zy2E_i8a91c8D!LMuWq)WL;WY6hjvCxRV(Qq`^+CG8?WUdF2p9$Yh<=o@%?;evdduZ zR&~Li^$ml8-(dPRg0ZNmpI5{)5~hC!sB8Bk{1Wa-7}{W2Mr{bM`Vd zSV`bt4Vg|v9u~VYft=}D{8Yj3e|&?}78^293K+Y6_1)t%zKTh;Tg=F#>S3+lWP>mu z{j}W8G>Zmqb^Z^xzT~>r9NHrM!s3maH4sD=B#=!eQvA9xe`MBxn7kGbttyfZF$hFc z^^~-FEQ{kjeyh*F4_Da|*Ch7E5`6xw+1=;@`%UvdP{HWwfu{2D(ILNenF_(D*PyF^ zj5CtsX*=ty|LOA20JH+p798FUsX*%C81- zul60orziCJe{PtvG>gW}oaa6*r_@6*b^5BnyLi`oPmj1wL+@G0&AjkKeO~;4Tfdcn zDf5tGY;`;Hfr7J&T;SapYLz2(xoi zeA5uvB6S?%T@4!Vf_LSF*sjo1P!iU0SG_q(KV$E+IGukI@dHXdF@@*By=JkbKy_lV z#RGt4{l=C4fw>Z*R^N127sT@opBSIgRoY2IQnzWq_1r{65w{v&=vy=!a2OE8Sc zru{hg13AMDx-SttEro~@gel>_>tVh*Nk>>#wdxvAqnI5i{6u3mfPoHdafdbVPr?h) zg_bMrLW8vB#a=aRleT&zD{p;awF(k~5*$Gh8R$tRRTOY(uy+z`BrgOZrm+F?XYg{M9RB$QV!Gf5iODFb<-E=%A zcfZ;nIlIu@&3da_@x5BR^kNd};iN9dL)311e1jc_gg6C8tuu<7SQOLpQDRe4lgm2?N} zh73k_s3zBro=Ly)VH?_8ZF3=2d- z0*|N9L!x%)ImL$5uILFUi@@HnFzhUVTTVPGbV|BoTAySq@Qldnwa%h!C&*{Idscfz zAFI(VZowH@_hex!!Lu^yw$mTqnyhB|);d$(FpogQZyl6E0dG7lJ@sjeND}SUO@>d= z40M@AL62&HEV-+YaX)m1j2k;@J;aOlpA_6t@5Rmt2hA^_5PQt zZ53YNTmH9BpO&hPeWIp_7#v^zDwAGTJ6L;a!iq8tj|;m6tU5HHH-aledT#(?ta)5b?mn5KBQs+!D11O8qO*n!Vc!X97=zT zGW+t$GwTwJtm9Xq6f1x%9YI~zX@%gu-0ojIg0Y4;2AZ`&Ht!A}aVew@D{#5*{Hx8I zkmJrw7(hist5u-pW6zjU4`@Rsa$CG)k1GD*Mehs_)Wz;Db24vJ+@DS%X@B#?9S@t* zdD{VJ24#;L9fWs;-yTC4It!@}bWk^}3v9K14`M2SwjB zK+n4urwmDKx68|Xt6dcdRS)4LqP+)SkDon4D#etS5kCRRPf0=++b>C0m|v-?o4Ugp z&;h}-uz5m!OzCsI%aIj0@sBThr*os68&^MIi~qt@b+Sqg{~v9*TQ|9YR(#}9$S-k?Mxs3pWDIN$B6}$5{l`EJy;BCpq~_6dZ6#9Uf1XwO3}Oe#d#IsP z&Wxv+`T$Rl)3skzj|7%rL({uH?b=jPIjDlw1D28zw6s*?$l^Y3Hb#@Bvy~qQ9LUy) zSv$4EQ8*pSn5Y>Ev1<)mcqK@ZLw?-08cB1vM$c{`bu50SeMh4cq_6?}QXDWajB`bUM}<+$qMo`dxn62eSaFi9M+5PI>yu3CDtz55_k5gIPWqYZgWtUu4nfnqiyXMa$~4QEom9b(}& z_q)tzrsFPh2{%!Re`_{^Ufh3-FI4jYGMH2mtn^R9AnkTOW_ebwhd9Krch$-4aM z%JCi9pltIZ57$}??)zYEnFPjx(`$aU80U;=uGbTp9zx)!JuhdHLa+TO;}tMzxy@NBgF@@$!^ zy~uui$N2&uI{rr-?MtXK4e-Dbd2 zrN+C;m%s%@KjjOnAK8Uo9ym{)R!b5CKLW8Qor^!*l(;Ajg%d%xREG;itOArS0cE0| zDsq!6vg)csW4_z`>uQDayzkRCnJ-xGl?j31Qw-lY(!b~0S^VJRy)xS8RZk=xz)KH9 z3=lcK-kC;geWdPNCIK7gUNqxn15t=@dC%RxPf$chJ{nLT@XfG`Pk@;0?WAJgqn(u} z1E>D;G?qNmYDm5tB{hXH#C(H}SAe)tA4=&1Y)jcukCx`_8Fl7~>EKNhg^%It1#FI` zJGQ=%q~+ICUs$j#(j)xH*E|V`K|zDN7orhL$3twkrgTDY8#8QSa>Fz51Iw*^Y8@*cfW*a&{UE$)nJk`RQl&-fTz>}Y{toe}M><$bU zDLx-b@vHS4`kwGmsUo32bF|cY{r+95?3q zvm6B{_2*&9TeLChHBVH7Lc!Ahfz5aU3U;JT51haL`0?%)S>z|<`|%KbFogF;DZ=uq z&Jl)NAIR&gCya^T{~uA4`n76@?aD}dqv-k2bRqQ#yk?Pi?rslxmqyLUp)vWzn3*-F z3Z&4K_bCbe#O6qSUKWtKBClrETq^|7()CZLZu|)Sab(Mn5VIdmLi2VpWQPBeXC@hX zRq_pCUZ1u904i!MiSqj0o^WuHr)Jh3DOCHKiAmeVuN+P~i$T3khxIWhyF0^|ljy~! zIXJGM0visUy2bMz5PzW`GpAXrPNH*$`u=%W{So(MJ9oW}I?+Utk8Ch$(hDtohj?51CoN(AtMto3LseLwe2`S8Br@Wt!lz~KxOHZV9OT`k@vN6?F~6M zc}L70G!z|B^$4b}k(9|Zex39}&F{xwZL2xIobmZ#cQ4Uz{6Lyj*ex^RlXSaeB|%4k z4%A4xXAmCnrmxo9n$g3=gKr;2#nP^OGVeK`S9O~#SAa?Juq?86*d>2JyIwNPsBY{x z?sG@y^FIBI{{KWvaEd#)@xivL$5YO$0Y5@}OL1=n{Nz>r31&iq2ZAwGVa=NH~nO=Cd4BZl)!mdVqa;$jUPJGZ@r zH9b*@vhOGR>d?Q~KDShRV1D}^xzYmR+pOHBTbfC9b4Qb}C(P)FQtIPRF7|~EqiB=8 zoYe&BMs}$V=6F&4f__tJfM$`9@V>(c;0#DUg=q%#es2&QCvrTNx=kDEwiF$8XUeNf zP7h)-HG1LxPj{$^{|eY^8}=vZHD`^-JQ5C^p+hJkfv|7?HTAN5R~=TCEt~cY$P3!O zQ$8R%V0@Q9fp4D*hcL$p?AOy}WmDvtw?$xq$mDw+vM=HK^djeEWeNL7%Vqz<3ybCYtLwLlGB>y#~;{7wjMRze(#wSk|D* zpP-l~$jp=fNhQtWKSLp6!N!e`^6l`xi1V^t^8=0i2|Y(%*+o^N^0}MtmgUsf=}}2q6{dKPJ}# ze*VgG)%(J1QYF9{ey95Q(p?g%ZFe529_HoEmU-L59LK<#@1(Y+L~g`Aw(;4C!)8v1 zHX2?&mMBnjVtyJV1^?9nhJPlj3toiHj~GAMW~!Sk)QHEOgH8VS5PspHS7YV`|1gBg zO|RTYGjHqQJ6GE`*{98>{n6sPB*viDBlkAuKMvu_OV8E$&%_Tcz9oEZ$&TdhODAXf4i_Z zoNtcszDUq4W#IubbXJ578c@-cWs*tXSg=f}AHrg+F0+Wlf%tPI|cWHydmQ)S?^ zW#x4e%_@0rBf&%`8TWIo#xp)(+4FeO)M=nDleKSALo$c+^;9^w-0;#Gwods}mY6;` z1+uYr2v2&keXP^P#*?IWo@mwNfB(fj`ps^&UTV6vjrxx{`-(zY+VaPm>csOwjp-dj z8h<|J8@A+rG9OVkILOY~U(g@f@u*X>V>!dpe>i+nTKo`cu)~F<)m^I<^!DDew)bkl z$bUqs9zfr0L&{9m3OBuoS#mVEer)=IHaDTk2WzcQnH8i8J0MG^jokge5!er>-K_Td z^~N(kS4S9M2e4NX?MW|TSPnP%Ux(Rzd3BaRs~50)YYzgfF>}$>MMXxp^qe<9l*=&% ztdH_(Gao-a?t1_uoIR`2IU^Wr-t7V6`O63UuM_102})_~`q};8|M5@sP6zE{>uCNd zNgY-%J8pOcfrQ3ezmdU5WiD;D#R4E*PmsDEDtev9&iuln+vdjfX@N+I$ZKYsy&yj@j4;pK~IK2OW#RUYY9YavE5SXqMul z?_+(bVW=tL(!jVXF<{}QGVW{$kk!Jty{rX9g=@mgBuS`D8-?7;vP>=A`|Vn3{ts5rh{>qfUPWuk1Kuf@1NfyN44 z(%uWE4_5aZzsn9Kd}K>Looz!wvf9a^-0NwhS+BiqSAS``Z=w7a=S0q6e*}aUEBIpS zu(g11kI<{Ek4+K?IP1J5@+uO@pdX8xa=yz7U(e5)WHa1&P_{o6*S|_-))iK7UuiLB zkoSQ@`_uU3QP$yIQVlc0tdmlMb+PKw1f6AcFRSzQAd%XkX``uy)ppT6#Rb0{@$?a<<@Pe;dFJ*Sg@0^$va%68ki@^I@QRseGQ9>xX2PO!DTsnh+$*4ww*?Js}>e zBPk!pZo~dnDG{M^S zEoX_E59nvtexeh*ykkj^j?mboql7$%Rg#*2z4A!Pqt4)D(JL>SKkwlM^y=Vjv-DK< zosF-ge-u50iJF`>qTQA>TEJdTC@;OxPVbxNhlun3HOU=(?3Tq8RT4#1&j3e zp_=>u05$6Z?_oqp569i)N)xxP=Tpc(H0mhz;#OBHJEYFlPEOiY+ofNhVzmFTvIAYj zh?6d{-H|)b`v=lyb(xkocjuE2GaMxcQ@F+@7Ngb9--&$R2BVp=(U$bc)C$G#GC!6E zS+&IauUj0^mb`>0<&1bG1(N%s`*0USfz6x1ZeM#FH$I zx=Fv7ZW1uLJoCmSkXu$zov?miS46@BaVA_d|6=p%P!C`EvBO#P7550M*1oP4;m?nL z+8I`_@XT#}UQQb1e|TZZvp?UEvN&g(=?0Rmu2METYOa$}0d9P}mh`mN(kf?Y(wEs=I$&m6dx+J0+V_AMre~Co3o%wlI4@9w- zs)rU6RVW|n2GI_G=J@sQ_zPY`_K?@B>FDJ6@z)(vrG!Y&+;?C05lX5*!4n?+Zd*MV zAQSydib+IfXxe>hfv&@5Pw~ia6tl$|D@k2QU;9%y({#V5NH1wb;=LL+2#X5+4X?=U z9%pODbuP@!Jx*TiQ^uVZ>4G-R%gqsNzP_8_7u}$<&Vydn2-@Ba4fUkzxDO^Y<6C;s z96axey(SL|<+@>pADH>uN^=$7bYd-?nB-pCF`ac0XJ%w*{yE0PcMXbY$6Y#eb)>WV z1%f>;;!#|o6z3iF6$~5pO%S^ChnVWaC#+xZDuHsZFgJVg==u26;%KI*8RYq$%pG3* z{R->lW)*#cIW?3APkFb!D?oIH7wp3f?W)t%J9eZS>Ma`D=|qn<@W@t~E5A%{!-wx;>n(##`e*zPfT4O_J%!ZE_@(H%Iq zeNGw2>5=O{O%?!+b3Y6U1hHqo(o|V zMvO-M#FhY&!k#r(-%>lGt814vC4g1%zI=jg=TWG`ecgM-<_>ssAKahckma9aw({7! zo@~1mofKqJj_u;DbO3YN8sj%3Ly0Nft9HGiX#GgF-OdPB~PXa|y-I77+_1)Nu z9rwo=aN@M0nzYxlegXGJS3fwz6Hv{6IoCO=iq_0Ac$we18~?y0jbLhRtzxR;n{Tb2 zy-?i&Q@dFCD59xVePcAE(@|5)svTW_O+G)CtKScn^L5&-`Q6LaoQ86h#;hGX7B7Xo0 z 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

_fD{wAi*-mY;X! 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 XXdMQ=MX#TN+JLH}mO_o(gV6s6-?F6R literal 0 HcmV?d00001 From 2a09557ec06ef859b930acfaa04328993f15fbc2 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Fri, 28 Apr 2023 20:39:12 +0530 Subject: [PATCH 03/19] zshrc updated --- airootfs/etc/skel/.zshrc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index 2f38d0e..a2158a8 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -11,11 +11,6 @@ source ~/powerlevel10k/powerlevel10k.zsh-theme # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh -# If not running interactively, don't do anything -[[ $- != *i* ]] && return - -alias ls='ls --color=auto' -PS1='[\u@\h \W]\$ ' #Display ISO version and distribution information in short alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" From 47b025535f7af17879d7700a700f250e317db9ad Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Sat, 29 Apr 2023 00:49:25 +0530 Subject: [PATCH 04/19] making powerlevel10k more stable --- airootfs/root/.p10k.zsh | 1764 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 1764 insertions(+) create mode 100644 airootfs/root/.p10k.zsh diff --git a/airootfs/root/.p10k.zsh b/airootfs/root/.p10k.zsh new file mode 100644 index 0000000..9cc2ac1 --- /dev/null +++ b/airootfs/root/.p10k.zsh @@ -0,0 +1,1764 @@ +# Generated by Powerlevel10k configuration wizard on 2023-04-23 at 21:04 IST. +# Based on romkatv/powerlevel10k/config/p10k-rainbow.zsh, checksum 24603. +# Wizard options: nerdfont-complete + powerline, small icons, rainbow, unicode, +# 12h time, angled separators, sharp heads, sharp tails, 2 lines, dotted, full frame, +# darkest-ornaments, sparse, many icons, fluent, instant_prompt=quiet. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with powerline prompt style with colorful background. +# Type `p10k configure` to generate your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + # prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + background_jobs # presence of background jobs + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + lf # lf shell (https://github.com/gokcehan/lf) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + vi_mode # vi mode (you don't need this if you've enabled prompt_char) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + # cpu_arch # CPU architecture + time # current time + # =========================[ Line #2 ]========================= + newline + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=none + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. You'll probably want to use the same color + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%238F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%238F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%238F╰─' + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%238F─╮' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%238F─┤' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%238F─╯' + + # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or + # '─'. The last two make it easier to see the alignment between left and right prompt and to + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false + # for more compact prompt if using this option. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE + # ornaments defined above. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=238 + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + # Separator between same-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1' + # Separator between same-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3' + # Separator between different-color segments on the left. + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' + # Separator between different-color segments on the right. + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' + # The right end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # The left end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' + # Left prompt terminator for lines without any segments. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=232 + typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Transparent background. + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # No surrounding whitespace. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= + + ##################################[ dir: current directory ]################################## + # Current directory background color. + typeset -g POWERLEVEL9K_DIR_BACKGROUND=4 + # Default current directory foreground color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=254 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=255 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='in ' + + #####################################[ vcs: git status ]###################################### + # Version control background colors. + typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2 + typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3 + typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8 + + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + # Styling for different parts of Git status. + local meta='%7F' # white foreground + local clean='%0F' # black foreground + local modified='%0F' # black foreground + local untracked='%0F' # black foreground + local conflicted='%1F' # red foreground + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_VCS_PREFIX='on ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg repository. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=true + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0 + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0 + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=true + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 + + ###################[ command_execution_time: duration of the last command ]################### + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3 + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6 + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0 + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false + # Custom icon. + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 + typeset -g POWERLEVEL9K_DIRENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override these parameters for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND and + # POWERLEVEL9K_ASDF_${TOOL}_BACKGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_BACKGROUND=7 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUBY_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PYTHON_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_GOLANG_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_NODEJS_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_RUST_BACKGROUND=208 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_FLUTTER_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_LUA_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=1 + typeset -g POWERLEVEL9K_ASDF_JAVA_BACKGROUND=7 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PERL_BACKGROUND=4 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ERLANG_BACKGROUND=1 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_ELIXIR_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_POSTGRES_BACKGROUND=6 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_PHP_BACKGROUND=5 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_HASKELL_BACKGROUND=3 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ASDF_JULIA_BACKGROUND=2 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7 + typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 + typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=0 + typeset -g POWERLEVEL9K_NNN_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### + # lf shell color. + typeset -g POWERLEVEL9K_LF_FOREGROUND=0 + typeset -g POWERLEVEL9K_LF_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=0 + typeset -g POWERLEVEL9K_XPLR_BACKGROUND=6 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIM_SHELL_BACKGROUND=2 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0 + typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4 + + # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. + # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=3 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=7 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=1 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### + # Foreground color. + typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0 + # Text and color for normal (a.k.a. command) vi mode. + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2 + # Text and color for visual vi mode. + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3 + # Text and color for insert vi mode. + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8 + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RAM_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=0 + typeset -g POWERLEVEL9K_SWAP_BACKGROUND=3 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0 + typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=0 + typeset -g POWERLEVEL9K_TODO_BACKGROUND=8 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=255 + typeset -g POWERLEVEL9K_TIMEWARRIOR_BACKGROUND=8 + + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=0 + typeset -g POWERLEVEL9K_TASKWARRIOR_BACKGROUND=6 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ cpu_arch: CPU architecture ]################################ + # CPU architecture color. + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=0 + typeset -g POWERLEVEL9K_CPU_ARCH_BACKGROUND=3 + + # Hide the segment when on a specific CPU architecture. + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 + typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_BACKGROUND=0 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3 + typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0 + + # Context format when running with privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0 + typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_GOENV_BACKGROUND=4 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_NVM_BACKGROUND=5 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255 + typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7 + typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHP_VERSION_BACKGROUND=5 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_LARAVEL_VERSION_BACKGROUND=7 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=1 + typeset -g POWERLEVEL9K_JAVA_VERSION_BACKGROUND=7 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=0 + typeset -g POWERLEVEL9K_PACKAGE_BACKGROUND=6 + + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_RVM_BACKGROUND=240 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=0 + typeset -g POWERLEVEL9K_FVM_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_LUAENV_BACKGROUND=4 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=1 + typeset -g POWERLEVEL9K_JENV_BACKGROUND=7 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PLENV_BACKGROUND=4 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ + # Perlbrew color. + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 + # Show perlbrew version only when in a perl project subdirectory. + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true + # Don't show "perl-" at the front. + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_PHPENV_BACKGROUND=5 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide PHP version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=0 + typeset -g POWERLEVEL9K_SCALAENV_BACKGROUND=1 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=0 + typeset -g POWERLEVEL9K_HASKELL_STACK_BACKGROUND=3 + + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_BACKGROUND=0 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ terraform_version: It shows active terraform version (https://www.terraform.io) ]################# + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_SHOW_ON_COMMAND='terraform|tf' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at ' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_AWS_DEFAULT_BACKGROUND=1 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 + typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=7 + typeset -g POWERLEVEL9K_AZURE_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=7 + typeset -g POWERLEVEL9K_GCLOUD_BACKGROUND=4 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=7 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_BACKGROUND=4 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=0 + typeset -g POWERLEVEL9K_TOOLBOX_BACKGROUND=3 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='in ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7 + typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0 + typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_BACKGROUND=4 + typeset -g POWERLEVEL9K_IP_FOREGROUND=0 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+⇡$P9K_IP_TX_RATE }$P9K_IP_IP' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4 + typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0 + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=0 + typeset -g POWERLEVEL9K_WIFI_BACKGROUND=4 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(0 0 0 0 0) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=0 + typeset -g POWERLEVEL9K_TIME_BACKGROUND=7 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%I:%M:%S %p}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + typeset -g POWERLEVEL9K_TIME_PREFIX='at ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background + # greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=3 + typeset -g POWERLEVEL9K_EXAMPLE_BACKGROUND=1 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' From c451128c3f3a9d7ae116546b3200cb7f3119a502 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Sat, 29 Apr 2023 01:04:13 +0530 Subject: [PATCH 05/19] making powerlevel10k more stable --- airootfs/etc/skel/.bashrc | 25 + airootfs/etc/skel/.zshrc | 8 +- airootfs/etc/skel/powerlevel10k/README.md | 2020 ---- .../powerlevel10k/config/p10k-classic.zsh | 1667 --- .../config/p10k-lean-8colors.zsh | 1648 --- .../skel/powerlevel10k/config/p10k-lean.zsh | 1644 --- .../skel/powerlevel10k/config/p10k-pure.zsh | 193 - .../powerlevel10k/config/p10k-rainbow.zsh | 1757 ---- .../config/p10k-robbyrussell.zsh | 111 - .../skel/powerlevel10k/internal/configure.zsh | 85 - .../etc/skel/powerlevel10k/internal/icons.zsh | 1029 -- .../etc/skel/powerlevel10k/internal/notes.md | 197 - .../etc/skel/powerlevel10k/internal/p10k.zsh | 9334 ----------------- .../skel/powerlevel10k/internal/parser.zsh | 382 - .../skel/powerlevel10k/internal/wizard.zsh | 2205 ---- .../skel/powerlevel10k/internal/worker.zsh | 219 - .../powerlevel10k/powerlevel10k.zsh-theme | 83 - .../skel/powerlevel10k/powerlevel9k.zsh-theme | 1 - airootfs/root/.zshrc | 11 +- 19 files changed, 38 insertions(+), 22581 deletions(-) create mode 100644 airootfs/etc/skel/.bashrc delete mode 100644 airootfs/etc/skel/powerlevel10k/README.md delete mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/internal/configure.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/internal/icons.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/internal/notes.md delete mode 100644 airootfs/etc/skel/powerlevel10k/internal/p10k.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/internal/parser.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/internal/wizard.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/internal/worker.zsh delete mode 100644 airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme delete mode 100644 airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme diff --git a/airootfs/etc/skel/.bashrc b/airootfs/etc/skel/.bashrc new file mode 100644 index 0000000..f9619bd --- /dev/null +++ b/airootfs/etc/skel/.bashrc @@ -0,0 +1,25 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +alias ls='ls --color=auto' +PS1='[\u@\h \W]\$ ' + +#Display ISO version and distribution information in short +alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" + +#Pacman Shortcuts +alias sync="sudo pacman -Syyy" +alias install="sudo pacman -S" +alias update="sudo pacman -Syyu" +alias search="sudo pacman -Ss" +alias search-local="sudo pacman -Qs" +alias pkg-info="sudo pacman -Qi" +alias local-install="sudo pacman -U" +alias clr-cache="sudo pacman -Scc" +alias unlock="sudo rm /var/lib/pacman/db.lck" +alias remove="sudo pacman -R" +alias autoremove="sudo pacman -Rns" diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index a2158a8..f3edc6e 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -6,11 +6,17 @@ if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]] source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" fi -source ~/powerlevel10k/powerlevel10k.zsh-theme +source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh +# Autosuggestions +source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh + +# fast-synatx-highlighting +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh + #Display ISO version and distribution information in short alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" diff --git a/airootfs/etc/skel/powerlevel10k/README.md b/airootfs/etc/skel/powerlevel10k/README.md deleted file mode 100644 index 6629e91..0000000 --- a/airootfs/etc/skel/powerlevel10k/README.md +++ /dev/null @@ -1,2020 +0,0 @@ -# Powerlevel10k -[![Gitter](https://badges.gitter.im/powerlevel10k/community.svg)]( - https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) - -Powerlevel10k is a theme for Zsh. It emphasizes [speed](#uncompromising-performance), -[flexibility](#extremely-customizable) and [out-of-the-box experience](#configuration-wizard). - -![Powerlevel10k]( -https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-styles-high-contrast.png) - -- [Getting started](#getting-started) -- [Features](#features) -- [Installation](#installation) -- [Configuration](#configuration) -- [Fonts](#fonts) -- [Try it in Docker](#try-it-in-docker) -- [License](#license) -- [FAQ](#faq) -- [Troubleshooting](#troubleshooting) - -## Getting started - -1. [Install the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). *Optional but highly - recommended.* -1. [Install Powerlevel10k](#installation) itself. -1. Restart Zsh with `exec zsh`. -1. Type `p10k configure` if the configuration wizard doesn't start automatically. - -## Features - -- [Configuration wizard](#configuration-wizard) -- [Uncompromising performance](#uncompromising-performance) -- [Powerlevel9k compatibility](#powerlevel9k-compatibility) -- [Pure compatibility](#pure-compatibility) -- [Instant prompt](#instant-prompt) -- [Show on command](#show-on-command) -- [Transient prompt](#transient-prompt) -- [Current directory that just works](#current-directory-that-just-works) -- [Extremely customizable](#extremely-customizable) -- [Batteries included](#batteries-included) -- [Extensible](#extensible) - -### Configuration wizard - -Type `p10k configure` to access the builtin configuration wizard right from your terminal. - -

- Screen recording - - ![Powerlevel10k Configuration Wizard]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/configuration-wizard.gif) -
- -All styles except [Pure](#pure-compatibility) are functionally equivalent. They display the same -information and differ only in presentation. - -Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt -customization can be done by editing this file. It has plenty of comments to help you navigate -through configuration options. - -*Tip*: Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) before -running `p10k configure` to unlock all prompt styles. - -*FAQ:* - -- [What is the best prompt style in the configuration wizard?]( - #what-is-the-best-prompt-style-in-the-configuration-wizard) -- [What do different symbols in Git status mean?]( - #what-do-different-symbols-in-git-status-mean) -- [How do I change prompt colors?](#how-do-i-change-prompt-colors) - -*Troubleshooting*: - -- [Some prompt styles are missing from the configuration wizard]( - #some-prompt-styles-are-missing-from-the-configuration-wizard). -- [Question mark in prompt](#question-mark-in-prompt). -- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render). -- [Sub-pixel imperfections around powerline symbols]( - #sub-pixel-imperfections-around-powerline-symbols). -- [Directory is difficult to see in prompt when using Rainbow style]( - #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style). - -### Uncompromising performance - -When you hit *ENTER*, the next prompt appears instantly. With Powerlevel10k there is no prompt lag. -If you install Cygwin on Raspberry Pi, `cd` into a Linux Git repository and activate enough prompt -segments to fill four prompt lines on both sides of the screen... wait, that's just crazy and no -one ever does that. Probably impossible, too. The point is, Powerlevel10k prompt is always fast, no -matter what you do! - -
- Screen recording - - ![Powerlevel10k Performance]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/performance.gif) -
- -Note how the effect of every command is instantly reflected by the very next prompt. - -| Command | Prompt Indicator | Meaning | -|-------------------------------|:----------------:|----------------------------------------------------------------------:| -| `timew start hack linux` | `⌚ hack linux` | time tracking enabled in [timewarrior](https://timewarrior.net/) | -| `touch x y` | `?2` | 2 untracked files in the Git repo | -| `rm COPYING` | `!1` | 1 unstaged change in the Git repo | -| `echo 3.7.3 >.python-version` | `🐍 3.7.3` | the current python version in [pyenv](https://github.com/pyenv/pyenv) | - -Other Zsh themes capable of displaying the same information either produce prompt lag or print -prompt that doesn't reflect the current state of the system and then refresh it later. With -Powerlevel10k you get fast prompt *and* up-to-date information. - -*FAQ*: [Is it really fast?](#is-it-really-fast) - -### Powerlevel9k compatibility - -Powerlevel10k understands all [Powerlevel9k](https://github.com/Powerlevel9k/powerlevel9k) -configuration parameters. - -
- Screen recording - - ![Powerlevel10k Compatibility with 9k]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/9k-compatibility.gif) -
- -[Migration](#installation) from Powerlevel9k to Powerlevel10k is a straightforward process. All -your `POWERLEVEL9K` configuration parameters will still work. Prompt will look the same as before -([almost]( - #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config)) -but it will be [much faster](#uncompromising-performance) ([certainly](#is-it-really-fast)). - -*FAQ*: - -- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?]( - #im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) -- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( - #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) -- [What is the relationship between Powerlevel9k and Powerlevel10k?]( - #What-is-the-relationship-between-powerlevel9k-and-powerlevel10k) - -### Pure compatibility - -Powerlevel10k can produce the same prompt as [Pure](https://github.com/sindresorhus/pure). Type -`p10k configure` and select *Pure* style. - -
- Screen recording - - ![Powerlevel10k Pure Style]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/pure-style.gif) -
- -You can still use Powerlevel10k features such as [transient prompt](#transient-prompt) or -[instant prompt](#instant-prompt) when sporting Pure style. - -To customize prompt, edit `~/.p10k.zsh`. Powerlevel10k doesn't recognize Pure configuration -parameters, so you'll need to use `POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3` instead of -`PURE_CMD_MAX_EXEC_TIME=3`, etc. All relevant parameters are in `~/.p10k.zsh`. This file has -plenty of comments to help you navigate through it. - -*FAQ:* [What is the best prompt style in the configuration wizard?]( - #what-is-the-best-prompt-style-in-the-configuration-wizard) - -###
Instant prompt - -If your `~/.zshrc` loads many plugins, or perhaps just a few slow ones -(for example, [pyenv](https://github.com/pyenv/pyenv) or [nvm](https://github.com/nvm-sh/nvm)), you -may have noticed that it takes some time for Zsh to start. - -
- Screen recording - - ![Powerlevel10k No Instant Prompt]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/no-instant-prompt.gif) -
- -Powerlevel10k can remove Zsh startup lag **even if it's not caused by a theme**. - -
- Screen recording - - ![Powerlevel10k Instant Prompt]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/instant-prompt.gif) -
- -This feature is called *Instant Prompt*. You need to explicitly enable it through `p10k configure` -or [manually](#how-do-i-configure-instant-prompt). It does what it says on the tin -- prints prompt -instantly upon Zsh startup allowing you to start typing while plugins are still loading. - -Other themes *increase* Zsh startup lag -- some by a lot, others by a just a little. Powerlevel10k -*removes* it outright. - -If you are curious about how *Instant Prompt* works, see -[this section in zsh-bench](https://github.com/romkatv/zsh-bench#instant-prompt). - -*FAQ:* [How do I configure instant prompt?](#how-do-i-configure-instant-prompt) - -### Show on command - -The behavior of some commands depends on global environment. For example, `kubectl run ...` runs an -image on the cluster defined by the current kubernetes context. If you frequently change context -between "prod" and "testing", you might want to display the current context in Zsh prompt. If you do -likewise for AWS, Azure and Google Cloud credentials, prompt will get pretty crowded. - -Enter *Show On Command*. This feature makes prompt segments appear only when they are relevant to -the command you are currently typing. - -
- Screen recording - - ![Powerlevel10k Show On Command]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/show-on-command.gif) -
- -Configs created by `p10k configure` enable show on command for several prompt segments by default. -Here's the relevant parameter for kubernetes context: - -```zsh -# Show prompt segment "kubecontext" only when the command you are typing invokes one of these tools. -typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens' -``` - -To customize when different prompt segments are shown, open `~/.p10k.zsh`, search for -`SHOW_ON_COMMAND` and either remove these parameters to display affected segments unconditionally, -or change their values. - -### Transient prompt - -When *Transient Prompt* is enabled through `p10k configure`, Powerlevel10k will trim down every -prompt when accepting a command line. - -
- Screen recording - - ![Powerlevel10k Transient Prompt]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/transient-prompt.gif) -
- -Transient prompt makes it much easier to copy-paste series of commands from the terminal scrollback. - -*Tip*: If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of -extra space for typing commands without the usual drawback of reduced scrollback density. Sparse -prompt (with an empty line before prompt) also works great in combination with transient prompt. - -### Current directory that just works - -The current working directory is perhaps the most important prompt segment. Powerlevel10k goes to -great length to highlight its important parts and to truncate it with the least loss of information -when horizontal space gets scarce. - -
- Screen recording - - ![Powerlevel10k Directory Truncation]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/directory-truncation.gif) -
- -When the full directory doesn't fit, the leftmost segment gets truncated to its shortest unique -prefix. In the screencast, `~/work` becomes `~/wo`. It couldn't be truncated to `~/w` because it -would be ambiguous (there was `~/wireguard` when the session was recorded). The next segment -- -`projects` -- turns into `p` as there was nothing else that started with `p` in `~/work/`. - -Directory segments are shown in one of three colors: - -- Truncated segments are bleak. -- Important segments are bright and never truncated. These include the first and the last segment, - roots of Git repositories, etc. -- Regular segments (not truncated but can be) use in-between color. - -*Tip*: If you copy-paste a truncated directory and hit *TAB*, it'll complete to the original. - -*Troubleshooting*: [Directory is difficult to see in prompt when using Rainbow style.]( - #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) - -### Extremely customizable - -Powerlevel10k can be configured to look like any other Zsh theme out there. - -
- Screen recording - - ![Powerlevel10k Other Theme Emulation]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/other-theme-emulation.gif) -
- -[Pure](#pure-compatibility), [Powerlevel9k](#powerlevel9k-compatibility) and [robbyrussell]( - #how-to-make-powerlevel10k-look-like-robbyrussell-oh-my-zsh-theme) emulations are built-in. -To emulate the appearance of other themes, you'll need to write a suitable configuration file. The -best way to go about it is to run `p10k configure`, select the style that is the closest to your -goal and then edit `~/.p10k.zsh`. - -The full range of Powerlevel10k appearance spans from spartan: - -![Powerlevel10k Spartan Style]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/spartan-style.png) - -To ~~ridiculous~~ extravagant: - -![Powerlevel10k Extravagant Style]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/extravagant-style.png) - -### Batteries included - -Powerlevel10k comes with dozens of built-in high quality segments. When you run `p10k configure` -and choose any style except [Pure](#pure-compatibility), many of these segments get enabled by -default while others can be manually enabled by opening `~/.p10k.zsh` and uncommenting them. You can -enable as many segments as you like. It won't slow down your prompt or Zsh startup. - -| Segment | Meaning | -|--------:|---------| -| `anaconda` | virtual environment from [conda](https://conda.io/) | -| `asdf` | tool versions from [asdf](https://github.com/asdf-vm/asdf) | -| `aws` | [aws profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) | -| `aws_eb_env` | [aws elastic beanstalk](https://aws.amazon.com/elasticbeanstalk/) environment | -| `azure` | [azure](https://docs.microsoft.com/en-us/cli/azure) account name | -| `background_jobs` | presence of background jobs | -| `battery` | internal battery state and charge level (yep, batteries *literally* included) | -| `command_execution_time` | duration (wall time) of the last command | -| `context` | user@hostname | -| `cpu_arch` | CPU architecture | -| `dir` | current working directory | -| `direnv` | [direnv](https://direnv.net/) status | -| `disk_usage` | disk usage | -| `dotnet_version` | [dotnet](https://dotnet.microsoft.com) version | -| `fvm` | flutter environment from [fvm](https://github.com/leoafarias/fvm) | -| `gcloud` | [google cloud](https://cloud.google.com/) cli account and project | -| `goenv` | go environment from [goenv](https://github.com/syndbg/goenv) | -| `google_app_cred` | [google application credentials](https://cloud.google.com/docs/authentication/production) | -| `go_version` | [go](https://golang.org) version | -| `haskell_stack` | haskell version from [stack](https://haskellstack.org/) | -| `ip` | IP address and bandwidth usage for a specified network interface | -| `java_version` | [java](https://www.java.com/) version | -| `jenv` | java environment from [jenv](https://github.com/jenv/jenv) | -| `kubecontext` | current [kubernetes](https://kubernetes.io/) context | -| `laravel_version` | [laravel php framework](https://laravel.com/) version | -| `load` | CPU load | -| `luaenv` | lua environment from [luaenv](https://github.com/cehoffman/luaenv) | -| `midnight_commander` | [midnight commander](https://midnight-commander.org/) shell | -| `nix_shell` | [nix shell](https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) indicator | -| `nnn` | [nnn](https://github.com/jarun/nnn) shell | -| `lf` | [lf](https://github.com/gokcehan/lf) shell | -| `nodeenv` | node.js environment from [nodeenv](https://github.com/ekalinin/nodeenv) | -| `nodenv` | node.js environment from [nodenv](https://github.com/nodenv/nodenv) | -| `node_version` | [node.js](https://nodejs.org/) version | -| `nordvpn` | [nordvpn](https://nordvpn.com/) connection status | -| `nvm` | node.js environment from [nvm](https://github.com/nvm-sh/nvm) | -| `os_icon` | your OS logo (apple for macOS, swirl for debian, etc.) | -| `package` | `name@version` from [package.json](https://docs.npmjs.com/files/package.json) | -| `perlbrew` | perl version from [perlbrew](https://github.com/gugod/App-perlbrew) | -| `phpenv` | php environment from [phpenv](https://github.com/phpenv/phpenv) | -| `php_version` | [php](https://www.php.net/) version | -| `plenv` | perl environment from [plenv](https://github.com/tokuhirom/plenv) | -| `prompt_char` | multi-functional prompt symbol; changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual and replace mode respectively; turns red on error | -| `proxy` | system-wide http/https/ftp proxy | -| `public_ip` | public IP address | -| `pyenv` | python environment from [pyenv](https://github.com/pyenv/pyenv) | -| `ram` | free RAM | -| `ranger` | [ranger](https://github.com/ranger/ranger) shell | -| `rbenv` | ruby environment from [rbenv](https://github.com/rbenv/rbenv) | -| `rust_version` | [rustc](https://www.rust-lang.org) version | -| `rvm` | ruby environment from [rvm](https://rvm.io) | -| `scalaenv` | scala version from [scalaenv](https://github.com/scalaenv/scalaenv) | -| `status` | exit code of the last command | -| `swap` | used swap | -| `taskwarrior` | [taskwarrior](https://taskwarrior.org/) task count | -| `terraform` | [terraform](https://www.terraform.io) workspace | -| `terraform_version` | [terraform](https://www.terraform.io) version | -| `time` | current time | -| `timewarrior` | [timewarrior](https://timewarrior.net/) tracking status | -| `todo` | [todo](https://github.com/todotxt/todo.txt-cli) items | -| `toolbox` | [toolbox](https://github.com/containers/toolbox) name | -| `vcs` | Git repository status | -| `vim_shell` | [vim](https://www.vim.org/) shell (`:sh`) | -| `virtualenv` | python environment from [venv](https://docs.python.org/3/library/venv.html) | -| `vi_mode` | vi mode (you don't need this if you've enabled prompt_char) | -| `vpn_ip` | virtual private network indicator | -| `wifi` | WiFi speed | -| `xplr` | [xplr](https://github.com/sayanarijit/xplr) shell | - -### Extensible - -If there is no prompt segment that does what you need, implement your own. Powerlevel10k provides -public API for defining segments that are as fast and as flexible as built-in ones. - -
- Screen recording - - ![Powerlevel10k Custom Segment]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/custom-segment.gif) -
- -On Linux you can fetch current CPU temperature by reading `/sys/class/thermal/thermal_zone0/temp`. -The screencast shows how to define a prompt segment to display this value. Once the segment is -defined, you can use it like any other segment. All standard customization parameters will work for -it out of the box. - -Type `p10k help segment` for reference. - -*Tip*: Prefix names of your own segments with `my_` to avoid clashes with future versions of -Powerlevel10k. - -## Installation - -- [Manual](#manual) 👈 **choose this if confused or uncertain** -- [Oh My Zsh](#oh-my-zsh) -- [Prezto](#prezto) -- [Zim](#zim) -- [Antibody](#antibody) -- [Antidote](#antidote) -- [Antigen](#antigen) -- [Zplug](#zplug) -- [Zgen](#zgen) -- [Zplugin](#zplugin) -- [Zinit](#zinit) -- [Zi](#zi) -- [Zap](#zap) -- [Homebrew](#homebrew) -- [Arch Linux](#arch-linux) -- [Alpine Linux](#arch-linux) -- [Fig](#fig) - -### Manual - -```zsh -git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k -echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc -``` - -Users in China can use the official mirror on gitee.com for faster download.
-中国用户可以使用 gitee.com 上的官方镜像加速下载. - -```zsh -git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10k -echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc -``` - -This is the simplest kind of installation and it works even if you are using a plugin manager. Just -make sure to disable the current theme in your plugin manager. See -[troubleshooting](#cannot-make-powerlevel10k-work-with-my-plugin-manager) for help. - -### Oh My Zsh - -1. Clone the repository: - ```zsh - git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k - ``` - Users in China can use the official mirror on gitee.com for faster download.
- 中国用户可以使用 gitee.com 上的官方镜像加速下载. - - ```zsh - git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k - ``` -2. Set `ZSH_THEME="powerlevel10k/powerlevel10k"` in `~/.zshrc`. - -### Prezto - -Add `zstyle :prezto:module:prompt theme powerlevel10k` to `~/.zpreztorc`. - -### Zim - -Add `zmodule romkatv/powerlevel10k --use degit` to `~/.zimrc` and run `zimfw install`. - -### Antibody - -Add `antibody bundle romkatv/powerlevel10k` to `~/.zshrc`. - -### Antidote - -Add `romkatv/powerlevel10k` to `~/.zsh_plugins.txt`. - -### Antigen - -Add `antigen theme romkatv/powerlevel10k` to `~/.zshrc`. Make sure you have `antigen apply` -somewhere after it. - -### Zplug - -Add `zplug romkatv/powerlevel10k, as:theme, depth:1` to `~/.zshrc`. - -### Zgen - -Add `zgen load romkatv/powerlevel10k powerlevel10k` to `~/.zshrc`. - -### Zplugin - -Add `zplugin ice depth=1; zplugin light romkatv/powerlevel10k` to `~/.zshrc`. - -The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially -supported by Powerlevel10k. - -### Zinit - -Add `zinit ice depth=1; zinit light romkatv/powerlevel10k` to `~/.zshrc`. - -The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially -supported by Powerlevel10k. - -### Zi - -Add `zi ice depth=1; zi light romkatv/powerlevel10k` to `~/.zshrc`. - -The use of `depth=1` ice is optional. Other types of ice are neither recommended nor officially -supported by Powerlevel10k. - -### Zap - -Add `plug "romkatv/powerlevel10k"` to `~/.zshrc`. - -### Homebrew - -```zsh -brew install romkatv/powerlevel10k/powerlevel10k -echo "source $(brew --prefix)/opt/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc -``` - -### Arch Linux - -```zsh -yay -S --noconfirm zsh-theme-powerlevel10k-git -echo 'source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc -``` - -[zsh-theme-powerlevel10k-git](https://aur.archlinux.org/packages/zsh-theme-powerlevel10k-git/) -referenced above is the official Powerlevel10k package. - -There is also [zsh-theme-powerlevel10k]( - https://www.archlinux.org/packages/community/x86_64/zsh-theme-powerlevel10k/) community package. -Historically, [it has been breaking often and for extended periods of time]( - https://github.com/romkatv/powerlevel10k/pull/786). **Do not use it.** - -### Alpine Linux - -```zsh -apk add zsh zsh-theme-powerlevel10k -mkdir -p ~/.local/share/zsh/plugins -ln -s /usr/share/zsh/plugins/powerlevel10k ~/.local/share/zsh/plugins/ -``` - -### Fig - -Follow the instructions on -[this page](https://fig.io/plugins/other/powerlevel10k). - -## Configuration - -- [For new users](#for-new-users) -- [For Powerlevel9k users](#for-powerlevel9k-users) - -### For new users - -On the first run, Powerlevel10k [configuration wizard](#configuration-wizard) will ask you a few -questions and configure your prompt. If it doesn't trigger automatically, type `p10k configure`. -Configuration wizard creates `~/.p10k.zsh` based on your preferences. Additional prompt -customization can be done by editing this file. It has plenty of comments to help you navigate -through configuration options. - -*FAQ*: - -- [What is the best prompt style in the configuration wizard?]( - #what-is-the-best-prompt-style-in-the-configuration-wizard) -- [What do different symbols in Git status mean?]( - #what-do-different-symbols-in-git-status-mean) -- [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) -- [How do I add username and/or hostname to prompt?]( - #how-do-i-add-username-andor-hostname-to-prompt) -- [How do I change prompt colors?](#how-do-i-change-prompt-colors) -- [Why some prompt segments appear and disappear as I'm typing?]( - #why-some-prompt-segments-appear-and-disappear-as-im-typing) - -*Troubleshooting*: - -- [Question mark in prompt](#question-mark-in-prompt). -- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render). -- [Sub-pixel imperfections around powerline symbols]( - #sub-pixel-imperfections-around-powerline-symbols). -- [Directory is difficult to see in prompt when using Rainbow style]( - #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style). - -### For Powerlevel9k users - -If you've been using Powerlevel9k before, **do not remove the configuration options**. Powerlevel10k -will pick them up and provide you with the same prompt UI you are used to. See -[Powerlevel9k compatibility](#powerlevel9k-compatibility). - -*FAQ*: - -- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?]( - #im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) -- [What is the relationship between Powerlevel9k and Powerlevel10k?]( - #what-is-the-relationship-between-powerlevel9k-and-powerlevel10k) -- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( - #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) - -*Troubleshooting*: [Extra or missing spaces in prompt compared to Powerlevel9k]( - #extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k). - -## Fonts - -Powerlevel10k doesn't require custom fonts but can take advantage of them if they are available. -It works well with [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts), -[Source Code Pro](https://github.com/adobe-fonts/source-code-pro), -[Font Awesome](https://fontawesome.com/), [Powerline](https://github.com/powerline/fonts), and even -the default system fonts. The full choice of style options is available only when using -[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts). - -👇 **Recommended font**: Meslo Nerd Font patched for Powerlevel10k. 👇 - -### Meslo Nerd Font patched for Powerlevel10k - -Gorgeous monospace font designed by Jim Lyles for Bitstream, customized by the same for Apple, -further customized by André Berg, and finally patched by yours truly with customized scripts -originally developed by Ryan L McIntyre of Nerd Fonts. Contains all glyphs and symbols that -Powerlevel10k may need. Battle-tested in dozens of different terminals on all major operating -systems. - -*FAQ*: [How was the recommended font created?](#how-was-the-recommended-font-created) - -#### Automatic font installation - -If you are using iTerm2 or Termux, `p10k configure` can install the recommended font for you. -Simply answer `Yes` when asked whether to install *Meslo Nerd Font*. - -If you are using a different terminal, proceed with manual font installation. 👇 - -#### Manual font installation - -1. Download these four ttf files: - - [MesloLGS NF Regular.ttf]( - https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf) - - [MesloLGS NF Bold.ttf]( - https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf) - - [MesloLGS NF Italic.ttf]( - https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf) - - [MesloLGS NF Bold Italic.ttf]( - https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf) -1. Double-click on each file and click "Install". This will make `MesloLGS NF` font available to all - applications on your system. -1. Configure your terminal to use this font: - - **iTerm2**: Type `p10k configure` and answer `Yes` when asked whether to install - *Meslo Nerd Font*. Alternatively, open *iTerm2 → Preferences → Profiles → Text* and set *Font* to - `MesloLGS NF`. - - **Apple Terminal**: Open *Terminal → Preferences → Profiles → Text*, click *Change* under *Font* - and select `MesloLGS NF` family. - - **Hyper**: Open *Hyper → Edit → Preferences* and change the value of `fontFamily` under - `module.exports.config` to `MesloLGS NF`. - - **Visual Studio Code**: Open *File → Preferences → Settings* (PC) or - *Code → Preferences → Settings* (Mac), enter `terminal.integrated.fontFamily` in the search box at - the top of *Settings* tab and set the value below to `MesloLGS NF`. - Consult [this screenshot]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/389133fb8c9a2347929a23702ce3039aacc46c3d/visual-studio-code-font-settings.jpg) - to see how it should look like or see [this issue]( - https://github.com/romkatv/powerlevel10k/issues/671) for extra information. - - **GNOME Terminal** (the default Ubuntu terminal): Open *Terminal → Preferences* and click on the - selected profile under *Profiles*. Check *Custom font* under *Text Appearance* and select - `MesloLGS NF Regular`. - - **Konsole**: Open *Settings → Edit Current Profile → Appearance*, click *Select Font* and select - `MesloLGS NF Regular`. - - **Tilix**: Open *Tilix → Preferences* and click on the selected profile under *Profiles*. Check - *Custom font* under *Text Appearance* and select `MesloLGS NF Regular`. - - **Windows Console Host** (the old thing): Click the icon in the top left corner, then - *Properties → Font* and set *Font* to `MesloLGS NF`. - - **Windows Terminal** by Microsoft (the new thing): Open *Settings* (Ctrl+,), click - either on the selected profile under *Profiles* or on *Defaults*, click *Appearance* and set - *Font face* to `MesloLGS NF`. - - **IntelliJ** (and other IDEs by Jet Brains): Open *IDE → Edit → Preferences → Editor → - Color Scheme → Console Font*. Select *Use console font instead of the default* and set the font - name to `MesloLGS NF`. - - **Termux**: Type `p10k configure` and answer `Yes` when asked whether to install - *Meslo Nerd Font*. - - **Blink**: Type `config`, go to *Appearance*, tap *Add a new font*, tap *Open Gallery*, select - *MesloLGS NF.css*, tap *import* and type `exit` in the home view to reload the font. - - **Terminus**: Open *Settings → Appearance* and set *Font* to `MesloLGS NF`. - - **Terminator**: Open *Preferences* using the context menu. Under *Profiles* select the *General* - tab (should be selected already), uncheck *Use the system fixed width font* (if not already) - and select `MesloLGS NF Regular`. Exit the Preferences dialog by clicking *Close*. - - **Guake**: Right Click on an open terminal and open *Preferences*. Under *Appearance* - tab, uncheck *Use the system fixed width font* (if not already) and select `MesloLGS NF Regular`. - Exit the Preferences dialog by clicking *Close*. - - **MobaXterm**: Open *Settings* → *Configuration* → *Terminal* → (under *Terminal look and feel*) - and change *Font* to `MesloLGS NF`. - - **Asbrú Connection Manager**: Open *Preferences → Local Shell Options → Look and Feel*, enable - *Use these personal options* and change *Font:* under *Terminal UI* to `MesloLGS NF Regular`. - To change the font for the remote host connections, go to *Preferences → Terminal Options → - Look and Feel* and change *Font:* under *Terminal UI* to `MesloLGS NF Regular`. - - **WSLtty**: Right click on an open terminal and then on *Options*. In the *Text* section, under - *Font*, click *"Select..."* and set Font to `MesloLGS NF Regular`. - - **Yakuake**: Click *≡* → *Manage Profiles* → *New* → *Appearance*. Click *Choose* next to the - *Font* dropdown, select `MesloLGS NF` and click *OK*. Click *OK* to save the profile. Select the - new profile and click *Set as Default*. - - **Alacritty**: Create or open `~/.config/alacritty/alacritty.yml` and add the following section - to it: - ```yaml - font: - normal: - family: "MesloLGS NF" - ``` - - **kitty**: Create or open `~/.config/kitty/kitty.conf` and add the following line to it: - ```text - font_family MesloLGS NF - ``` - Restart kitty by closing all sessions and opening a new session. - - **puTTY**: Set *Window* → *Appearance* → *Font* to `MesloLGS NF`. Requires puTTY - version >= 0.75. - - **WezTerm**: Create or open `$HOME/.config/wezterm/wezterm.lua` and add the following: - ```lua - local wezterm = require 'wezterm'; - return { - font = wezterm.font("MesloLGS NF"), - } - ``` - If the file already exists, only add the line with the font to the existing return. - Also add the first line if it is not already present. - - **urxvt**: Create or open `~/.Xresources` and add the following line to it: - ```text - URxvt.font: xft:MesloLGS NF:size=11 - ``` - You can adjust the font size to your preference. After changing the config run - `xrdb ~/.Xresources` to reload it. The new config is applied to all new terminals. - - **xterm**: Create or open `~/.Xresources` and add the following line to it: - ```text - xterm*faceName: MesloLGS NF - ``` - After changing the config run `xrdb ~/.Xresources` to reload it. The new config is applied to - all new terminals. - - **Zed**: Open `~/.config/zed/settings.json` and set `terminal.font_family` to `"MesloLGS NF"`. - ```jsonc - { - "terminal": { - "font_family": "MesloLGS NF" - }, - // Other settings. - } - ``` - - Crostini (Linux on Chrome OS): Open - chrome-untrusted://terminal/html/nassh_preferences_editor.html, set *Text font family* to - `'MesloLGS NF'` (including the quotes) and *Custom CSS (inline text)* to the following: - ```css - @font-face { - font-family: "MesloLGS NF"; - src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Regular.ttf"); - font-weight: normal; - font-style: normal; - } - @font-face { - font-family: "MesloLGS NF"; - src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold.ttf"); - font-weight: bold; - font-style: normal; - } - @font-face { - font-family: "MesloLGS NF"; - src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Italic.ttf"); - font-weight: normal; - font-style: italic; - } - @font-face { - font-family: "MesloLGS NF"; - src: url("https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20Bold%20Italic.ttf"); - font-weight: bold; - font-style: italic; - } - ``` - **_CAVEAT_**: If you open the normal terminal preferences these settings will be overwritten. -1. Run `p10k configure` to generate a new `~/.p10k.zsh`. The old config may work - incorrectly with the new font. - -_Using a different terminal and know how to set the font for it? Share your knowledge by sending a -PR to expand the list!_ - -## Try it in Docker - -Try Powerlevel10k in Docker. You can safely make any changes to the file system while trying out -the theme. Once you exit Zsh, the container is deleted. - -```zsh -docker run -e TERM -e COLORTERM -e LC_ALL=C.UTF-8 -it --rm alpine sh -uec ' - apk add git zsh nano vim - git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k - echo "source ~/powerlevel10k/powerlevel10k.zsh-theme" >>~/.zshrc - cd ~/powerlevel10k - exec zsh' -``` - -*Tip*: Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) before -running the Docker command to get access to all prompt styles. - -*Tip*: Run `p10k configure` while in Docker to try a different prompt style. - -## License - -Powerlevel10k is released under the -[MIT license](https://github.com/romkatv/powerlevel10k/blob/master/LICENSE). - -## FAQ - -- [How do I update Powerlevel10k?](#how-do-i-update-powerlevel10k) -- [How do I uninstall Powerlevel10k?](#how-do-i-uninstall-powerlevel10k) -- [How do I install Powerlevel10k on a machine without Internet access?](#how-do-i-install-powerlevel10k-on-a-machine-without-internet-access) -- [Where can I ask for help and report bugs?](#where-can-i-ask-for-help-and-report-bugs) -- [Which aspects of shell and terminal does Powerlevel10k affect?](#which-aspects-of-shell-and-terminal-does-powerlevel10k-affect) -- [I'm using Powerlevel9k with Oh My Zsh. How do I migrate?](#im-using-powerlevel9k-with-oh-my-zsh-how-do-i-migrate) -- [Is it really fast?](#is-it-really-fast) -- [How do I configure instant prompt?](#how-do-i-configure-instant-prompt) -- [How do I initialize direnv when using instant prompt?](#how-do-i-initialize-direnv-when-using-instant-prompt) -- [How do I export GPG_TTY when using instant prompt?](#how-do-i-export-gpg_tty-when-using-instant-prompt) -- [What do different symbols in Git status mean?](#what-do-different-symbols-in-git-status-mean) -- [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) -- [Why is Git status from `$HOME/.git` not displayed in prompt?](#why-is-git-status-from-homegit-not-displayed-in-prompt) -- [Why does Git status sometimes appear grey and then gets colored after a short period of time?](#why-does-git-status-sometimes-appear-grey-and-then-gets-colored-after-a-short-period-of-time) -- [How do I add username and/or hostname to prompt?](#how-do-i-add-username-andor-hostname-to-prompt) -- [Why some prompt segments appear and disappear as I'm typing?](#why-some-prompt-segments-appear-and-disappear-as-im-typing) -- [How do I change prompt colors?](#how-do-i-change-prompt-colors) -- [Why does Powerlevel10k spawn extra processes?](#why-does-powerlevel10k-spawn-extra-processes) -- [Are there configuration options that make Powerlevel10k slow?](#are-there-configuration-options-that-make-powerlevel10k-slow) -- [Is Powerlevel10k fast to load?](#is-powerlevel10k-fast-to-load) -- [What is the relationship between Powerlevel9k and Powerlevel10k?](#what-is-the-relationship-between-powerlevel9k-and-powerlevel10k) -- [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?](#does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) -- [What is the best prompt style in the configuration wizard?](#what-is-the-best-prompt-style-in-the-configuration-wizard) -- [How to make Powerlevel10k look like robbyrussell Oh My Zsh theme?](#how-to-make-powerlevel10k-look-like-robbyrussell-oh-my-zsh-theme) -- [Can prompts for completed commands display error status for *those* commands instead of the commands preceding them?](#can-prompts-for-completed-commands-display-error-status-for-those-commands-instead-of-the-commands-preceding-them) -- [What is the minimum supported Zsh version?](#what-is-the-minimum-supported-zsh-version) -- [How were these screenshots and animated gifs created?](#how-were-these-screenshots-and-animated-gifs-created) -- [How was the recommended font created?](#how-was-the-recommended-font-created) -- [How to package Powerlevel10k for distribution?](#how-to-package-powerlevel10k-for-distribution) - -### How do I update Powerlevel10k? - -The command to update Powerlevel10k depends on how it was installed. - -| Installation | Update command | -|-------------------------------|-------------------------------------------------------------| -| [Manual](#manual) | `git -C ~/powerlevel10k pull` | -| [Oh My Zsh](#oh-my-zsh) | `git -C ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k pull` | -| [Prezto](#prezto) | `zprezto-update` | -| [Zim](#zim) | `zimfw update` | -| [Antigen](#antigen) | `antigen update` | -| [Antidote](#antidote) | `antidote update` | -| [Zplug](#zplug) | `zplug update` | -| [Zgen](#zgen) | `zgen update` | -| [Zplugin](#zplugin) | `zplugin update` | -| [Zinit](#zinit) | `zinit update` | -| [Zi](#zi) | `zi update` | -| [Zap](#zap) | `zap --update` | -| [Homebrew](#homebrew) | `brew update && brew upgrade` | -| [Arch Linux](#arch-linux) | `yay -S --noconfirm zsh-theme-powerlevel10k-git` | -| [Alpine Linux](#alpine-linux) | `apk update && apk upgrade` | - -**IMPORTANT**: Restart Zsh after updating Powerlevel10k. [Do not use `source ~/.zshrc`]( - #weird-things-happen-after-typing-source-zshrc). - -### How do I uninstall Powerlevel10k? - -1. Remove all references to "p10k" from `~/.zshrc`. You might have this snippet at the top: - ```zsh - 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 - ``` - And this at the bottom: - ```zsh - [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh - ``` - These are added by the [configuration wizard](#configuration-wizard). Remove them. -2. Remove all references to "powerlevel10k" from `~/.zshrc`, `~/.zpreztorc` and `~/.zimrc` (some - of these files may be missing -- this is normal). These references have been added manually by - yourself when installing Powerlevel10k. Refer to the [installation instructions](#installation) - if you need a reminder. -3. Verify that all references to "p10k" and "powerlevel10k" are gone from `~/.zshrc`, `~/.zpreztorc` - and `~/.zimrc`. - ```zsh - grep -E 'p10k|powerlevel10k' ~/.zshrc ~/.zpreztorc ~/.zimrc 2>/dev/null - ``` - If this command produces output, there are still references to "p10k" or "powerlevel10k". You - need to remove them. -4. Delete Powerlevel10k configuration file. This file is created by the - [configuration wizard](#configuration-wizard) and may contain manual edits by yourself. - ```zsh - rm -f ~/.p10k.zsh - ``` -5. Delete Powerlevel10k source files. These files have been downloaded when you've installed - Powerlevel10k. The command to delete them depends on which installation method you'd chosen. - Refer to the [installation instructions](#installation) if you need a reminder. - - | Installation | Uninstall command | - |-------------------------------|------------------------------------------------------------------| - | [Manual](#manual) | `rm -rf ~/powerlevel10k` | - | [Oh My Zsh](#oh-my-zsh) | `rm -rf -- ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k` | - | [Prezto](#prezto) | n/a | - | [Zim](#zim) | `zimfw uninstall` | - | [Antigen](#antigen) | `antigen purge romkatv/powerlevel10k` | - | [Antidote](#antidote) | `antidote purge romkatv/powerlevel10k` | - | [Zplug](#zplug) | `zplug clean` | - | [Zgen](#zgen) | `zgen reset` | - | [Zplugin](#zplugin) | `zplugin delete romkatv/powerlevel10k` | - | [Zinit](#zinit) | `zinit delete romkatv/powerlevel10k` | - | [Zi](#zi) | `zi delete romkatv/powerlevel10k` | - | [Zap](#zap) | `zsh -ic 'zap --clean'` | - | [Homebrew](#homebrew) | `brew uninstall powerlevel10k; brew untap romkatv/powerlevel10k` | - | [Arch Linux](#arch-linux) | `yay -R --noconfirm zsh-theme-powerlevel10k-git` | - | [Alpine Linux](#alpine-linux) | `apk del zsh-theme-powerlevel10k` | -6. Restart Zsh. [Do not use `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc). -7. Delete Powerlevel10k cache files. - ```zsh - rm -rf -- "${XDG_CACHE_HOME:-$HOME/.cache}"/p10k-*(N) "${XDG_CACHE_HOME:-$HOME/.cache}"/gitstatus - ``` - -### How do I install Powerlevel10k on a machine without Internet access? - -1. Run this command on the machine without Internet access: - ```sh - uname -sm | tr '[A-Z]' '[a-z]' - ``` -2. Run these commands on a machine connected to the Internet after replacing the value of - `target_uname` with the output of the previous command: - ```sh - target_uname="replace this with the output of the previous command" - git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k - GITSTATUS_CACHE_DIR="$HOME"/powerlevel10k/gitstatus/usrbin ~/powerlevel10k/gitstatus/install -f -s "${target_uname% *}" -m "${target_uname#* }" - ``` -3. Copy `~/powerlevel10k` from the machine connected to the Internet to the one without Internet - access. -4. Add `source ~/powerlevel10k/powerlevel10k.zsh-theme` to `~/.zshrc` on the machine without - Internet access: - ```zsh - echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc - ``` -5. If `~/.zshrc` on the machine without Internet access sets `ZSH_THEME`, remove that line. - ```zsh - sed -i.bak '/^ZSH_THEME=/d' ~/.zshrc - ``` - -To update, remove `~/powerlevel10k` on both machines and repeat steps 1-3. - -### Where can I ask for help and report bugs? - -The best way to ask for help and to report bugs is to [open an issue]( - https://github.com/romkatv/powerlevel10k/issues). - -[Gitter]( - https://gitter.im/powerlevel10k/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -is another option. - -If all else fails, email roman.perepelitsa@gmail.com. - -If necessary, encrypt your communication with [this PGP key]( - https://api.github.com/users/romkatv/gpg_keys). - -### Which aspects of shell and terminal does Powerlevel10k affect? - -Powerlevel10k defines prompt and nothing else. It sets [prompt-related options]( - http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting), and parameters `PS1` and `RPS1`. - -![Prompt Highlight]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/prompt-highlight.png) - -Everything within the highlighted areas on the screenshot is produced by Powerlevel10k. -Powerlevel10k has no control over the terminal content or colors outside these areas. - -Powerlevel10k does not affect: - -- Terminal window/tab title. -- Colors used by `ls`. -- The behavior of `git` command. -- The content and style of Tab completions. -- Command line colors (syntax highlighting, autosuggestions, etc.). -- Key bindings. -- Aliases. -- Prompt parameters other than `PS1` and `RPS1`. -- Zsh options other than those [related to prompt]( - http://zsh.sourceforge.net/Doc/Release/Options.html#Prompting). - -### I'm using Powerlevel9k with Oh My Zsh. How do I migrate? - -1. Run this command: -```zsh -# Add powerlevel10k to the list of Oh My Zsh themes. -git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k -# Replace ZSH_THEME="powerlevel9k/powerlevel9k" with ZSH_THEME="powerlevel10k/powerlevel10k". -sed -i.bak 's/powerlevel9k/powerlevel10k/g' ~/.zshrc -# Restart Zsh. -exec zsh -``` -2. *Optional but highly recommended:* - 1. Install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). - 1. Type `p10k configure` and choose your favorite prompt style. - -*Related:* - - [Powerlevel9k compatibility.](#powerlevel9k-compatibility) - - [Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config?]( - #does-powerlevel10k-always-render-exactly-the-same-prompt-as-powerlevel9k-given-the-same-config) - - [Extra or missing spaces in prompt compared to Powerlevel9k.]( - #extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k) - - [Configuration wizard.](#configuration-wizard) - -### Is it really fast? - -Yes. See [zsh-bench](https://github.com/romkatv/zsh-bench) or a direct comparison with -[Powerlevel9k](https://asciinema.org/a/NHRjK3BMePw66jtRVY2livHwZ) and -[Spaceship](https://asciinema.org/a/253094). - -### How do I configure instant prompt? - -See [instant prompt](#instant-prompt) to learn about instant prompt. This section explains how you -can enable and configure it and lists caveats that you should be aware of. - -Instant prompt can be enabled either through `p10k configure` or by manually adding the following -code snippet at the top of `~/.zshrc`: - -```zsh -# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. -# Initialization code that may require console input (password prompts, [y/n] -# confirmations, etc.) must go above this block; everything else may go below. -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 -``` - -It's important that you copy the lines verbatim. Don't replace `source` with something else, don't -call `zcompile`, don't redirect output, etc. - -When instant prompt is enabled, for the duration of Zsh initialization standard input is redirected -to `/dev/null` and standard output with standard error are redirected to a temporary file. Once Zsh -is fully initialized, standard file descriptors are restored and the content of the temporary file -is printed out. - -When using instant prompt, you should carefully check any output that appears on Zsh startup as it -may indicate that initialization has been altered, or perhaps even broken, by instant prompt. -Initialization code that may require console input, such as asking for a keyring password or for a -*[y/n]* confirmation, must be moved above the instant prompt preamble in `~/.zshrc`. Initialization -code that merely prints to console but never reads from it will work correctly with instant prompt, -although output that normally has colors may appear uncolored. You can either leave it be, suppress -the output, or move it above the instant prompt preamble. - -Here's an example of `~/.zshrc` that breaks when instant prompt is enabled: - -```zsh -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 - -keychain id_rsa --agents ssh # asks for password -chatty-script # spams to stdout even when everything is fine -# ... -``` - -Fixed version: - -```zsh -keychain id_rsa --agents ssh # moved before instant prompt - -# OK to perform console I/O before this point. -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 -# From this point on, until zsh is fully initialized, console input won't work and -# console output may appear uncolored. - -chatty-script >/dev/null # spam output suppressed -# ... -``` - -If `POWERLEVEL9K_INSTANT_PROMPT` is unset or set to `verbose`, Powerlevel10k will print a warning -when it detects console output during initialization to bring attention to potential issues. You can -silence this warning (without suppressing console output) with `POWERLEVEL9K_INSTANT_PROMPT=quiet`. -This is recommended if some initialization code in `~/.zshrc` prints to console and it's infeasible -to move it above the instant prompt preamble or to suppress its output. You can completely disable -instant prompt with `POWERLEVEL9K_INSTANT_PROMPT=off`. Do this if instant prompt breaks Zsh -initialization and you don't know how to fix it. - -The value of `POWERLEVEL9K_INSTANT_PROMPT` can be changed by running `p10k configure` and selecting -the appropriate option on the *Instant Prompt* screen. Alternatively, you can search for -`POWERLEVEL9K_INSTANT_PROMPT` in the existing `~/.p10k.zsh` and change its value there. - -*Note*: Instant prompt requires Zsh >= 5.4. It's OK to enable it even when using an older version of -Zsh but it won't do anything. - -*FAQ*: - -- [How do I initialize direnv when using instant prompt?]( - #how-do-i-initialize-direnv-when-using-instant-prompt) -- [How do I export GPG_TTY when using instant prompt?]( - #how-do-i-export-gpg_tty-when-using-instant-prompt) - -### How do I initialize direnv when using instant prompt? - -If you've enabled [instant prompt](#instant-prompt), you should have these lines at the top of -`~/.zshrc`: - -```zsh -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 -``` - -To initialize direnv you need to add one line above that block and one line below it. - -```zsh -(( ${+commands[direnv]} )) && emulate zsh -c "$(direnv export zsh)" - -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 - -(( ${+commands[direnv]} )) && emulate zsh -c "$(direnv hook zsh)" -``` - -*Related*: [How do I export GPG_TTY when using instant prompt?]( - #how-do-i-export-gpg_tty-when-using-instant-prompt) - -### How do I export GPG_TTY when using instant prompt? - -You can export `GPG_TTY` like this anywhere in `~/.zshrc`: - -```zsh -export GPG_TTY=$TTY -``` - -This works whether you are using [instant prompt](#instant-prompt) or not. It works even if you -aren't using powerlevel10k. As an extra bonus, it's much faster than the commonly used -`export GPG_TTY=$(tty)`. - -*Related*: [How do I initialize direnv when using instant prompt?]( - #how-do-i-initialize-direnv-when-using-instant-prompt) - -### What do different symbols in Git status mean? - -When using Lean, Classic or Rainbow style, Git status may look like this: - -```text -feature:master wip ⇣42⇡42 ⇠42⇢42 *42 merge ~42 +42 !42 ?42 -``` - -| Symbol | Meaning | Source | -| --------- | -------------------------------------------------------------------- | ------------------------------------------------------ | -| `feature` | current branch; replaced with `#tag` or `@commit` if not on a branch | `git status --ignore-submodules=dirty` | -| `master` | remote tracking branch; only shown if different from local branch | `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}` | -| `wip` | the latest commit's summary contains "wip" or "WIP" | `git show --pretty=%s --no-patch HEAD` | -| `⇣42` | this many commits behind the remote | `git rev-list --right-only --count HEAD...@{upstream}` | -| `⇡42` | this many commits ahead of the remote | `git rev-list --left-only --count HEAD...@{upstream}` | -| `⇠42` | this many commits behind the push remote | `git rev-list --right-only --count HEAD...@{push}` | -| `⇢42` | this many commits ahead of the push remote | `git rev-list --left-only --count HEAD...@{push}` | -| `*42` | this many stashes | `git stash list` | -| `merge` | repository state | `git status --ignore-submodules=dirty` | -| `~42` | this many merge conflicts | `git status --ignore-submodules=dirty` | -| `+42` | this many staged changes | `git status --ignore-submodules=dirty` | -| `!42` | this many unstaged changes | `git status --ignore-submodules=dirty` | -| `?42` | this many untracked files | `git status --ignore-submodules=dirty` | -| `─` | the number of staged, unstaged or untracked files is unknown | `echo $POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY` or `git config --get bash.showDirtyState` | - -*Related*: [How do I change the format of Git status?](#how-do-i-change-the-format-of-git-status) - -### How do I change the format of Git status? - -To change the format of Git status, open `~/.p10k.zsh`, search for `my_git_formatter` and edit its -source code. - -*Related*: [What do different symbols in Git status mean?]( - #what-do-different-symbols-in-git-status-mean) - -### Why is Git status from `$HOME/.git` not displayed in prompt? - -When using Lean, Classic or Rainbow style, `~/.p10k.zsh` contains the following parameter: - -```zsh -# Don't show Git status in prompt for repositories whose workdir matches this pattern. -# For example, if set to '~', the Git repository at $HOME/.git will be ignored. -# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. -typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' -``` - -To see Git status for `$HOME/.git` in prompt, open `~/.p10k.zsh` and remove -`POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN`. - -### Why does Git status sometimes appear grey and then gets colored after a short period of time? - -tl;dr: When Git status in prompt is greyed out, it means Powerlevel10k is currently computing -up-to-date Git status in the background. Prompt will get automatically refreshed when this -computation completes. - -When your current directory is within a Git repository, Powerlevel10k computes up-to-date Git -status after every command. If the repository is large, or the machine is slow, this computation -can take quite a bit of time. If it takes longer than 10 milliseconds (configurable via -`POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS`), Powerlevel10k displays the last known Git status in -grey and continues to compute up-to-date Git status in the background. When the computation -completes, Powerlevel10k refreshes prompt with new information, this time with colored Git status. - -When using *Rainbow* style, Git status is displayed as black on grey while it's still being -computed. Depending on the terminal color palette, this may be difficult to read. In this case you -might want to change the background color to something ligher for more contrast. To do that, open -`~/.p10k.zsh`, search for `POWERLEVEL9K_VCS_LOADING_BACKGROUND`, uncomment it if it's commented out, -and change the value. - -```zsh -typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=244 -``` - -Type `source ~/.p10k.zsh` to apply your changes to the current Zsh session. - -*Related*: [How do I change prompt colors?](#how-do-i-change-prompt-colors) - -### How do I add username and/or hostname to prompt? - -When using Lean, Classic or Rainbow style, prompt shows `username@hostname` when you are logged in -as root or via SSH. There is little value in showing `username` or `hostname` when you are logged in -to your local machine as a normal user. So the absence of `username@hostname` in your prompt is an -indication that you are working locally and that you aren't root. You can change it, however. - -Open `~/.p10k.zsh`. Close to the top you can see the most important parameters that define which -segments are shown in your prompt. All generally useful prompt segments are listed in there. Some of -them are enabled, others are commented out. One of them is of interest to you. - -```zsh -typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - ... - context # user@hostname - ... -) -``` - -Search for `context` to find the section in the config that lists parameters specific to this prompt -segment. You should see the following lines: - -```zsh -# Don't show context unless running with privileges or in SSH. -# Tip: Remove the next line to always show context. -typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= -``` - -If you follow the tip and remove (or comment out) the last line, you'll always see -`username@hostname` in prompt. You can change the format to just `username`, or change the color, by -adjusting the values of parameters nearby. There are plenty of comments to help you navigate. - -You can also move `context` to a different position in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` or even -to `POWERLEVEL9K_LEFT_PROMPT_ELEMENTS`. - -### Why some prompt segments appear and disappear as I'm typing? - -Prompt segments can be configured to be shown only when the current command you are typing invokes -a relevant tool. - -```zsh -# Show prompt segment "kubecontext" only when the command you are typing invokes -# invokes kubectl, helm, or kubens. -typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens' -``` - -Configs created by `p10k configure` may contain parameters of this kind. To customize when different -prompt segments are shown, open `~/.p10k.zsh`, search for `SHOW_ON_COMMAND` and either remove these -parameters or change their values. - -You can also define a function in `~/.zshrc` to toggle the display of a prompt segment between -*always* and *on command*. This is similar to `kubeon`/`kubeoff` from -[kube-ps1](https://github.com/jonmosco/kube-ps1). - -```zsh -function kube-toggle() { - if (( ${+POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND} )); then - unset POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND - else - POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens' - fi - p10k reload - if zle; then - zle push-input - zle accept-line - fi -} -``` - -Invoke this function by typing `kube-toggle`. You can also bind it to a key by adding two more lines -to `~/.zshrc`: - -```zsh -zle -N kube-toggle -bindkey '^]' kube-toggle # ctrl-] to toggle kubecontext in powerlevel10k prompt -``` - -### How do I change prompt colors? - -You can either [change the color palette used by your terminal]( - #change-the-color-palette-used-by-your-terminal) or -[set colors through Powerlevel10k configuration parameters]( - #set-colors-through-Powerlevel10k-configuration-parameters). - -#### Change the color palette used by your terminal - -How exactly you change the terminal color palette (a.k.a. color scheme, or theme) depends on the -kind of terminal you are using. Look around in terminal's settings/preferences or consult -documentation. - -When you change the terminal color palette, it usually affects only the first 16 colors, numbered -from 0 to 15. In order to see any effect on Powerlevel10k prompt, you need to use prompt style that -utilizes these low-numbered colors. Type `p10k configure` and select *Rainbow*, *Lean* → *8 colors* -or *Pure* → *Original*. Other styles use higher-numbered colors, so they look the same in any -terminal color palette. - -#### Set colors through Powerlevel10k configuration parameters - -Open `~/.p10k.zsh`, search for "color", "foreground" and "background" and change values of -appropriate parameters. For example, here's how you can set the foreground of `time` prompt segment -to bright red: - -```zsh -typeset -g POWERLEVEL9K_TIME_FOREGROUND=160 -``` - -Colors are specified using numbers from 0 to 255. Colors from 0 to 15 look differently in different -terminals. Many terminals also support customization of these colors through color palettes -(a.k.a. color schemes, or themes). Colors from 16 to 255 always look the same. - -Type `source ~/.p10k.zsh` to apply your changes to the current Zsh session. - -To see how different colors look in your terminal, run the following command: - -```zsh -for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done -``` - -*Related:* - - [Directory is difficult to see in prompt when using Rainbow style.]( - #directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) - -### Why does Powerlevel10k spawn extra processes? - -Powerlevel10k uses [gitstatus](https://github.com/romkatv/gitstatus) as the backend behind `vcs` -prompt; gitstatus spawns `gitstatusd` and `zsh`. See -[gitstatus](https://github.com/romkatv/gitstatus) for details. Powerlevel10k may also spawn `zsh` -to perform computation without blocking prompt. To avoid security hazard, these background processes -aren't shared by different interactive shells. They terminate automatically when the parent `zsh` -process terminates or runs `exec(3)`. - -### Are there configuration options that make Powerlevel10k slow? - -No, Powerlevel10k is always fast, with any configuration you throw at it. If you have noticeable -prompt latency when using Powerlevel10k, please -[open an issue](https://github.com/romkatv/powerlevel10k/issues). - -### Is Powerlevel10k fast to load? - -Yes. See [zsh-bench](https://github.com/romkatv/zsh-bench). - -### What is the relationship between Powerlevel9k and Powerlevel10k? - -Powerlevel10k was forked from Powerlevel9k in March 2019 after a week-long discussion in -[powerlevel9k#1170](https://github.com/Powerlevel9k/powerlevel9k/issues/1170). Powerlevel9k was -already a mature project with a large user base and a release cycle measured in months. Powerlevel10k -was spun off to iterate on performance improvements and new features at much higher pace. - -Powerlevel9k and Powerlevel10k are independent projects. When using one, you shouldn't install the -other. Issues should be filed against the project that you actually use. There are no individuals -that have commit rights in both repositories. All bug fixes and new features committed to -Powerlevel9k repository get ported to Powerlevel10k. - -Over time, virtually all code in Powerlevel10k has been rewritten. There is currently no meaningful -overlap between the implementations of Powerlevel9k and Powerlevel10k. - -Powerlevel10k is committed to maintaining backward compatibility with all configs indefinitely. This -commitment covers all configuration parameters recognized by Powerlevel9k (see -[Powerlevel9k compatibility](#powerlevel9k-compatibility)) and additional parameters that only -Powerlevel10k understands. Names of all parameters in Powerlevel10k start with `POWERLEVEL9K_` for -consistency. - -### Does Powerlevel10k always render exactly the same prompt as Powerlevel9k given the same config? - -Almost. There are a few differences. - -- By default only `git` vcs backend is enabled in Powerlevel10k. If you need `svn` and `hg`, add - them to `POWERLEVEL9K_VCS_BACKENDS`. These backends aren't yet optimized in Powerlevel10k, so - enabling them will make prompt *very slow*. -- Powerlevel10k doesn't support `POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY=true`. -- Powerlevel10k strives to be bug-compatible with Powerlevel9k but not when it comes to egregious - bugs. If you accidentally rely on these bugs, your prompt will differ between Powerlevel9k and - Powerlevel10k. Some examples: - - Powerlevel9k ignores some options that are set after the theme is sourced while Powerlevel10k - respects all options. If you see different icons in Powerlevel9k and Powerlevel10k, you've - probably defined `POWERLEVEL9K_MODE` before sourcing the theme. This parameter gets ignored - by Powerlevel9k but honored by Powerlevel10k. If you want your prompt to look in Powerlevel10k - the same as in Powerlevel9k, remove `POWERLEVEL9K_MODE`. - - Powerlevel9k doesn't respect `ZLE_RPROMPT_INDENT`. As a result, right prompt in Powerlevel10k - can have an extra space at the end compared to Powerlevel9k. Set `ZLE_RPROMPT_INDENT=0` if you - don't want that space. More details in - [troubleshooting](#extra-space-without-background-on-the-right-side-of-right-prompt). - - Powerlevel9k has inconsistent spacing around icons. This was fixed in Powerlevel10k. Set - `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to get the same spacing as in Powerlevel9k. More - details in [troubleshooting](#extra-or-missing-spaces-around-icons). - - There are dozens more bugs in Powerlevel9k that don't exist in Powerlevel10k. - -If you notice any other changes in prompt appearance when switching from Powerlevel9k to -Powerlevel10k, please [open an issue](https://github.com/romkatv/powerlevel10k/issues). - -### What is the best prompt style in the configuration wizard? - -There are as many opinions on what constitutes the best prompt as there are people. It mostly comes -down to personal preference. There are, however, a few hidden implications of different choices. - -Pure style is an exact replication of [Pure Zsh theme](https://github.com/sindresorhus/pure). It -exists to ease the migration for users of this theme. Unless you are one of them, choose Lean -style over Pure. - -If you want to confine prompt colors to the selected terminal color palette (say, *Solarized Dark*), -use *Rainbow*, *Lean* → *8 colors* or *Pure* → *Original*. Other styles use fixed colors and thus -look the same in any terminal color palette. - -All styles except Pure have an option to use *ASCII* charset. Prompt will look less pretty but will -render correctly with all fonts and in all locales. - -If you enable transient prompt, take advantage of two-line prompt. You'll get the benefit of -extra space for typing commands without the usual drawback of reduced scrollback density. Having -all commands start from the same offset is also nice. - -Similarly, if you enable transient prompt, sparse prompt (with an empty line before prompt) is a -great choice. - -If you are using vi keymap, choose prompt with `prompt_char` in it (shown as green `❯` in the -wizard). This symbol changes depending on vi mode: `❯`, `❮`, `V`, `▶` for insert, command, visual -and replace mode respectively. When a command fails, the symbol turns red. *Lean* style always has -`prompt_char` in it. *Rainbow* and *Classic* styles have it only in the two-line configuration -without left frame. - -If you value horizontal space or prefer minimalist aesthetics: - -- Use a monospace font, such as [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). - Non-monospace fonts require extra space after icons that are larger than a single column. -- Use Lean style. Compared to Classic and Rainbow, it saves two characters per prompt segment. -- Disable *current time* and *frame*. -- Use *few icons*. The extra icons enabled by the *many icons* option primarily serve decorative - function. Informative icons, such as background job indicator, will be shown either way. - -*Note*: You can run configuration wizard as many times as you like. Type `p10k configure` to try new -prompt style. - -### How to make Powerlevel10k look like robbyrussell Oh My Zsh theme? - -Use [this config]( - https://github.com/romkatv/powerlevel10k/blob/master/config/p10k-robbyrussell.zsh). - -You can either download it, save as `~/.p10k.zsh` and `source ~/.p10k.zsh` from `~/.zshrc`, or -source `p10k-robbyrussell.zsh` directly from your cloned `powerlevel10k` repository. - -### Can prompts for completed commands display error status for *those* commands instead of the commands preceding them? - -No. When you hit *ENTER* and the command you've typed starts running, its error status isn't yet -known, so it cannot be shown in prompt. When the command completes, the error status gets known but -it's no longer possible to update prompt for *that* command. This is why the error status for every -command is reflected in the *next* prompt. - -For details, see [this post on /r/zsh]( -https://www.reddit.com/r/zsh/comments/eg49ff/powerlevel10k_prompt_history_exit_code_colors/fc5huku). - -### What is the minimum supported Zsh version? - -Zsh 5.3 or newer should work. Fast startup requires Zsh >= 5.4. - -### How were these screenshots and animated gifs created? - -All screenshots and animated gifs were recorded in GNOME Terminal with -[the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) and Tango Dark color palette with -custom background color (`#171A1B` instead of `#2E3436` -- twice as dark). - -![GNOME Terminal Color Settings]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/gnome-terminal-colors.png) - -Syntax highlighting, where present, was provided by [zsh-syntax-highlighting]( - https://github.com/zsh-users/zsh-syntax-highlighting). - -### How was the recommended font created? - -[The recommended font](#meslo-nerd-font-patched-for-powerlevel10k) is the product of many -individuals. Its origin is *Bitstream Vera Sans Mono*, which has given birth to *Menlo*, which in -turn has spawned *Meslo*. Finally, extra glyphs have been added to *Meslo* with scripts forked -from Nerd Fonts. The final font is released under the terms of -[Apache License]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/MesloLGS%20NF%20License.txt). - -MesloLGS NF font can be recreated with the following command (requires `git` and `docker`): - -```zsh -git clone --depth=1 https://github.com/romkatv/nerd-fonts.git -cd nerd-fonts -./build 'Meslo/S/*' -``` - -If everything goes well, four `ttf` files will appear in `./out`. - -### How to package Powerlevel10k for distribution? - -It's currently neither easy nor recommended to package and distribute Powerlevel10k. There are no -instructions you can follow that would allow you to easily update your package when new versions of -Powerlevel10k are released. This may change in the future but not soon. - -## Troubleshooting - -- [Question mark in prompt](#question-mark-in-prompt) -- [Icons, glyphs or powerline symbols don't render](#icons-glyphs-or-powerline-symbols-dont-render) -- [Sub-pixel imperfections around powerline symbols](#sub-pixel-imperfections-around-powerline-symbols) -- [Error: character not in range](#error-character-not-in-range) -- [Cursor is in the wrong place](#cursor-is-in-the-wrong-place) -- [Prompt wrapping around in a weird way](#prompt-wrapping-around-in-a-weird-way) -- [Right prompt is in the wrong place](#right-prompt-is-in-the-wrong-place) -- [Configuration wizard runs automatically every time Zsh is started](#configuration-wizard-runs-automatically-every-time-zsh-is-started) -- [Some prompt styles are missing from the configuration wizard](#some-prompt-styles-are-missing-from-the-configuration-wizard) -- [Cannot install the recommended font](#cannot-install-the-recommended-font) -- [Extra or missing spaces in prompt compared to Powerlevel9k](#extra-or-missing-spaces-in-prompt-compared-to-powerlevel9k) - - [Extra space without background on the right side of right prompt](#extra-space-without-background-on-the-right-side-of-right-prompt) - - [Extra or missing spaces around icons](#extra-or-missing-spaces-around-icons) -- [Weird things happen after typing `source ~/.zshrc`](#weird-things-happen-after-typing-source-zshrc) -- [Transient prompt stops working after some time](#transient-prompt-stops-working-after-some-time) -- [Cannot make Powerlevel10k work with my plugin manager](#cannot-make-powerlevel10k-work-with-my-plugin-manager) -- [Directory is difficult to see in prompt when using Rainbow style](#directory-is-difficult-to-see-in-prompt-when-using-rainbow-style) -- [Horrific mess when resizing terminal window](#horrific-mess-when-resizing-terminal-window) -- [Icons cut off in Konsole](#icons-cut-off-in-konsole) -- [Arch Linux logo has a dot in the bottom right corner](#arch-linux-logo-has-a-dot-in-the-bottom-right-corner) - -### Question mark in prompt - -If it looks like a regular `?`, that's normal. It means you have untracked files in the current Git -repository. Type `git status` to see these files. You can change this symbol or disable the display -of untracked files altogether. Search for `untracked files` in `~/.p10k.zsh`. - -*FAQ*: [What do different symbols in Git status mean?]( - #what-do-different-symbols-in-git-status-mean) - -You can also get a weird-looking question mark in your prompt if your terminal's font is missing -some glyphs. See [icons, glyphs or powerline symbols don't render]( - #icons-glyphs-or-powerline-symbols-dont-render). - -### Icons, glyphs or powerline symbols don't render - -Restart your terminal, [install the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) -and run `p10k configure`. - -### Sub-pixel imperfections around powerline symbols - -![Powerline Prompt Imperfections]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/powerline-imperfections.png) - -There are three imperfections on the screenshot. From left to right: - -1. A thin blue line (a sub-pixel gap) between the content of a prompt segment and the following -powerline connection. -1. Incorrect alignment of a powerline connection and the following prompt segment. The connection -appears shifted to the right. -1. A thin red line below a powerline connection. The connection appears shifted up. - -Zsh themes don't have down-to-pixel control over the terminal content. Everything you see on the -screen is made of monospace characters. A white powerline prompt segment is made of text on white -background followed by U+E0B0 (a right-pointing triangle). - -![Powerline Prompt Imperfections]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/powerline-anatomy.png) - -If Powerlevel10k prompt has imperfections around powerline symbols, you'll see exactly the same -imperfections with all powerline themes (Agnoster, Powerlevel9k, Powerline, etc.) - -There are several things you can try to deal with these imperfections: - -- Try [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). If you are already using - it, switching to another font may help but is unlikely. -- Change terminal font size one point up or down. For example, in iTerm2 powerline prompt looks - perfect at font sizes 11 and 13 but breaks down at 12. -- Enable builtin powerline glyphs in terminal settings if your terminal supports it (iTerm2 does). -- Change font hinting and/or anti-aliasing mode in the terminal settings. -- Shift all text one pixel up/down/left/right if your terminal has an option to do so. -- Try a different terminal. - -A more radical solution is to switch to prompt style without background. Type `p10k configure` and -select *Lean*. This style has a modern lightweight look. As a bonus, it doesn't suffer from -rendering imperfections that afflict powerline-style prompt. - -### Error: character not in range - -Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", your locale -doesn't support UTF-8. You need to fix it. If you are running Zsh over SSH, see -[this](https://github.com/romkatv/powerlevel10k/issues/153#issuecomment-518347833). If you are -running Zsh locally, Google "set UTF-8 locale in *your OS*". - -### Cursor is in the wrong place - -Type `echo '\u276F'`. If you get an error saying "zsh: character not in range", see the -[previous section](#zsh-character-not-in-range). - -If the `echo` command prints `❯` but the cursor is still in the wrong place, install -[the recommended font](#meslo-nerd-font-patched-for-powerlevel10k) and run -`p10k configure`. - -If this doesn't help, add `unset ZLE_RPROMPT_INDENT` at the bottom of `~/.zshrc`. - -Still having issues? Run the following command to diagnose the problem: - -```zsh -() { - emulate -L zsh - setopt err_return no_unset - local text - print -rl -- 'Select a part of your prompt from the terminal window and paste it below.' '' - read -r '?Prompt: ' text - local -i len=${(m)#text} - local frame="+-${(pl.$len..-.):-}-+" - print -lr -- $frame "| $text |" $frame -} -``` - -#### If the prompt line aligns with the frame - -```text -+------------------------------+ -| romka@adam ✓ ~/powerlevel10k | -+------------------------------+ -``` - -If the output of the command is aligned for every part of your prompt (left and right), this -indicates a bug in the theme or your config. Use this command to diagnose it: - -```zsh -print -rl -- ${(eq+)PROMPT} ${(eq+)RPROMPT} -``` - -Look for `%{...%}` and backslash escapes in the output. If there are any, they are the likely -culprits. Open an issue if you get stuck. - -#### If the prompt line is longer than the frame - -```text -+-----------------------------+ -| romka@adam ✓ ~/powerlevel10k | -+-----------------------------+ -``` - -This is usually caused by a terminal bug or misconfiguration that makes it print ambiguous-width -characters as double-width instead of single width. For example, -[this issue](https://github.com/romkatv/powerlevel10k/issues/165). - -#### If the prompt line is shorter than the frame and is mangled - -```text -+------------------------------+ -| romka@adam ✓~/powerlevel10k | -+------------------------------+ -``` - -Note that this prompt is different from the original as it's missing a space after the check mark. - -This can be caused by a low-level bug in macOS. See -[this issue](https://github.com/romkatv/powerlevel10k/issues/241). - -This can also happen if prompt contains glyphs designated as "wide" in the Unicode standard and your -terminal incorrectly displays them as non-wide. Terminals suffering from this limitation include -Konsole, Hyper and the integrated VSCode Terminal. The solution is to use a different terminal or -remove all wide glyphs from prompt. - -#### If the prompt line is shorter than the frame and is not mangled - -```text -+--------------------------------+ -| romka@adam ✓ ~/powerlevel10k | -+--------------------------------+ -``` - -This can be caused by misconfigured locale. See -[this issue](https://github.com/romkatv/powerlevel10k/issues/251). - -### Prompt wrapping around in a weird way - -See [cursor is in the wrong place](#cursor-is-in-the-wrong-place). - -### Right prompt is in the wrong place - -See [cursor is in the wrong place](#cursor-is-in-the-wrong-place). - -### Configuration wizard runs automatically every time Zsh is started - -When Powerlevel10k starts, it automatically runs `p10k configure` if no `POWERLEVEL9K_*` -parameters are defined. Based on your prompt style choices, the configuration wizard creates -`~/.p10k.zsh` with a bunch of `POWERLEVEL9K_*` parameters in it and adds a line to `~/.zshrc` to -source this file. The next time you start Zsh, the configuration wizard shouldn't run automatically. -If it does, this means the evaluation of `~/.zshrc` terminates prematurely before it reaches the -line that sources `~/.p10k.zsh`. This most often happens due to syntax errors in `~/.zshrc`. These -errors get hidden by the configuration wizard screen, so you don't notice them. When you exit -configuration wizard, look for error messages. You can also use -`POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true zsh` to start Zsh without automatically running the -configuration wizard. Once you can see the errors, fix `~/.zshrc` to get rid of them. - -### Some prompt styles are missing from the configuration wizard - -If Zsh version is below 5.7.1 or `COLORTERM` environment variable is neither `24bit` nor -`truecolor`, configuration wizard won't offer Pure style with Snazzy color scheme. *Fix*: Install -Zsh >= 5.7.1 and use a terminal with truecolor support. Verify with `print -P '%F{#ff0000}red%f'`. - -If the terminal can display fewer than 256 colors, configuration wizard preselects Lean style with -8 colors. All other styles require at least 256 colors. *Fix*: Use a terminal with 256 color support -and make sure that `TERM` environment variable is set correctly. Verify with -`print $terminfo[colors]`. - -If there is no UTF-8 locale on the system, configuration wizard won't offer prompt styles that use -Unicode characters. *Fix*: Install a UTF-8 locale. Verify with `locale -a`. - -When a UTF-8 locale is available, the first few questions asked by the configuration wizard assess -capabilities of the terminal font. If your answers indicate that some glyphs don't render correctly, -configuration wizard won't offer prompt styles that use them. *Fix*: Restart your terminal and -install [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k). Verify by running -`p10k configure` and checking that all glyphs render correctly. - -### Cannot install the recommended font - -Once you download [the recommended font](#meslo-nerd-font-patched-for-powerlevel10k), -you can install it just like any other font. Google "how to install fonts on *your OS*". - -### Extra or missing spaces in prompt compared to Powerlevel9k - -tl;dr: Add `ZLE_RPROMPT_INDENT=0` and `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get -the same prompt spacing as in Powerlevel9k. - -When using Powerlevel10k with a Powerlevel9k config, you might get additional spaces in prompt here -and there. These come in two flavors. - -#### Extra space without background on the right side of right prompt - -tl;dr: Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get rid of that space. - -From [Zsh documentation]( - http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-ZLE_005fRPROMPT_005fINDENT): - -> `ZLE_RPROMPT_INDENT ` -> -> If set, used to give the indentation between the right hand side of the right prompt in the line -> editor as given by `RPS1` or `RPROMPT` and the right hand side of the screen. If not set, the -> value `1` is used. -> -> Typically this will be used to set the value to `0` so that the prompt appears flush with the -> right hand side of the screen. - -Powerlevel10k respects this parameter. If you set `ZLE_RPROMPT_INDENT=1` (or leave it unset, which -is the same thing as setting it to `1`), you'll get an empty space to the right of right prompt. If -you set `ZLE_RPROMPT_INDENT=0`, your prompt will go to the edge of the terminal. This is how it -works in every theme except Powerlevel9k. - -![ZLE_RPROMPT_INDENT: Powerlevel10k vs Powerlevel9k]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/p9k-vs-p10k-zle-rprompt-indent.png) - -Powerlevel9k issue: [powerlevel9k#1292](https://github.com/Powerlevel9k/powerlevel9k/issues/1292). -It's been fixed in the development branch of Powerlevel9k but the fix hasn't yet made it to -`master`. - -Add `ZLE_RPROMPT_INDENT=0` to `~/.zshrc` to get the same spacing on the right edge of prompt as in -Powerlevel9k. - -*Note:* Several versions of Zsh have bugs that get triggered when you set `ZLE_RPROMPT_INDENT=0`. -Powerlevel10k can work around these bugs when using powerline prompt style. If you notice visual -artifacts in prompt, or wrong cursor position, try removing `ZLE_RPROMPT_INDENT` from `~/.zshrc`. - -#### Extra or missing spaces around icons - -tl;dr: Add `POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around -icons as in Powerlevel9k. - -Spacing around icons in Powerlevel9k is inconsistent. - -![ZLE_RPROMPT_INDENT: Powerlevel10k vs Powerlevel9k]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/p9k-vs-p10k-icon-spacing.png) - -This inconsistency is a constant source of annoyance, so it was fixed in Powerlevel10k. You can add -`POWERLEVEL9K_LEGACY_ICON_SPACING=true` to `~/.zshrc` to get the same spacing around icons as in -Powerlevel9k. - -*Note:* It's not a good idea to define `POWERLEVEL9K_LEGACY_ICON_SPACING` when using -`p10k configure`. - -### Weird things happen after typing `source ~/.zshrc` - -It's almost always a bad idea to run `source ~/.zshrc`, whether you are using Powerlevel10k or not. -This command may result in random errors, misbehaving code and progressive slowdown of Zsh. - -If you've made changes to `~/.zshrc` or to files sourced by it, restart Zsh to apply them. The most -reliable way to do this is to type `exit` and then start a new Zsh session. You can also use -`exec zsh`. While not exactly equivalent to complete Zsh restart, this command is much more reliable -than `source ~/.zshrc`. - -### Transient prompt stops working after some time - -See [weird things happen after typing `source ~/.zshrc`]( - #weird-things-happen-after-typing-source-zshrc). - -### Cannot make Powerlevel10k work with my plugin manager - -If the [installation instructions](#installation) didn't work for you, try disabling your current -theme (so that you end up with no theme) and then installing Powerlevel10k manually. - -1. Disable the current theme in your framework / plugin manager. - -- **oh-my-zsh:** Open `~/.zshrc` and remove the line that sets `ZSH_THEME`. It might look like this: - `ZSH_THEME="powerlevel9k/powerlevel9k"`. -- **zplug:** Open `~/.zshrc` and remove the `zplug` command that refers to your current theme. For - example, if you are currently using Powerlevel9k, look for - `zplug bhilburn/powerlevel9k, use:powerlevel9k.zsh-theme`. -- **prezto:** Open `~/.zpreztorc` and put `zstyle :prezto:module:prompt theme off` in it. Remove - any other command that sets `theme` such as `zstyle :prezto:module:prompt theme powerlevel9k`. -- **antigen:** Open `~/.zshrc` and remove the line that sets `antigen theme`. It might look like - this: `antigen theme powerlevel9k/powerlevel9k`. - -2. Install Powerlevel10k manually. - -```zsh -git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k -echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc -``` - -This method of installation won't make anything slower or otherwise sub-par. - -### Directory is difficult to see in prompt when using Rainbow style - -In Rainbow style the current working directory is shown with bright white text on blue background. -The white is fixed and always looks the same but the appearance of "blue" is defined by your -terminal color palette. If it's very light, it may be difficult to see white text on it. - -There are several ways to fix this. - -- Type `p10k configure` and choose a more readable prompt style. -- [Change terminal color palette](#change-the-color-palette-used-by-your-terminal). Try Tango Dark - or Solarized Dark, or change just the "blue" color. -- [Change directory background and/or foreground color](#set-colors-through-Powerlevel10k-configuration-parameters). - The parameters you are looking for are called `POWERLEVEL9K_DIR_BACKGROUND`, - `POWERLEVEL9K_DIR_FOREGROUND`, `POWERLEVEL9K_DIR_SHORTENED_FOREGROUND`, - `POWERLEVEL9K_DIR_ANCHOR_FOREGROUND` and `POWERLEVEL9K_DIR_ANCHOR_BOLD`. You can find them in - `~/.p10k.zsh`. - -### Horrific mess when resizing terminal window - -When you resize a terminal window horizontally back and forth a few times, you might see this ugly -picture. - -![Powerlevel10k Resizing Mess]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resizing-mess.png) - -tl;dr: This issue arises when a terminal reflows Zsh prompt upon resizing. It isn't specific to -Powerlevel10k. See [mitigation](#mitigation). - -*Note: This section [used to say]( - https://github.com/romkatv/powerlevel10k/blob/dce00cdb5daaa8a519df234a7012ba3257b644d4/README.md#horrific-mess-when-resizing-terminal-window) -that the problem is caused by a bug in Zsh. While it's true that it's possible to avoid the problem -in many circumstances by modifying Zsh, it cannot be completely resolved this way. Thus it's unfair -to pin the blame on Zsh.* - -#### The anatomy of the problem - -The issue is manifested when the vertical distance between the start of the current prompt and the -cursor (henceforth `VD`) changes when the terminal window is resized. - -When a terminal window gets shrunk horizontally, there are two ways for a terminal to handle long -lines that no longer fit: *reflow* or *truncate*. - -Terminal content before shrinking: - -![Terminal Content Before Shrinking]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-original.png) - -Terminal reflows text when shrinking: - -![Terminal Reflows Text When Shrinking]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-reflow.png) - -Terminal truncates text when shrinking: - -![Terminal Truncates Text When Shrinking]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-truncate.png) - -Reflowing strategy can change the height of terminal content. If such content happens to be between -the start of the current prompt and the cursor, Zsh will print prompt on the wrong line. Truncation -strategy never changes the height of terminal content, so it doesn't trigger this issue. - -Let's see how the issue plays out in slow motion. We'll start by launching `zsh -f` and pasting -the following code: - -```zsh -function pause() { read -s } -functions -M pause 0 - -reset -print -l {1..3} -setopt prompt_subst -PROMPT=$'${$((pause()))+}left>${(pl.$((COLUMNS-12))..-.)} ' -``` - -When `PROMPT` gets expanded, it calls `pause` to let us observe the state of the terminal. Here's -the initial state: - -![Terminal Resizing Bug 1]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-1.png) - -Zsh keeps track of the cursor position relative to the start of the current prompt. In this case it -knows that the cursor is one line below. When we shrink the terminal window, it looks like this: - -![Terminal Resizing Bug 2]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-2.png) - -At this point the terminal sends `SIGWINCH` to Zsh to notify it about changes in the terminal -dimensions. Note that this signal is sent *after* the content of the terminal has been reflown. - -When Zsh receives `SIGWINCH`, it attempts to erase the current prompt and print it anew. It goes to -the position where it *thinks* the current prompt is -- one line above the cursor (!) -- erases all -terminal content that follows and prints reexpanded prompt there. However, after resizing prompt is -no longer one line above the cursor. It's two lines above! Zsh ends up printing new prompt one line -too low. - -![Terminal Resizing Bug 3]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-bug-3.png) - -In this case we ended up with unwanted junk content because `VD` has *increased*. When you make -terminal window wider, `VD` can also *decrease*, which would result in the new prompt being printed -higher than intended, potentially erasing useful content in the process. - -Here are a few more examples where shrinking terminal window increased `VD`. - -- Simple one-line left prompt with right prompt. No `prompt_subst`. Note that the cursor is below - the prompt line (hit *ESC-ENTER* to get it there). - ![Zsh Prompt That Breaks on Terminal Shrinking 1]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-breakable-1.png) -- Simple one-line left prompt. No `prompt_subst`, no right prompt. Here `VD` is bound to increase - upon terminal shrinking due to the command line wrapping around. - ![Zsh Prompt That Breaks on Terminal Shrinking 2]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/resize-breakable-2.png) - -#### Zsh patch - -[This Zsh patch](https://github.com/romkatv/zsh/tree/fix-winchanged) fixes the issue on some -terminals. The idea behind the patch is to use `sc` (save cursor) terminal capability before -printing prompt and `rc` (restore cursor) to move cursor back to the original position when prompt -needs to be refreshed. - -The patch works only on terminals that reflow saved cursor position together with text when the -terminal window is resized. The patch has no observable effect on terminals that don't reflow text -on resize (both patched and unpatched Zsh behave correctly) and on terminals that reflow text but -not the saved cursor position (both patched and unpatched Zsh redraw prompt at the same incorrect -position). In other words, the patch fixes the resizing issue on some terminals while keeping the -behavior unchanged on others. - -There are two alternative approaches to patching Zsh that may seem to work at first glance but in -fact don't: - -- Instead of `sc`, use `u7` terminal capability to query the current cursor position and then `cup` - to go back to it. This doesn't work because the absolute position of the start of the current - prompt changes when text gets reflown. -- Recompute `VD` based on new terminal dimensions before attempting to refresh prompt. This doesn't - work because Zsh doesn't know whether terminal reflows text or truncates it. If Zsh could somehow - know that the terminal reflows text, this approach still wouldn't work on terminals that - continuously reflow text and rapid-fire `SIGWINCH` when the window is being resized. In such - environment real terminal dimensions go out of sync with what Zsh thinks the dimensions are. - -There is no ETA for the patch making its way into upstream Zsh. See [discussion]( - https://www.zsh.org/mla/workers//2019/msg00561.html). - -#### Mitigation - -There are a few mitigation options for this issue. - -- Use [kitty](https://sw.kovidgoyal.net/kitty/) terminal version >= 0.24.0 and enable terminal-shell - integration in Powerlevel10k by defining `POWERLEVEL9K_TERM_SHELL_INTEGRATION=true` in - `~/.p10k.zsh`. -- Apply [the patch](#zsh-patch) and [rebuild Zsh from source]( - https://github.com/zsh-users/zsh/blob/master/INSTALL). It won't help if you are using Alacritty, - kitty or some other terminal that reflows text on resize but doesn't reflow saved cursor position. - On such terminals the patch will have no visible effect. -- Disable text reflowing on window resize in terminal settings. If your terminal doesn't have this - setting, try a different terminal. -- Avoid long lines between the start of prompt and cursor. - 1. Disable ruler with `POWERLEVEL9K_SHOW_RULER=false`. - 2. Disable prompt connection with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '`. - 3. Disable right frame with `POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=''`, - `POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=''` and - `POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=''`. - 4. Set `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()`. Right prompt on the last prompt line will cause - resizing issues only when the cursor is below it. This isn't very common, so you might want to - keep some elements in `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS` provided that none of them are - succeeded by `newline`. - -### Icons cut off in Konsole - -When using Konsole with a non-monospace font, icons may be cut off on the right side. Here -"non-monospace" refers to any font with glyphs wider than a single column, or wider than two columns -for glyphs designated as "wide" in the Unicode standard. - -![Icons cut off in Konsole]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/konsole-non-monospace-font.png) - -The last line on the screenshot shows a cut off Arch Linux logo. - -There are several mitigation options for this issue. - -1. Use a different terminal. Konsole is the only terminal that exhibits this behavior. -2. Use a monospace font. -3. Manually add an extra space after the icon that gets cut off. For example, if the content of - `os_icon` prompt segment gets cut off, open `~/.p10k.zsh`, search for - `POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and change it as follows: -```zsh -typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT} ' # extra space at the end -``` -4. Use a different icon that is monospace. For example, if Arch Linux logo gets cut off, add - the following parameter to `~/.p10k.zsh`: -```zsh -typeset -g POWERLEVEL9K_LINUX_ARCH_ICON='Arch' # plain "Arch" in place of a logo -``` -5. Disable the display of the icon that gets cut off. For example, if the content of - `os_icon` prompt segment gets cut off, open `~/.p10k.zsh` and remove `os_icon` from - `POWERLEVEL9K_LEFT_PROMPT_ELEMENTS` and `POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS`. - -*Note*: [Non-monospace fonts are not officially supported by Konsole]( - https://bugs.kde.org/show_bug.cgi?id=418553#c5). - -### Arch Linux logo has a dot in the bottom right corner - -![Arch Linux Logo with a dot]( - https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/arch-linux-logo-dot.png) - -Some fonts have this incorrect dotted icon in bold typeface. There are two ways to fix this issue. - -1. Use a font with a correct Arch Linux logo in bold typeface. For example, - [the recommended Powerlevel10k font](#meslo-nerd-font-patched-for-powerlevel10k). -2. Display the icon in regular (non-bold) typeface. To do this, open `~/.p10k.zsh`, search for - `POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION` and remove `%B` from its value. -```zsh -typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT}' # not bold -``` diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh deleted file mode 100644 index 441be2c..0000000 --- a/airootfs/etc/skel/powerlevel10k/config/p10k-classic.zsh +++ /dev/null @@ -1,1667 +0,0 @@ -# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate -# your own config based on it. -# -# Tip: Looking for a nice color? Here's a one-liner to print colormap. -# -# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. This allows you to apply configuration changes without - # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return - - # The list of segments shown on the left. Fill it with the most important segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - # os_icon # os identifier - dir # current directory - vcs # git status - # =========================[ Line #2 ]========================= - newline # \n - # prompt_char # prompt symbol - ) - - # The list of segments shown on the right. Fill it with less important segments. - # Right prompt on the last prompt line (where you are typing your commands) gets - # automatically hidden when the input line reaches it. Right prompt above the - # last prompt line gets hidden if it would overlap with left prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - status # exit code of the last command - command_execution_time # duration of the last command - background_jobs # presence of background jobs - direnv # direnv status (https://direnv.net/) - asdf # asdf version manager (https://github.com/asdf-vm/asdf) - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) - anaconda # conda environment (https://conda.io/) - pyenv # python environment (https://github.com/pyenv/pyenv) - goenv # go environment (https://github.com/syndbg/goenv) - nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) - nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) - nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) - # node_version # node.js version - # go_version # go version (https://golang.org) - # rust_version # rustc version (https://www.rust-lang.org) - # dotnet_version # .NET version (https://dotnet.microsoft.com) - # php_version # php version (https://www.php.net/) - # laravel_version # laravel php framework version (https://laravel.com/) - # java_version # java version (https://www.java.com/) - # package # name@version from package.json (https://docs.npmjs.com/files/package.json) - rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) - rvm # ruby version from rvm (https://rvm.io) - fvm # flutter version management (https://github.com/leoafarias/fvm) - luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) - jenv # java version from jenv (https://github.com/jenv/jenv) - plenv # perl version from plenv (https://github.com/tokuhirom/plenv) - perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) - phpenv # php version from phpenv (https://github.com/phpenv/phpenv) - scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) - haskell_stack # haskell version from stack (https://haskellstack.org/) - kubecontext # current kubernetes context (https://kubernetes.io/) - terraform # terraform workspace (https://www.terraform.io) - # terraform_version # terraform version (https://www.terraform.io) - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) - aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) - gcloud # google cloud cli account and project (https://cloud.google.com/) - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) - toolbox # toolbox name (https://github.com/containers/toolbox) - context # user@hostname - nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) - ranger # ranger shell (https://github.com/ranger/ranger) - nnn # nnn shell (https://github.com/jarun/nnn) - lf # lf shell (https://github.com/gokcehan/lf) - xplr # xplr shell (https://github.com/sayanarijit/xplr) - vim_shell # vim shell indicator (:sh) - midnight_commander # midnight commander shell (https://midnight-commander.org/) - nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) - # vi_mode # vi mode (you don't need this if you've enabled prompt_char) - # vpn_ip # virtual private network indicator - # load # CPU load - # disk_usage # disk usage - # ram # free RAM - # swap # used swap - todo # todo items (https://github.com/todotxt/todo.txt-cli) - timewarrior # timewarrior tracking status (https://timewarrior.net/) - taskwarrior # taskwarrior task count (https://taskwarrior.org/) - # cpu_arch # CPU architecture - # time # current time - # =========================[ Line #2 ]========================= - newline # \n - # ip # ip address and bandwidth usage for a specified network interface - # public_ip # public IP address - # proxy # system-wide http/https/ftp proxy - # battery # internal battery - # wifi # wifi speed - # example # example user-defined segment (see prompt_example function below) - ) - - # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. - typeset -g POWERLEVEL9K_MODE=nerdfont-complete - # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid - # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. - typeset -g POWERLEVEL9K_ICON_PADDING=none - - # When set to true, icons appear before content on both sides of the prompt. When set - # to false, icons go after content. If empty or not set, icons go before content in the left - # prompt and after content in the right prompt. - # - # You can also override it for a specific segment: - # - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false - # - # Or for a specific segment in specific state: - # - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= - - # Add an empty line before each prompt. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Connect left prompt lines with these symbols. You'll probably want to use the same color - # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' - # Connect right prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%242F─╮' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%242F─┤' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%242F─╯' - - # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or - # '─'. The last two make it easier to see the alignment between left and right prompt and to - # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false - # for more compact prompt if using this option. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then - # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE - # ornaments defined above. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 - # Start filler from the edge of the screen if there are no left segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' - # End filler on the edge of the screen if there are no right segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' - fi - - # Default background color. - typeset -g POWERLEVEL9K_BACKGROUND=238 - - # Separator between same-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%246F\uE0B1' - # Separator between same-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%246F\uE0B3' - # Separator between different-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' - # Separator between different-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' - # The right end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' - # The left end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' - # The left end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # The right end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= - # Left prompt terminator for lines without any segments. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - - #################################[ os_icon: os identifier ]################################## - # OS identifier color. - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 - # Custom icon. - # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' - - ################################[ prompt_char: prompt symbol ]################################ - # Transparent background. - typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' - # Prompt symbol in overwrite vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true - # No line terminator if prompt_char is the last segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - # No line introducer if prompt_char is the first segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # No surrounding whitespace. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= - - ##################################[ dir: current directory ]################################## - # Default current directory color. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 - # If directory is too long, shorten some of its segments to the shortest possible unique - # prefix. The shortened directory can be tab-completed to the original. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique - # Replace removed segment suffixes with this symbol. - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= - # Color of the shortened directory segments. - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 - # Color of the anchor directory segments. Anchor segments are never shortened. The first - # segment is always an anchor. - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 - # Display anchor directory segments in bold. - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true - # Don't shorten directories that contain any of these files. They are anchors. - local anchor_files=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .go-version - .ruby-version - .lua-version - .java-version - .perl-version - .php-version - .tool-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - stack.yaml - ) - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" - # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains - # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is - # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) - # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers - # and other directories don't. - # - # Optionally, "first" and "last" can be followed by ":" where is an integer. - # This moves the truncation point to the right (positive offset) or to the left (negative offset) - # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" - # respectively. - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false - # Don't shorten this many last directory segments. They are anchors. - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - # Shorten directory if it's longer than this even if there is space for it. The value can - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, - # directory will be shortened only when prompt doesn't fit or when other parameters demand it - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). - # If set to `0`, directory will always be shortened to its minimum length. - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this - # many columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 - # If set to true, embed a hyperlink into the directory. Useful for quickly - # opening a directory in the file manager simply by clicking the link. - # Can also be handy when the directory is shortened, as it allows you to see - # the full directory that was used in previous commands. - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false - - # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON - # and POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 - - # The default icon shown next to non-writable and non-existent directories when - # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. - # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' - - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different - # directories. It must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. An empty string. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. - # - # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories - # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=( - # '~/work(|/*)' WORK '' - # '~(|/*)' HOME '' - # '*' DEFAULT '') - # - # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one - # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or - # WORK_NON_EXISTENT. - # - # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an - # option to define custom colors and icons for different directory classes. - # - # # Styling for WORK. - # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NOT_WRITABLE. - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NON_EXISTENT. - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 - # - # If a styling parameter isn't explicitly defined for some class, it falls back to the classless - # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls - # back to POWERLEVEL9K_DIR_FOREGROUND. - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=() - - # Custom prefix. - # typeset -g POWERLEVEL9K_DIR_PREFIX='%248Fin ' - - #####################################[ vcs: git status ]###################################### - # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= - - # Untracked files icon. It's really a question mark, your font isn't broken. - # Change the value of this parameter to show a different icon. - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' - - # Formatter for Git status. - # - # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. - # - # You can edit the function to customize how Git status looks. - # - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - function my_git_formatter() { - emulate -L zsh - - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - return - fi - - if (( $1 )); then - # Styling for up-to-date Git status. - local meta='%248F' # grey foreground - local clean='%76F' # green foreground - local modified='%178F' # yellow foreground - local untracked='%39F' # blue foreground - local conflicted='%196F' # red foreground - else - # Styling for incomplete and stale Git status. - local meta='%244F' # grey foreground - local clean='%244F' # grey foreground - local modified='%244F' # grey foreground - local untracked='%244F' # grey foreground - local conflicted='%244F' # grey foreground - fi - - local res - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=${(V)VCS_STATUS_LOCAL_BRANCH} - # If local branch name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show local branch name in full without truncation, delete the next line. - (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line - res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" - fi - - if [[ -n $VCS_STATUS_TAG - # Show tag only if not on a branch. - # Tip: To always show tag, delete the next line. - && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line - ]]; then - local tag=${(V)VCS_STATUS_TAG} - # If tag name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show tag name in full without truncation, delete the next line. - (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line - res+="${meta}#${clean}${tag//\%/%%}" - fi - - # Display the current Git commit if there is no branch and no tag. - # Tip: To always display the current Git commit, delete the next line. - [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line - res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" - - # Show tracking branch name if it differs from local branch. - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - - # Display "wip" if the latest commit's summary contains "wip" or "WIP". - if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then - res+=" ${modified}wip" - fi - - # ⇣42 if behind the remote. - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" - # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" - # ⇠42 if behind the push remote. - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " - # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" - # *42 if have stashes. - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" - # 'merge' if the repo is in an unusual state. - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" - # ~42 if have merge conflicts. - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" - # +42 if have staged changes. - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" - # !42 if have unstaged changes. - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" - # ?42 if have untracked files. It's really a question mark, your font isn't broken. - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. - # Remove the next line if you don't want to see untracked files at all. - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" - # "─" if the number of unstaged files is unknown. This can happen due to - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower - # than the number of files in the Git index, or due to bash.showDirtyState being set to false - # in the repository config. The number of staged and untracked files may also be unknown - # in this case. - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" - - typeset -g my_git_format=$res - } - functions -M my_git_formatter 2>/dev/null - - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with - # more than this many files in the index. Negative value means infinity. - # - # If you are working in Git repositories with tens of millions of files and seeing performance - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's - # config: `git config bash.showDirtyState false`. - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 - - # Don't show Git status in prompt for repositories whose workdir matches this pattern. - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. - # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' - typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' - # Enable counters for staged, unstaged, etc. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 - - # Icon color. - typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 - typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 - # Custom icon. - # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_VCS_PREFIX='%248Fon ' - - # Show status of repositories of these types. You can add svn and/or hg if you are - # using them. If you do, your prompt may become slow even when your current directory - # isn't in an svn or hg reposotiry. - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) - - # These settings are used for repositories other than Git or when gitstatusd fails and - # Powerlevel10k has to fall back to using vcs_info. - typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 - - ##########################[ status: exit code of the last command ]########################### - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and - # style them independently from the regular OK and ERROR state. - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true - - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as - # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=true - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when some part of a pipe command fails but the overall exit status is zero. It may look - # like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as - # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=true - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when the last command was terminated by a signal. - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 - # Use terse signal names: "INT" instead of "SIGINT(2)". - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when some part of a pipe command fails and the overall exit status is also non-zero. - # It may look like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - - ###################[ command_execution_time: duration of the last command ]################### - # Show duration of the last command if takes at least this many seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 - # Show this many fractional digits. Zero means round to seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Execution time color. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Custom icon. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%248Ftook ' - - #######################[ background_jobs: presence of background jobs ]####################### - # Don't show the number of background jobs. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false - # Background jobs color. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 - # Custom icon. - # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ direnv: direnv status (https://direnv.net/) ]######################## - # Direnv color. - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### - # Default asdf color. Only used to display tools for which there is no color override (see below). - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 - - # There are four parameters that can be used to hide asdf tools. Each parameter describes - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to - # hide a tool, it gets shown. - # - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: - # - # asdf local python 3.8.1 - # asdf global python 3.8.1 - # - # After running both commands the current python version is 3.8.1 and its source is "local" as - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, - # it'll hide python version in this case because 3.8.1 is the same as the global version. - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't - # contain "local". - - # Hide tool versions that don't come from one of these sources. - # - # Available sources: - # - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" - # - local `asdf current` says "set by /some/not/home/directory/file" - # - global `asdf current` says "set by /home/username/file" - # - # Note: If this parameter is set to (shell local global), it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) - - # If set to false, hide tool versions that are the same as global. - # - # Note: The name of this parameter doesn't reflect its meaning at all. - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false - - # If set to false, hide tool versions that are equal to "system". - # - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true - - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern - # in the current directory, or its parent directory, or its grandparent directory, and so on. - # - # Note: If this parameter is set to empty value, it won't hide tools. - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. - # - # Example: Hide nodejs version when there is no package.json and no *.js files in the current - # directory, in `..`, in `../..` and so on. - # - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= - - # Ruby version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Python version from asdf. - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Go version from asdf. - typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Node.js version from asdf. - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Rust version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' - - # .NET Core version from asdf. - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Flutter version from asdf. - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Lua version from asdf. - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Java version from asdf. - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Perl version from asdf. - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Erlang version from asdf. - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Elixir version from asdf. - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Postgres version from asdf. - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' - - # PHP version from asdf. - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Haskell version from asdf. - typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 - # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Julia version from asdf. - typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' - - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### - # NordVPN connection indicator color. - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 - # Hide NordVPN connection indicator when not connected. - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= - # Custom icon. - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## - # Ranger shell color. - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### - # Nnn shell color. - typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### - # lf shell color. - typeset -g POWERLEVEL9K_LF_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## - # xplr shell color. - typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### - # Vim shell indicator color. - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 - # Custom icon. - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### - # Midnight Commander shell color. - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## - # Nix shell color. - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 - - # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. - # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false - - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ disk_usage: disk usage ]################################## - # Colors for different levels of disk usage. - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 - # Thresholds for different levels of disk usage (percentage points). - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false - # Custom icon. - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### - # Text and color for normal (a.k.a. command) vi mode. - typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL - typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 - # Text and color for visual vi mode. - typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL - typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 - # Text and color for overtype (a.k.a. overwrite and replace) vi mode. - typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE - typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 - # Text and color for insert vi mode. - typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= - typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 - - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ ram: free RAM ]####################################### - # RAM color. - typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 - # Custom icon. - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################################[ swap: used swap ]###################################### - # Swap color. - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 - # Custom icon. - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ load: CPU load ]###################################### - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. - typeset -g POWERLEVEL9K_LOAD_WHICH=5 - # Load color when load is under 50%. - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 - # Load color when load is between 50% and 70%. - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 - # Load color when load is over 70%. - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 - # Custom icon. - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ - # Todo color. - typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 - # Hide todo when the total number of tasks is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true - # Hide todo when the number of tasks after filtering is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false - - # Todo format. The following parameters are available within the expansion. - # - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. - # - # These variables correspond to the last line of the output of `todo.sh -p ls`: - # - # TODO: 24 of 42 tasks shown - # - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. - # - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ - # Timewarrior color. - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 - # If the tracked task is longer than 24 characters, truncate and append "…". - # Tip: To always display tasks without truncation, delete the following parameter. - # Tip: To hide task names and display just the icon when time tracking is enabled, set the - # value of the following parameter to "". - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' - - # Custom icon. - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## - # Taskwarrior color. - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 - - # Taskwarrior segment format. The following parameters are available within the expansion. - # - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. - # - # Zero values are represented as empty parameters. - # - # The default format: - # - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' - # - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ cpu_arch: CPU architecture ]################################ - # CPU architecture color. - typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 - - # Hide the segment when on a specific CPU architecture. - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ context: user@hostname ]################################## - # Context color when running with privileges. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 - # Context color in SSH without privileges. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 - # Default context color (no privileges, no SSH). - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 - - # Context format when running with privileges: bold user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' - # Context format when in SSH without privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' - # Default context format (no privileges, no SSH): user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' - - # Don't show context unless running with privileges or in SSH. - # Tip: Remove the next line to always show context. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%248Fwith ' - - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### - # Python virtual environment color. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 - # Don't show Python version next to the virtual environment name. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - # If set to "false", won't show virtualenv if pyenv is already shown. - # If set to "if-different", won't show virtualenv if it's the same as pyenv. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false - # Separate environment name from Python version only with a space. - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ anaconda: conda environment (https://conda.io/) ]###################### - # Anaconda environment color. - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 - - # Anaconda segment format. The following parameters are available within the expansion. - # - # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. - # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. - # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). - # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). - # - # CONDA_PROMPT_MODIFIER can be configured with the following command: - # - # conda config --set env_prompt '({default_env}) ' - # - # The last argument is a Python format string that can use the following variables: - # - # - prefix The same as CONDA_PREFIX. - # - default_env The same as CONDA_DEFAULT_ENV. - # - name The last segment of CONDA_PREFIX. - # - stacked_env Comma-separated list of names in the environment stack. The first element is - # always the same as default_env. - # - # Note: '({default_env}) ' is the default value of env_prompt. - # - # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER - # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former - # is empty. - typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' - - # Custom icon. - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ - # Pyenv color. - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 - # Hide python version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) - # If set to false, hide python version if it's the same as global: - # $(pyenv version-name) == $(pyenv global). - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide python version if it's equal to "system". - typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true - - # Pyenv segment format. The following parameters are available within the expansion. - # - # - P9K_CONTENT Current pyenv environment (pyenv version-name). - # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). - # - # The default format has the following logic: - # - # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or - # starts with "$P9K_PYENV_PYTHON_VERSION/". - # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". - typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ - # Goenv color. - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 - # Hide go version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) - # If set to false, hide go version if it's the same as global: - # $(goenv version-name) == $(goenv global). - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide go version if it's equal to "system". - typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## - # Nodenv color. - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 - # Hide node version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) - # If set to false, hide node version if it's the same as global: - # $(nodenv version-name) == $(nodenv global). - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide node version if it's equal to "system". - typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### - # Nvm color. - typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ - # Nodeenv color. - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 - # Don't show Node version next to the environment name. - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false - # Separate environment name from Node version only with a space. - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############################[ node_version: node.js version ]############################### - # Node version color. - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 - # Show node version only when in a directory tree containing package.json. - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ go_version: go version (https://golang.org) ]######################## - # Go version color. - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 - # Show go version only when in a go project subdirectory. - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## - # Rust version color. - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 - # Show rust version only when in a rust project subdirectory. - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ - # .NET version color. - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 - # Show .NET version only when in a .NET project subdirectory. - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ php_version: php version (https://www.php.net/) ]###################### - # PHP version color. - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 - # Show PHP version only when in a PHP project subdirectory. - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### - # Laravel version color. - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 - # Custom icon. - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ####################[ java_version: java version (https://www.java.com/) ]#################### - # Java version color. - typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 - # Show java version only when in a java project subdirectory. - typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true - # Show brief version. - typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false - # Custom icon. - # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### - # Package color. - typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 - # Package format. The following parameters are available within the expansion. - # - # - P9K_PACKAGE_NAME The value of `name` field in package.json. - # - P9K_PACKAGE_VERSION The value of `version` field in package.json. - # - # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' - # Custom icon. - # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## - # Rbenv color. - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 - # Hide ruby version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) - # If set to false, hide ruby version if it's the same as global: - # $(rbenv version-name) == $(rbenv global). - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide ruby version if it's equal to "system". - typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## - # Rvm color. - typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 - # Don't show @gemset at the end. - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false - # Don't show ruby- at the front. - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ - # Fvm color. - typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### - # Lua color. - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 - # Hide lua version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) - # If set to false, hide lua version if it's the same as global: - # $(luaenv version-name) == $(luaenv global). - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide lua version if it's equal to "system". - typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ - # Java color. - typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 - # Hide java version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) - # If set to false, hide java version if it's the same as global: - # $(jenv version-name) == $(jenv global). - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide java version if it's equal to "system". - typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ - # Perl color. - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 - # Hide perl version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) - # If set to false, hide perl version if it's the same as global: - # $(plenv version-name) == $(plenv global). - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide perl version if it's equal to "system". - typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ - # Perlbrew color. - typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 - # Show perlbrew version only when in a perl project subdirectory. - typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true - # Don't show "perl-" at the front. - typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ - # PHP color. - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 - # Hide php version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) - # If set to false, hide php version if it's the same as global: - # $(phpenv version-name) == $(phpenv global). - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide php version if it's equal to "system". - typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### - # Scala color. - typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 - # Hide scala version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) - # If set to false, hide scala version if it's the same as global: - # $(scalaenv version-name) == $(scalaenv global). - typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide scala version if it's equal to "system". - typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### - # Haskell color. - typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 - # Hide haskell version if it doesn't come from one of these sources. - # - # shell: version is set by STACK_YAML - # local: version is set by stack.yaml up the directory tree - # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) - typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) - # If set to false, hide haskell version if it's the same as in the implicit global project. - typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true - # Custom icon. - # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# - # Don't show terraform workspace if it's literally "default". - typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current terraform workspace gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' OTHER) - # - # If your current terraform workspace is "project_test", its class is TEST because "project_test" - # doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' OTHER) - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ terraform_version: terraform version (https://www.terraform.io) ]############## - # Terraform version color. - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# - # Show kubecontext only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show kubecontext. - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' - - # Kubernetes context classes for the purpose of using different colors, icons and expansions with - # different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current kubernetes context gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current kubernetes context is "deathray-testing/default", its class is TEST - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 - # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext - # segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # Within the expansion the following parameters are always available: - # - # - P9K_CONTENT The content that would've been displayed if there was no content - # expansion defined. - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE - # in the output of `kubectl config get-contexts`. If there is no - # namespace, the parameter is set to "default". - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the - # output of `kubectl config get-contexts`. - # - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), - # the following extra parameters are available: - # - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. - # - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=gke - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - # - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=eks - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' - # Append the current context's namespace if it's not "default". - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' - - # Custom prefix. - # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%248Fat ' - - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# - # Show aws only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show aws. - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' - - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current AWS profile gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current AWS profile is "company_test", its class is TEST - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # AWS segment format. The following parameters are available within the expansion. - # - # - P9K_AWS_PROFILE The name of the current AWS profile. - # - P9K_AWS_REGION The region associated with the current AWS profile. - typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' - - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# - # AWS Elastic Beanstalk environment color. - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## - # Show azure only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show azure. - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' - # Azure account name color. - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 - # Custom icon. - # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### - # Show gcloud only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show gcloud. - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' - # Google cloud color. - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 - - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or - # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative - # enough. You can use the following parameters in the expansions. Each of them corresponds to the - # output of `gcloud` tool. - # - # Parameter | Source - # -------------------------|-------------------------------------------------------------------- - # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' - # P9K_GCLOUD_ACCOUNT | gcloud config get-value account - # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project - # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. - # - # Obtaining project name requires sending a request to Google servers. This can take a long time - # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud - # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets - # set and gcloud prompt segment transitions to state COMPLETE. - # - # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL - # and COMPLETE. You can also hide gcloud in state PARTIAL by setting - # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and - # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. - typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' - typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' - - # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name - # this often. Negative value disables periodic polling. In this mode project name is retrieved - # only when the current configuration, account or project id changes. - typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 - - # Custom icon. - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# - # Show google_app_cred only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show google_app_cred. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' - - # Google application credentials classes for the purpose of using different colors, icons and - # expansions with different credentials. - # - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first - # element in each pair defines a pattern against which the current kubernetes context gets - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION - # parameters, you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. - # The first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD - # '*:*test*:*' TEST - # '*' DEFAULT) - # - # If your current Google application credentials is "service_account deathray-testing x@y.com", - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD # These values are examples that are unlikely - # '*:*test*:*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # You can use the following parameters in the expansion. Each of them corresponds to one of the - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. - # - # Parameter | JSON key file field - # ---------------------------------+--------------- - # P9K_GOOGLE_APP_CRED_TYPE | type - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' - - ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### - # Toolbox color. - typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 - # Don't display the name of the toolbox if it matches fedora-toolbox-*. - typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' - # Custom icon. - # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%248Fin ' - - ###############################[ public_ip: public IP address ]############################### - # Public IP color. - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 - # Custom icon. - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ########################[ vpn_ip: virtual private network indicator ]######################### - # VPN IP color. - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 - # When on VPN, show just an icon without the IP address. - # Tip: To display the private IP address when on VPN, remove the next line. - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN - # to see the name of the interface. - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' - # If set to true, show one segment per matching network interface. If set to false, show only - # one segment corresponding to the first matching network interface. - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false - # Custom icon. - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### - # IP color. - typeset -g POWERLEVEL9K_IP_FOREGROUND=38 - # The following parameters are accessible within the expansion: - # - # Parameter | Meaning - # ----------------------+------------------------------------------- - # P9K_IP_IP | IP address - # P9K_IP_INTERFACE | network interface - # P9K_IP_RX_BYTES | total number of bytes received - # P9K_IP_TX_BYTES | total number of bytes sent - # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt - # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt - # P9K_IP_RX_RATE | receive rate (since last prompt) - # P9K_IP_TX_RATE | send rate (since last prompt) - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' - # Show information for the first network interface whose name matches this regular expression. - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. - typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' - # Custom icon. - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #########################[ proxy: system-wide http/https/ftp proxy ]########################## - # Proxy color. - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ battery: internal battery ]################################# - # Show battery in red when it's below this level and not connected to power supply. - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 - # Show battery in green when it's charging or fully charged. - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 - # Show battery in yellow when it's discharging. - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 - # Battery pictograms going from low to high level of charge. - typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') - # Don't show the remaining time to charge/discharge. - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false - - #####################################[ wifi: wifi speed ]##################################### - # WiFi color. - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). - # - # # Wifi colors and icons for different signal strength levels (low to high). - # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values - # - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' - # - # The following parameters are accessible within the expansions: - # - # Parameter | Meaning - # ----------------------+--------------- - # P9K_WIFI_SSID | service set identifier, a.k.a. network name - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) - - ####################################[ time: current time ]#################################### - # Current time color. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - # Custom icon. - # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TIME_PREFIX='%248Fat ' - - # Example of a user-defined prompt segment. Function prompt_example will be called on every - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. - # - # Type `p10k help segment` for documentation and a more sophisticated example. - function prompt_example() { - p10k segment -f 208 -i '⭐' -t 'hello, %n' - } - - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job - # is to generate the prompt segment for display in instant prompt. See - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k - # will replay these calls without actually calling instant_prompt_*. It is imperative that - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this - # rule is not observed, the content of instant prompt will be incorrect. - # - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. - function instant_prompt_example() { - # Since prompt_example always makes the same `p10k segment` calls, we can call it from - # instant_prompt_example. This will give us the same `example` prompt segment in the instant - # and regular prompts. - prompt_example - } - - # User-defined prompt segments can be customized the same way as built-in segments. - # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh deleted file mode 100644 index 50e4261..0000000 --- a/airootfs/etc/skel/powerlevel10k/config/p10k-lean-8colors.zsh +++ /dev/null @@ -1,1648 +0,0 @@ -# Config for Powerlevel10k with 8-color lean prompt style. Type `p10k configure` to generate -# your own config based on it. -# -# Tip: Looking for a nice color? Here's a one-liner to print colormap. -# -# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. This allows you to apply configuration changes without - # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return - - # The list of segments shown on the left. Fill it with the most important segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - # os_icon # os identifier - dir # current directory - vcs # git status - # =========================[ Line #2 ]========================= - newline # \n - prompt_char # prompt symbol - ) - - # The list of segments shown on the right. Fill it with less important segments. - # Right prompt on the last prompt line (where you are typing your commands) gets - # automatically hidden when the input line reaches it. Right prompt above the - # last prompt line gets hidden if it would overlap with left prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - status # exit code of the last command - command_execution_time # duration of the last command - background_jobs # presence of background jobs - direnv # direnv status (https://direnv.net/) - asdf # asdf version manager (https://github.com/asdf-vm/asdf) - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) - anaconda # conda environment (https://conda.io/) - pyenv # python environment (https://github.com/pyenv/pyenv) - goenv # go environment (https://github.com/syndbg/goenv) - nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) - nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) - nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) - # node_version # node.js version - # go_version # go version (https://golang.org) - # rust_version # rustc version (https://www.rust-lang.org) - # dotnet_version # .NET version (https://dotnet.microsoft.com) - # php_version # php version (https://www.php.net/) - # laravel_version # laravel php framework version (https://laravel.com/) - # java_version # java version (https://www.java.com/) - # package # name@version from package.json (https://docs.npmjs.com/files/package.json) - rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) - rvm # ruby version from rvm (https://rvm.io) - fvm # flutter version management (https://github.com/leoafarias/fvm) - luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) - jenv # java version from jenv (https://github.com/jenv/jenv) - plenv # perl version from plenv (https://github.com/tokuhirom/plenv) - perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) - phpenv # php version from phpenv (https://github.com/phpenv/phpenv) - scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) - haskell_stack # haskell version from stack (https://haskellstack.org/) - kubecontext # current kubernetes context (https://kubernetes.io/) - terraform # terraform workspace (https://www.terraform.io) - # terraform_version # terraform version (https://www.terraform.io) - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) - aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) - gcloud # google cloud cli account and project (https://cloud.google.com/) - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) - toolbox # toolbox name (https://github.com/containers/toolbox) - context # user@hostname - nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) - ranger # ranger shell (https://github.com/ranger/ranger) - nnn # nnn shell (https://github.com/jarun/nnn) - lf # lf shell (https://github.com/gokcehan/lf) - xplr # xplr shell (https://github.com/sayanarijit/xplr) - vim_shell # vim shell indicator (:sh) - midnight_commander # midnight commander shell (https://midnight-commander.org/) - nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) - # vpn_ip # virtual private network indicator - # load # CPU load - # disk_usage # disk usage - # ram # free RAM - # swap # used swap - todo # todo items (https://github.com/todotxt/todo.txt-cli) - timewarrior # timewarrior tracking status (https://timewarrior.net/) - taskwarrior # taskwarrior task count (https://taskwarrior.org/) - # cpu_arch # CPU architecture - # time # current time - # =========================[ Line #2 ]========================= - newline # \n - # ip # ip address and bandwidth usage for a specified network interface - # public_ip # public IP address - # proxy # system-wide http/https/ftp proxy - # battery # internal battery - # wifi # wifi speed - # example # example user-defined segment (see prompt_example function below) - ) - - # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. - typeset -g POWERLEVEL9K_MODE=nerdfont-complete - # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid - # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. - typeset -g POWERLEVEL9K_ICON_PADDING=none - - # Basic style options that define the overall look of your prompt. You probably don't want to - # change them. - typeset -g POWERLEVEL9K_BACKGROUND= # transparent background - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol - - # When set to true, icons appear before content on both sides of the prompt. When set - # to false, icons go after content. If empty or not set, icons go before content in the left - # prompt and after content in the right prompt. - # - # You can also override it for a specific segment: - # - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false - # - # Or for a specific segment in specific state: - # - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true - - # Add an empty line before each prompt. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Connect left prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= - # Connect right prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= - - # The left end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # The right end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= - - # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll - # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and - # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. - typeset -g POWERLEVEL9K_SHOW_RULER=false - typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' - typeset -g POWERLEVEL9K_RULER_FOREGROUND=7 - - # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' - # to make it easier to see the alignment between left and right prompt and to separate prompt - # from command output. It serves the same purpose as ruler (see above) without increasing - # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false - # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact - # prompt. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then - # The color of the filler. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=7 - # Add a space between the end of left prompt and the filler. - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' - # Add a space between the filler and the start of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' - # Start filler from the edge of the screen if there are no left segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' - # End filler on the edge of the screen if there are no right segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' - fi - - #################################[ os_icon: os identifier ]################################## - # OS identifier color. - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= - # Custom icon. - # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' - - ################################[ prompt_char: prompt symbol ]################################ - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=2 - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=1 - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' - # Prompt symbol in overwrite vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true - # No line terminator if prompt_char is the last segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' - # No line introducer if prompt_char is the first segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - - ##################################[ dir: current directory ]################################## - # Default current directory color. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=4 - # If directory is too long, shorten some of its segments to the shortest possible unique - # prefix. The shortened directory can be tab-completed to the original. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique - # Replace removed segment suffixes with this symbol. - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= - # Color of the shortened directory segments. - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=4 - # Color of the anchor directory segments. Anchor segments are never shortened. The first - # segment is always an anchor. - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=4 - # Set to true to display anchor directory segments in bold. - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=false - # Don't shorten directories that contain any of these files. They are anchors. - local anchor_files=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .go-version - .ruby-version - .lua-version - .java-version - .perl-version - .php-version - .tool-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - stack.yaml - ) - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" - # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains - # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is - # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) - # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers - # and other directories don't. - # - # Optionally, "first" and "last" can be followed by ":" where is an integer. - # This moves the truncation point to the right (positive offset) or to the left (negative offset) - # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" - # respectively. - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false - # Don't shorten this many last directory segments. They are anchors. - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - # Shorten directory if it's longer than this even if there is space for it. The value can - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, - # directory will be shortened only when prompt doesn't fit or when other parameters demand it - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). - # If set to `0`, directory will always be shortened to its minimum length. - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this - # many columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 - # If set to true, embed a hyperlink into the directory. Useful for quickly - # opening a directory in the file manager simply by clicking the link. - # Can also be handy when the directory is shortened, as it allows you to see - # the full directory that was used in previous commands. - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false - - # Enable special styling for non-writable directories. See POWERLEVEL9K_LOCK_ICON and - # POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v2 - - # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON - # and POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 - - # The default icon shown next to non-writable and non-existent directories when - # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. - # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' - - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different - # directories. It must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. An empty string. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. - # - # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories - # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=( - # '~/work(|/*)' WORK '' - # '~(|/*)' HOME '' - # '*' DEFAULT '') - # - # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one - # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or - # WORK_NON_EXISTENT. - # - # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an - # option to define custom colors and icons for different directory classes. - # - # # Styling for WORK. - # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=4 - # - # # Styling for WORK_NOT_WRITABLE. - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=4# - # - # Styling for WORK_NON_EXISTENT. - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=4 - # - # If a styling parameter isn't explicitly defined for some class, it falls back to the classless - # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls - # back to POWERLEVEL9K_DIR_FOREGROUND. - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=() - - # Custom prefix. - # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' - - #####################################[ vcs: git status ]###################################### - # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= - - # Untracked files icon. It's really a question mark, your font isn't broken. - # Change the value of this parameter to show a different icon. - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' - - # Formatter for Git status. - # - # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. - # - # You can edit the function to customize how Git status looks. - # - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - function my_git_formatter() { - emulate -L zsh - - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - return - fi - - if (( $1 )); then - # Styling for up-to-date Git status. - local meta='%f' # default foreground - local clean='%2F' # green foreground - local modified='%3F' # yellow foreground - local untracked='%4F' # blue foreground - local conflicted='%1F' # red foreground - else - # Styling for incomplete and stale Git status. - local meta='%f' # default foreground - local clean='%f' # default foreground - local modified='%f' # default foreground - local untracked='%f' # default foreground - local conflicted='%f' # default foreground - fi - - local res - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=${(V)VCS_STATUS_LOCAL_BRANCH} - # If local branch name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show local branch name in full without truncation, delete the next line. - (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line - res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" - fi - - if [[ -n $VCS_STATUS_TAG - # Show tag only if not on a branch. - # Tip: To always show tag, delete the next line. - && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line - ]]; then - local tag=${(V)VCS_STATUS_TAG} - # If tag name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show tag name in full without truncation, delete the next line. - (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line - res+="${meta}#${clean}${tag//\%/%%}" - fi - - # Display the current Git commit if there is no branch and no tag. - # Tip: To always display the current Git commit, delete the next line. - [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line - res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" - - # Show tracking branch name if it differs from local branch. - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - - # Display "wip" if the latest commit's summary contains "wip" or "WIP". - if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then - res+=" ${modified}wip" - fi - - # ⇣42 if behind the remote. - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" - # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" - # ⇠42 if behind the push remote. - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " - # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" - # *42 if have stashes. - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" - # 'merge' if the repo is in an unusual state. - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" - # ~42 if have merge conflicts. - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" - # +42 if have staged changes. - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" - # !42 if have unstaged changes. - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" - # ?42 if have untracked files. It's really a question mark, your font isn't broken. - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. - # Remove the next line if you don't want to see untracked files at all. - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" - # "─" if the number of unstaged files is unknown. This can happen due to - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower - # than the number of files in the Git index, or due to bash.showDirtyState being set to false - # in the repository config. The number of staged and untracked files may also be unknown - # in this case. - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" - - typeset -g my_git_format=$res - } - functions -M my_git_formatter 2>/dev/null - - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with - # more than this many files in the index. Negative value means infinity. - # - # If you are working in Git repositories with tens of millions of files and seeing performance - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's - # config: `git config bash.showDirtyState false`. - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 - - # Don't show Git status in prompt for repositories whose workdir matches this pattern. - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. - # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' - typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' - # Enable counters for staged, unstaged, etc. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 - - # Icon color. - typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=2 - typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR= - # Custom icon. - # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' - - # Show status of repositories of these types. You can add svn and/or hg if you are - # using them. If you do, your prompt may become slow even when your current directory - # isn't in an svn or hg repository. - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) - - # These settings are used for repositories other than Git or when gitstatusd fails and - # Powerlevel10k has to fall back to using vcs_info. - typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=2 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=2 - typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=3 - - ##########################[ status: exit code of the last command ]########################### - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and - # style them independently from the regular OK and ERROR state. - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true - - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as - # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=false - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when some part of a pipe command fails but the overall exit status is zero. It may look - # like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as - # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=false - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=1 - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when the last command was terminated by a signal. - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=1 - # Use terse signal names: "INT" instead of "SIGINT(2)". - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when some part of a pipe command fails and the overall exit status is also non-zero. - # It may look like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=1 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - - ###################[ command_execution_time: duration of the last command ]################### - # Show duration of the last command if takes at least this many seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 - # Show this many fractional digits. Zero means round to seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Execution time color. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=3 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Custom icon. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' - - #######################[ background_jobs: presence of background jobs ]####################### - # Don't show the number of background jobs. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false - # Background jobs color. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=1 - # Custom icon. - # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ direnv: direnv status (https://direnv.net/) ]######################## - # Direnv color. - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### - # Default asdf color. Only used to display tools for which there is no color override (see below). - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=6 - - # There are four parameters that can be used to hide asdf tools. Each parameter describes - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to - # hide a tool, it gets shown. - # - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: - # - # asdf local python 3.8.1 - # asdf global python 3.8.1 - # - # After running both commands the current python version is 3.8.1 and its source is "local" as - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, - # it'll hide python version in this case because 3.8.1 is the same as the global version. - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't - # contain "local". - - # Hide tool versions that don't come from one of these sources. - # - # Available sources: - # - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" - # - local `asdf current` says "set by /some/not/home/directory/file" - # - global `asdf current` says "set by /home/username/file" - # - # Note: If this parameter is set to (shell local global), it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) - - # If set to false, hide tool versions that are the same as global. - # - # Note: The name of this parameter doesn't reflect its meaning at all. - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false - - # If set to false, hide tool versions that are equal to "system". - # - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true - - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern - # in the current directory, or its parent directory, or its grandparent directory, and so on. - # - # Note: If this parameter is set to empty value, it won't hide tools. - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. - # - # Example: Hide nodejs version when there is no package.json and no *.js files in the current - # directory, in `..`, in `../..` and so on. - # - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= - - # Ruby version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=1 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Python version from asdf. - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=6 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Go version from asdf. - typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=6 - # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Node.js version from asdf. - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=2 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Rust version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' - - # .NET Core version from asdf. - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Flutter version from asdf. - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Lua version from asdf. - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Java version from asdf. - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Perl version from asdf. - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=6 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Erlang version from asdf. - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=1 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Elixir version from asdf. - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Postgres version from asdf. - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=6 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' - - # PHP version from asdf. - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Haskell version from asdf. - typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=3 - # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Julia version from asdf. - typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=2 - # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' - - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### - # NordVPN connection indicator color. - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=6 - # Hide NordVPN connection indicator when not connected. - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= - # Custom icon. - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## - # Ranger shell color. - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### - # Nnn shell color. - typeset -g POWERLEVEL9K_NNN_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### - # lf shell color. - typeset -g POWERLEVEL9K_LF_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## - # xplr shell color. - typeset -g POWERLEVEL9K_XPLR_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### - # Vim shell indicator color. - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### - # Midnight Commander shell color. - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## - # Nix shell color. - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=4 - - # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. - # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false - - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ disk_usage: disk usage ]################################## - # Colors for different levels of disk usage. - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=2 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=3 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=1 - # Thresholds for different levels of disk usage (percentage points). - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false - # Custom icon. - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ ram: free RAM ]####################################### - # RAM color. - typeset -g POWERLEVEL9K_RAM_FOREGROUND=2 - # Custom icon. - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################################[ swap: used swap ]###################################### - # Swap color. - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ load: CPU load ]###################################### - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. - typeset -g POWERLEVEL9K_LOAD_WHICH=5 - # Load color when load is under 50%. - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=2 - # Load color when load is between 50% and 70%. - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=3 - # Load color when load is over 70%. - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=1 - # Custom icon. - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ - # Todo color. - typeset -g POWERLEVEL9K_TODO_FOREGROUND=4 - # Hide todo when the total number of tasks is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true - # Hide todo when the number of tasks after filtering is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false - - # Todo format. The following parameters are available within the expansion. - # - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. - # - # These variables correspond to the last line of the output of `todo.sh -p ls`: - # - # TODO: 24 of 42 tasks shown - # - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. - # - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ - # Timewarrior color. - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=4 - # If the tracked task is longer than 24 characters, truncate and append "…". - # Tip: To always display tasks without truncation, delete the following parameter. - # Tip: To hide task names and display just the icon when time tracking is enabled, set the - # value of the following parameter to "". - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' - - # Custom icon. - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## - # Taskwarrior color. - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=6 - - # Taskwarrior segment format. The following parameters are available within the expansion. - # - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. - # - # Zero values are represented as empty parameters. - # - # The default format: - # - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' - # - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ cpu_arch: CPU architecture ]################################ - # CPU architecture color. - typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=3 - - # Hide the segment when on a specific CPU architecture. - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ context: user@hostname ]################################## - # Context color when running with privileges. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 - # Context color in SSH without privileges. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=7 - # Default context color (no privileges, no SSH). - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=7 - - # Context format when running with privileges: bold user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' - # Context format when in SSH without privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' - # Default context format (no privileges, no SSH): user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' - - # Don't show context unless running with privileges or in SSH. - # Tip: Remove the next line to always show context. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' - - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### - # Python virtual environment color. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=6 - # Don't show Python version next to the virtual environment name. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - # If set to "false", won't show virtualenv if pyenv is already shown. - # If set to "if-different", won't show virtualenv if it's the same as pyenv. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false - # Separate environment name from Python version only with a space. - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ anaconda: conda environment (https://conda.io/) ]###################### - # Anaconda environment color. - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=6 - - # Anaconda segment format. The following parameters are available within the expansion. - # - # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. - # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. - # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). - # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). - # - # CONDA_PROMPT_MODIFIER can be configured with the following command: - # - # conda config --set env_prompt '({default_env}) ' - # - # The last argument is a Python format string that can use the following variables: - # - # - prefix The same as CONDA_PREFIX. - # - default_env The same as CONDA_DEFAULT_ENV. - # - name The last segment of CONDA_PREFIX. - # - stacked_env Comma-separated list of names in the environment stack. The first element is - # always the same as default_env. - # - # Note: '({default_env}) ' is the default value of env_prompt. - # - # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER - # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former - # is empty. - typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' - - # Custom icon. - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ - # Pyenv color. - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=6 - # Hide python version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) - # If set to false, hide python version if it's the same as global: - # $(pyenv version-name) == $(pyenv global). - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide python version if it's equal to "system". - typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true - - # Pyenv segment format. The following parameters are available within the expansion. - # - # - P9K_CONTENT Current pyenv environment (pyenv version-name). - # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). - # - # The default format has the following logic: - # - # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or - # starts with "$P9K_PYENV_PYTHON_VERSION/". - # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". - typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ - # Goenv color. - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=6 - # Hide go version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) - # If set to false, hide go version if it's the same as global: - # $(goenv version-name) == $(goenv global). - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide go version if it's equal to "system". - typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## - # Nodenv color. - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 - # Hide node version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) - # If set to false, hide node version if it's the same as global: - # $(nodenv version-name) == $(nodenv global). - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide node version if it's equal to "system". - typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### - # Nvm color. - typeset -g POWERLEVEL9K_NVM_FOREGROUND=2 - # Custom icon. - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ - # Nodeenv color. - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 - # Don't show Node version next to the environment name. - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false - # Separate environment name from Node version only with a space. - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############################[ node_version: node.js version ]############################### - # Node version color. - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=2 - # Show node version only when in a directory tree containing package.json. - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ go_version: go version (https://golang.org) ]######################## - # Go version color. - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=6 - # Show go version only when in a go project subdirectory. - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## - # Rust version color. - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=4 - # Show rust version only when in a rust project subdirectory. - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ - # .NET version color. - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=5 - # Show .NET version only when in a .NET project subdirectory. - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ php_version: php version (https://www.php.net/) ]###################### - # PHP version color. - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=5 - # Show PHP version only when in a PHP project subdirectory. - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### - # Laravel version color. - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 - # Custom icon. - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ####################[ java_version: java version (https://www.java.com/) ]#################### - # Java version color. - typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=4 - # Show java version only when in a java project subdirectory. - typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true - # Show brief version. - typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false - # Custom icon. - # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### - # Package color. - typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=6 - # Package format. The following parameters are available within the expansion. - # - # - P9K_PACKAGE_NAME The value of `name` field in package.json. - # - P9K_PACKAGE_VERSION The value of `version` field in package.json. - # - # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' - # Custom icon. - # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## - # Rbenv color. - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=1 - # Hide ruby version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) - # If set to false, hide ruby version if it's the same as global: - # $(rbenv version-name) == $(rbenv global). - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide ruby version if it's equal to "system". - typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## - # Rvm color. - typeset -g POWERLEVEL9K_RVM_FOREGROUND=1 - # Don't show @gemset at the end. - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false - # Don't show ruby- at the front. - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ - # Fvm color. - typeset -g POWERLEVEL9K_FVM_FOREGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### - # Lua color. - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=4 - # Hide lua version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) - # If set to false, hide lua version if it's the same as global: - # $(luaenv version-name) == $(luaenv global). - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide lua version if it's equal to "system". - typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ - # Java color. - typeset -g POWERLEVEL9K_JENV_FOREGROUND=4 - # Hide java version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) - # If set to false, hide java version if it's the same as global: - # $(jenv version-name) == $(jenv global). - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide java version if it's equal to "system". - typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ - # Perl color. - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=6 - # Hide perl version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) - # If set to false, hide perl version if it's the same as global: - # $(plenv version-name) == $(plenv global). - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide perl version if it's equal to "system". - typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ - # Perlbrew color. - typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 - # Show perlbrew version only when in a perl project subdirectory. - typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true - # Don't show "perl-" at the front. - typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ - # PHP color. - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=5 - # Hide php version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) - # If set to false, hide php version if it's the same as global: - # $(phpenv version-name) == $(phpenv global). - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide php version if it's equal to "system". - typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### - # Scala color. - typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=1 - # Hide scala version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) - # If set to false, hide scala version if it's the same as global: - # $(scalaenv version-name) == $(scalaenv global). - typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide scala version if it's equal to "system". - typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### - # Haskell color. - typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=3 - # Hide haskell version if it doesn't come from one of these sources. - # - # shell: version is set by STACK_YAML - # local: version is set by stack.yaml up the directory tree - # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) - typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) - # If set to false, hide haskell version if it's the same as in the implicit global project. - typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true - # Custom icon. - # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# - # Show kubecontext only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show kubecontext. - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' - - # Kubernetes context classes for the purpose of using different colors, icons and expansions with - # different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current kubernetes context gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current kubernetes context is "deathray-testing/default", its class is TEST - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=3 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=5 - # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext - # segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # Within the expansion the following parameters are always available: - # - # - P9K_CONTENT The content that would've been displayed if there was no content - # expansion defined. - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE - # in the output of `kubectl config get-contexts`. If there is no - # namespace, the parameter is set to "default". - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the - # output of `kubectl config get-contexts`. - # - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), - # the following extra parameters are available: - # - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. - # - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=gke - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - # - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=eks - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' - # Append the current context's namespace if it's not "default". - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' - - # Custom prefix. - # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' - - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# - # Don't show terraform workspace if it's literally "default". - typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current terraform workspace gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' OTHER) - # - # If your current terraform workspace is "project_test", its class is TEST because "project_test" - # doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' OTHER) - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 - # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ terraform_version: terraform version (https://www.terraform.io) ]############## - # Terraform version color. - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# - # Show aws only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show aws. - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' - - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current AWS profile gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current AWS profile is "company_test", its class is TEST - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=2 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=3 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # AWS segment format. The following parameters are available within the expansion. - # - # - P9K_AWS_PROFILE The name of the current AWS profile. - # - P9K_AWS_REGION The region associated with the current AWS profile. - typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' - - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# - # AWS Elastic Beanstalk environment color. - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 - # Custom icon. - # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## - # Show azure only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show azure. - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' - # Azure account name color. - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### - # Show gcloud only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show gcloud. - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' - # Google cloud color. - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=4 - - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or - # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative - # enough. You can use the following parameters in the expansions. Each of them corresponds to the - # output of `gcloud` tool. - # - # Parameter | Source - # -------------------------|-------------------------------------------------------------------- - # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' - # P9K_GCLOUD_ACCOUNT | gcloud config get-value account - # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project - # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. - # - # Obtaining project name requires sending a request to Google servers. This can take a long time - # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud - # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets - # set and gcloud prompt segment transitions to state COMPLETE. - # - # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL - # and COMPLETE. You can also hide gcloud in state PARTIAL by setting - # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and - # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. - typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' - typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' - - # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name - # this often. Negative value disables periodic polling. In this mode project name is retrieved - # only when the current configuration, account or project id changes. - typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 - - # Custom icon. - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# - # Show google_app_cred only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show google_app_cred. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' - - # Google application credentials classes for the purpose of using different colors, icons and - # expansions with different credentials. - # - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first - # element in each pair defines a pattern against which the current kubernetes context gets - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION - # parameters, you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. - # The first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD - # '*:*test*:*' TEST - # '*' DEFAULT) - # - # If your current Google application credentials is "service_account deathray-testing x@y.com", - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=3 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD # These values are examples that are unlikely - # '*:*test*:*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=5 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # You can use the following parameters in the expansion. Each of them corresponds to one of the - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. - # - # Parameter | JSON key file field - # ---------------------------------+--------------- - # P9K_GOOGLE_APP_CRED_TYPE | type - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' - - ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### - # Toolbox color. - typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=3 - # Don't display the name of the toolbox if it matches fedora-toolbox-*. - typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' - # Custom icon. - # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin ' - - ###############################[ public_ip: public IP address ]############################### - # Public IP color. - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=6 - # Custom icon. - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ########################[ vpn_ip: virtual private network indicator ]######################### - # VPN IP color. - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=3 - # When on VPN, show just an icon without the IP address. - # Tip: To display the private IP address when on VPN, remove the next line. - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN - # to see the name of the interface. - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' - # If set to true, show one segment per matching network interface. If set to false, show only - # one segment corresponding to the first matching network interface. - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false - # Custom icon. - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### - # IP color. - typeset -g POWERLEVEL9K_IP_FOREGROUND=4 - # The following parameters are accessible within the expansion: - # - # Parameter | Meaning - # ----------------------+------------------------------------------- - # P9K_IP_IP | IP address - # P9K_IP_INTERFACE | network interface - # P9K_IP_RX_BYTES | total number of bytes received - # P9K_IP_TX_BYTES | total number of bytes sent - # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt - # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt - # P9K_IP_RX_RATE | receive rate (since last prompt) - # P9K_IP_TX_RATE | send rate (since last prompt) - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %2F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %3F⇡$P9K_IP_TX_RATE}' - # Show information for the first network interface whose name matches this regular expression. - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. - typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' - # Custom icon. - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #########################[ proxy: system-wide http/https/ftp proxy ]########################## - # Proxy color. - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=2 - # Custom icon. - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ battery: internal battery ]################################# - # Show battery in red when it's below this level and not connected to power supply. - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 - # Show battery in green when it's charging or fully charged. - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 - # Show battery in yellow when it's discharging. - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 - # Battery pictograms going from low to high level of charge. - typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{0}▁' '%K{0}▂' '%K{0}▃' '%K{0}▄' '%K{0}▅' '%K{0}▆' '%K{0}▇' '%K{0}█') - # Don't show the remaining time to charge/discharge. - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false - - #####################################[ wifi: wifi speed ]##################################### - # WiFi color. - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). - # - # # Wifi colors and icons for different signal strength levels (low to high). - # typeset -g my_wifi_fg=(4 4 4 4 4) # <-- change these values - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values - # - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' - # - # The following parameters are accessible within the expansions: - # - # Parameter | Meaning - # ----------------------+--------------- - # P9K_WIFI_SSID | service set identifier, a.k.a. network name - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) - - ####################################[ time: current time ]#################################### - # Current time color. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=6 - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - # Custom icon. - # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' - - # Example of a user-defined prompt segment. Function prompt_example will be called on every - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and green text greeting the user. - # - # Type `p10k help segment` for documentation and a more sophisticated example. - function prompt_example() { - p10k segment -f 2 -i '⭐' -t 'hello, %n' - } - - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job - # is to generate the prompt segment for display in instant prompt. See - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k - # will replay these calls without actually calling instant_prompt_*. It is imperative that - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this - # rule is not observed, the content of instant prompt will be incorrect. - # - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. - function instant_prompt_example() { - # Since prompt_example always makes the same `p10k segment` calls, we can call it from - # instant_prompt_example. This will give us the same `example` prompt segment in the instant - # and regular prompts. - prompt_example - } - - # User-defined prompt segments can be customized the same way as built-in segments. - # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh deleted file mode 100644 index b938ce6..0000000 --- a/airootfs/etc/skel/powerlevel10k/config/p10k-lean.zsh +++ /dev/null @@ -1,1644 +0,0 @@ -# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate -# your own config based on it. -# -# Tip: Looking for a nice color? Here's a one-liner to print colormap. -# -# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. This allows you to apply configuration changes without - # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return - - # The list of segments shown on the left. Fill it with the most important segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - # os_icon # os identifier - dir # current directory - vcs # git status - # =========================[ Line #2 ]========================= - newline # \n - prompt_char # prompt symbol - ) - - # The list of segments shown on the right. Fill it with less important segments. - # Right prompt on the last prompt line (where you are typing your commands) gets - # automatically hidden when the input line reaches it. Right prompt above the - # last prompt line gets hidden if it would overlap with left prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - status # exit code of the last command - command_execution_time # duration of the last command - background_jobs # presence of background jobs - direnv # direnv status (https://direnv.net/) - asdf # asdf version manager (https://github.com/asdf-vm/asdf) - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) - anaconda # conda environment (https://conda.io/) - pyenv # python environment (https://github.com/pyenv/pyenv) - goenv # go environment (https://github.com/syndbg/goenv) - nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) - nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) - nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) - # node_version # node.js version - # go_version # go version (https://golang.org) - # rust_version # rustc version (https://www.rust-lang.org) - # dotnet_version # .NET version (https://dotnet.microsoft.com) - # php_version # php version (https://www.php.net/) - # laravel_version # laravel php framework version (https://laravel.com/) - # java_version # java version (https://www.java.com/) - # package # name@version from package.json (https://docs.npmjs.com/files/package.json) - rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) - rvm # ruby version from rvm (https://rvm.io) - fvm # flutter version management (https://github.com/leoafarias/fvm) - luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) - jenv # java version from jenv (https://github.com/jenv/jenv) - plenv # perl version from plenv (https://github.com/tokuhirom/plenv) - perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) - phpenv # php version from phpenv (https://github.com/phpenv/phpenv) - scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) - haskell_stack # haskell version from stack (https://haskellstack.org/) - kubecontext # current kubernetes context (https://kubernetes.io/) - terraform # terraform workspace (https://www.terraform.io) - # terraform_version # terraform version (https://www.terraform.io) - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) - aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) - gcloud # google cloud cli account and project (https://cloud.google.com/) - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) - toolbox # toolbox name (https://github.com/containers/toolbox) - context # user@hostname - nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) - ranger # ranger shell (https://github.com/ranger/ranger) - nnn # nnn shell (https://github.com/jarun/nnn) - lf # lf shell (https://github.com/gokcehan/lf) - xplr # xplr shell (https://github.com/sayanarijit/xplr) - vim_shell # vim shell indicator (:sh) - midnight_commander # midnight commander shell (https://midnight-commander.org/) - nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) - # vpn_ip # virtual private network indicator - # load # CPU load - # disk_usage # disk usage - # ram # free RAM - # swap # used swap - todo # todo items (https://github.com/todotxt/todo.txt-cli) - timewarrior # timewarrior tracking status (https://timewarrior.net/) - taskwarrior # taskwarrior task count (https://taskwarrior.org/) - # cpu_arch # CPU architecture - # time # current time - # =========================[ Line #2 ]========================= - newline - # ip # ip address and bandwidth usage for a specified network interface - # public_ip # public IP address - # proxy # system-wide http/https/ftp proxy - # battery # internal battery - # wifi # wifi speed - # example # example user-defined segment (see prompt_example function below) - ) - - # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. - typeset -g POWERLEVEL9K_MODE=nerdfont-complete - # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid - # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. - typeset -g POWERLEVEL9K_ICON_PADDING=none - - # Basic style options that define the overall look of your prompt. You probably don't want to - # change them. - typeset -g POWERLEVEL9K_BACKGROUND= # transparent background - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol - - # When set to true, icons appear before content on both sides of the prompt. When set - # to false, icons go after content. If empty or not set, icons go before content in the left - # prompt and after content in the right prompt. - # - # You can also override it for a specific segment: - # - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false - # - # Or for a specific segment in specific state: - # - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true - - # Add an empty line before each prompt. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Connect left prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= - # Connect right prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= - - # The left end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # The right end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= - - # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll - # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and - # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. - typeset -g POWERLEVEL9K_SHOW_RULER=false - typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' - typeset -g POWERLEVEL9K_RULER_FOREGROUND=240 - - # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' - # to make it easier to see the alignment between left and right prompt and to separate prompt - # from command output. It serves the same purpose as ruler (see above) without increasing - # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false - # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact - # prompt. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then - # The color of the filler. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 - # Add a space between the end of left prompt and the filler. - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' - # Add a space between the filler and the start of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' - # Start filler from the edge of the screen if there are no left segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' - # End filler on the edge of the screen if there are no right segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' - fi - - #################################[ os_icon: os identifier ]################################## - # OS identifier color. - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= - # Custom icon. - # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' - - ################################[ prompt_char: prompt symbol ]################################ - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' - # Prompt symbol in overwrite vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true - # No line terminator if prompt_char is the last segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' - # No line introducer if prompt_char is the first segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - - ##################################[ dir: current directory ]################################## - # Default current directory color. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 - # If directory is too long, shorten some of its segments to the shortest possible unique - # prefix. The shortened directory can be tab-completed to the original. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique - # Replace removed segment suffixes with this symbol. - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= - # Color of the shortened directory segments. - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 - # Color of the anchor directory segments. Anchor segments are never shortened. The first - # segment is always an anchor. - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 - # Display anchor directory segments in bold. - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true - # Don't shorten directories that contain any of these files. They are anchors. - local anchor_files=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .go-version - .ruby-version - .lua-version - .java-version - .perl-version - .php-version - .tool-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - stack.yaml - ) - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" - # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains - # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is - # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) - # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers - # and other directories don't. - # - # Optionally, "first" and "last" can be followed by ":" where is an integer. - # This moves the truncation point to the right (positive offset) or to the left (negative offset) - # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" - # respectively. - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false - # Don't shorten this many last directory segments. They are anchors. - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - # Shorten directory if it's longer than this even if there is space for it. The value can - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, - # directory will be shortened only when prompt doesn't fit or when other parameters demand it - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). - # If set to `0`, directory will always be shortened to its minimum length. - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this - # many columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 - # If set to true, embed a hyperlink into the directory. Useful for quickly - # opening a directory in the file manager simply by clicking the link. - # Can also be handy when the directory is shortened, as it allows you to see - # the full directory that was used in previous commands. - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false - - # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON - # and POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 - - # The default icon shown next to non-writable and non-existent directories when - # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. - # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' - - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different - # directories. It must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. An empty string. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. - # - # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories - # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=( - # '~/work(|/*)' WORK '' - # '~(|/*)' HOME '' - # '*' DEFAULT '') - # - # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one - # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or - # WORK_NON_EXISTENT. - # - # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an - # option to define custom colors and icons for different directory classes. - # - # # Styling for WORK. - # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NOT_WRITABLE. - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NON_EXISTENT. - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 - # - # If a styling parameter isn't explicitly defined for some class, it falls back to the classless - # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls - # back to POWERLEVEL9K_DIR_FOREGROUND. - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=() - - # Custom prefix. - # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' - - #####################################[ vcs: git status ]###################################### - # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= - - # Untracked files icon. It's really a question mark, your font isn't broken. - # Change the value of this parameter to show a different icon. - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' - - # Formatter for Git status. - # - # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. - # - # You can edit the function to customize how Git status looks. - # - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - function my_git_formatter() { - emulate -L zsh - - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - return - fi - - if (( $1 )); then - # Styling for up-to-date Git status. - local meta='%f' # default foreground - local clean='%76F' # green foreground - local modified='%178F' # yellow foreground - local untracked='%39F' # blue foreground - local conflicted='%196F' # red foreground - else - # Styling for incomplete and stale Git status. - local meta='%244F' # grey foreground - local clean='%244F' # grey foreground - local modified='%244F' # grey foreground - local untracked='%244F' # grey foreground - local conflicted='%244F' # grey foreground - fi - - local res - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=${(V)VCS_STATUS_LOCAL_BRANCH} - # If local branch name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show local branch name in full without truncation, delete the next line. - (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line - res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" - fi - - if [[ -n $VCS_STATUS_TAG - # Show tag only if not on a branch. - # Tip: To always show tag, delete the next line. - && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line - ]]; then - local tag=${(V)VCS_STATUS_TAG} - # If tag name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show tag name in full without truncation, delete the next line. - (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line - res+="${meta}#${clean}${tag//\%/%%}" - fi - - # Display the current Git commit if there is no branch and no tag. - # Tip: To always display the current Git commit, delete the next line. - [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line - res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" - - # Show tracking branch name if it differs from local branch. - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - - # Display "wip" if the latest commit's summary contains "wip" or "WIP". - if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then - res+=" ${modified}wip" - fi - - # ⇣42 if behind the remote. - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" - # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" - # ⇠42 if behind the push remote. - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " - # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" - # *42 if have stashes. - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" - # 'merge' if the repo is in an unusual state. - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" - # ~42 if have merge conflicts. - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" - # +42 if have staged changes. - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" - # !42 if have unstaged changes. - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" - # ?42 if have untracked files. It's really a question mark, your font isn't broken. - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. - # Remove the next line if you don't want to see untracked files at all. - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" - # "─" if the number of unstaged files is unknown. This can happen due to - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower - # than the number of files in the Git index, or due to bash.showDirtyState being set to false - # in the repository config. The number of staged and untracked files may also be unknown - # in this case. - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" - - typeset -g my_git_format=$res - } - functions -M my_git_formatter 2>/dev/null - - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with - # more than this many files in the index. Negative value means infinity. - # - # If you are working in Git repositories with tens of millions of files and seeing performance - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's - # config: `git config bash.showDirtyState false`. - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 - - # Don't show Git status in prompt for repositories whose workdir matches this pattern. - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. - # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' - typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' - # Enable counters for staged, unstaged, etc. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 - - # Icon color. - typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 - typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 - # Custom icon. - # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' - - # Show status of repositories of these types. You can add svn and/or hg if you are - # using them. If you do, your prompt may become slow even when your current directory - # isn't in an svn or hg repository. - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) - - # These settings are used for repositories other than Git or when gitstatusd fails and - # Powerlevel10k has to fall back to using vcs_info. - typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 - - ##########################[ status: exit code of the last command ]########################### - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and - # style them independently from the regular OK and ERROR state. - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true - - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as - # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=false - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when some part of a pipe command fails but the overall exit status is zero. It may look - # like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as - # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=false - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when the last command was terminated by a signal. - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 - # Use terse signal names: "INT" instead of "SIGINT(2)". - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when some part of a pipe command fails and the overall exit status is also non-zero. - # It may look like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - - ###################[ command_execution_time: duration of the last command ]################### - # Show duration of the last command if takes at least this many seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 - # Show this many fractional digits. Zero means round to seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Execution time color. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Custom icon. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' - - #######################[ background_jobs: presence of background jobs ]####################### - # Don't show the number of background jobs. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false - # Background jobs color. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ direnv: direnv status (https://direnv.net/) ]######################## - # Direnv color. - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### - # Default asdf color. Only used to display tools for which there is no color override (see below). - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 - - # There are four parameters that can be used to hide asdf tools. Each parameter describes - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to - # hide a tool, it gets shown. - # - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: - # - # asdf local python 3.8.1 - # asdf global python 3.8.1 - # - # After running both commands the current python version is 3.8.1 and its source is "local" as - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, - # it'll hide python version in this case because 3.8.1 is the same as the global version. - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't - # contain "local". - - # Hide tool versions that don't come from one of these sources. - # - # Available sources: - # - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" - # - local `asdf current` says "set by /some/not/home/directory/file" - # - global `asdf current` says "set by /home/username/file" - # - # Note: If this parameter is set to (shell local global), it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) - - # If set to false, hide tool versions that are the same as global. - # - # Note: The name of this parameter doesn't reflect its meaning at all. - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false - - # If set to false, hide tool versions that are equal to "system". - # - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true - - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern - # in the current directory, or its parent directory, or its grandparent directory, and so on. - # - # Note: If this parameter is set to empty value, it won't hide tools. - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. - # - # Example: Hide nodejs version when there is no package.json and no *.js files in the current - # directory, in `..`, in `../..` and so on. - # - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= - - # Ruby version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Python version from asdf. - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Go version from asdf. - typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Node.js version from asdf. - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Rust version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' - - # .NET Core version from asdf. - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_DOTNET_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Flutter version from asdf. - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Lua version from asdf. - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Java version from asdf. - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Perl version from asdf. - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Erlang version from asdf. - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Elixir version from asdf. - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Postgres version from asdf. - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' - - # PHP version from asdf. - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Haskell version from asdf. - typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 - # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Julia version from asdf. - typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' - - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### - # NordVPN connection indicator color. - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 - # Hide NordVPN connection indicator when not connected. - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= - # Custom icon. - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## - # Ranger shell color. - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### - # Nnn shell color. - typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### - # lf shell color. - typeset -g POWERLEVEL9K_LF_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## - # xplr shell color. - typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### - # Vim shell indicator color. - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 - # Custom icon. - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### - # Midnight Commander shell color. - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## - # Nix shell color. - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 - - # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. - # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false - - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ disk_usage: disk usage ]################################## - # Colors for different levels of disk usage. - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 - # Thresholds for different levels of disk usage (percentage points). - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false - # Custom icon. - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ ram: free RAM ]####################################### - # RAM color. - typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 - # Custom icon. - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################################[ swap: used swap ]###################################### - # Swap color. - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 - # Custom icon. - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ load: CPU load ]###################################### - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. - typeset -g POWERLEVEL9K_LOAD_WHICH=5 - # Load color when load is under 50%. - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 - # Load color when load is between 50% and 70%. - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 - # Load color when load is over 70%. - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 - # Custom icon. - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ - # Todo color. - typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 - # Hide todo when the total number of tasks is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true - # Hide todo when the number of tasks after filtering is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false - - # Todo format. The following parameters are available within the expansion. - # - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. - # - # These variables correspond to the last line of the output of `todo.sh -p ls`: - # - # TODO: 24 of 42 tasks shown - # - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. - # - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ - # Timewarrior color. - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 - # If the tracked task is longer than 24 characters, truncate and append "…". - # Tip: To always display tasks without truncation, delete the following parameter. - # Tip: To hide task names and display just the icon when time tracking is enabled, set the - # value of the following parameter to "". - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' - - # Custom icon. - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## - # Taskwarrior color. - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 - - # Taskwarrior segment format. The following parameters are available within the expansion. - # - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. - # - # Zero values are represented as empty parameters. - # - # The default format: - # - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' - # - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ cpu_arch: CPU architecture ]################################ - # CPU architecture color. - typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 - - # Hide the segment when on a specific CPU architecture. - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ context: user@hostname ]################################## - # Context color when running with privileges. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 - # Context color in SSH without privileges. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 - # Default context color (no privileges, no SSH). - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 - - # Context format when running with privileges: bold user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' - # Context format when in SSH without privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' - # Default context format (no privileges, no SSH): user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' - - # Don't show context unless running with privileges or in SSH. - # Tip: Remove the next line to always show context. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' - - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### - # Python virtual environment color. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 - # Don't show Python version next to the virtual environment name. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - # If set to "false", won't show virtualenv if pyenv is already shown. - # If set to "if-different", won't show virtualenv if it's the same as pyenv. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false - # Separate environment name from Python version only with a space. - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ anaconda: conda environment (https://conda.io/) ]###################### - # Anaconda environment color. - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 - - # Anaconda segment format. The following parameters are available within the expansion. - # - # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. - # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. - # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). - # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). - # - # CONDA_PROMPT_MODIFIER can be configured with the following command: - # - # conda config --set env_prompt '({default_env}) ' - # - # The last argument is a Python format string that can use the following variables: - # - # - prefix The same as CONDA_PREFIX. - # - default_env The same as CONDA_DEFAULT_ENV. - # - name The last segment of CONDA_PREFIX. - # - stacked_env Comma-separated list of names in the environment stack. The first element is - # always the same as default_env. - # - # Note: '({default_env}) ' is the default value of env_prompt. - # - # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER - # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former - # is empty. - typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' - - # Custom icon. - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ - # Pyenv color. - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 - # Hide python version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) - # If set to false, hide python version if it's the same as global: - # $(pyenv version-name) == $(pyenv global). - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide python version if it's equal to "system". - typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true - - # Pyenv segment format. The following parameters are available within the expansion. - # - # - P9K_CONTENT Current pyenv environment (pyenv version-name). - # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). - # - # The default format has the following logic: - # - # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or - # starts with "$P9K_PYENV_PYTHON_VERSION/". - # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". - typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ - # Goenv color. - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 - # Hide go version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) - # If set to false, hide go version if it's the same as global: - # $(goenv version-name) == $(goenv global). - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide go version if it's equal to "system". - typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## - # Nodenv color. - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 - # Hide node version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) - # If set to false, hide node version if it's the same as global: - # $(nodenv version-name) == $(nodenv global). - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide node version if it's equal to "system". - typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### - # Nvm color. - typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ - # Nodeenv color. - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 - # Don't show Node version next to the environment name. - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false - # Separate environment name from Node version only with a space. - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############################[ node_version: node.js version ]############################### - # Node version color. - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 - # Show node version only when in a directory tree containing package.json. - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ go_version: go version (https://golang.org) ]######################## - # Go version color. - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 - # Show go version only when in a go project subdirectory. - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## - # Rust version color. - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 - # Show rust version only when in a rust project subdirectory. - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ - # .NET version color. - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 - # Show .NET version only when in a .NET project subdirectory. - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ php_version: php version (https://www.php.net/) ]###################### - # PHP version color. - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 - # Show PHP version only when in a PHP project subdirectory. - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### - # Laravel version color. - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 - # Custom icon. - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ####################[ java_version: java version (https://www.java.com/) ]#################### - # Java version color. - typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 - # Show java version only when in a java project subdirectory. - typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true - # Show brief version. - typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false - # Custom icon. - # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### - # Package color. - typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 - # Package format. The following parameters are available within the expansion. - # - # - P9K_PACKAGE_NAME The value of `name` field in package.json. - # - P9K_PACKAGE_VERSION The value of `version` field in package.json. - # - # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' - # Custom icon. - # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## - # Rbenv color. - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 - # Hide ruby version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) - # If set to false, hide ruby version if it's the same as global: - # $(rbenv version-name) == $(rbenv global). - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide ruby version if it's equal to "system". - typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## - # Rvm color. - typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 - # Don't show @gemset at the end. - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false - # Don't show ruby- at the front. - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ - # Fvm color. - typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### - # Lua color. - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 - # Hide lua version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) - # If set to false, hide lua version if it's the same as global: - # $(luaenv version-name) == $(luaenv global). - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide lua version if it's equal to "system". - typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ - # Java color. - typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 - # Hide java version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) - # If set to false, hide java version if it's the same as global: - # $(jenv version-name) == $(jenv global). - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide java version if it's equal to "system". - typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ - # Perl color. - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 - # Hide perl version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) - # If set to false, hide perl version if it's the same as global: - # $(plenv version-name) == $(plenv global). - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide perl version if it's equal to "system". - typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ - # Perlbrew color. - typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 - # Show perlbrew version only when in a perl project subdirectory. - typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true - # Don't show "perl-" at the front. - typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ - # PHP color. - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 - # Hide php version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) - # If set to false, hide php version if it's the same as global: - # $(phpenv version-name) == $(phpenv global). - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide php version if it's equal to "system". - typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### - # Scala color. - typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 - # Hide scala version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) - # If set to false, hide scala version if it's the same as global: - # $(scalaenv version-name) == $(scalaenv global). - typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide scala version if it's equal to "system". - typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### - # Haskell color. - typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 - # Hide haskell version if it doesn't come from one of these sources. - # - # shell: version is set by STACK_YAML - # local: version is set by stack.yaml up the directory tree - # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) - typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) - # If set to false, hide haskell version if it's the same as in the implicit global project. - typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true - # Custom icon. - # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# - # Show kubecontext only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show kubecontext. - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' - - # Kubernetes context classes for the purpose of using different colors, icons and expansions with - # different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current kubernetes context gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current kubernetes context is "deathray-testing/default", its class is TEST - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 - # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext - # segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # Within the expansion the following parameters are always available: - # - # - P9K_CONTENT The content that would've been displayed if there was no content - # expansion defined. - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE - # in the output of `kubectl config get-contexts`. If there is no - # namespace, the parameter is set to "default". - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the - # output of `kubectl config get-contexts`. - # - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), - # the following extra parameters are available: - # - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. - # - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=gke - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - # - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=eks - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' - # Append the current context's namespace if it's not "default". - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' - - # Custom prefix. - # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' - - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# - # Don't show terraform workspace if it's literally "default". - typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current terraform workspace gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' OTHER) - # - # If your current terraform workspace is "project_test", its class is TEST because "project_test" - # doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' OTHER) - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ terraform_version: terraform version (https://www.terraform.io) ]############## - # Terraform version color. - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# - # Show aws only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show aws. - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' - - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current AWS profile gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current AWS profile is "company_test", its class is TEST - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # AWS segment format. The following parameters are available within the expansion. - # - # - P9K_AWS_PROFILE The name of the current AWS profile. - # - P9K_AWS_REGION The region associated with the current AWS profile. - typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' - - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# - # AWS Elastic Beanstalk environment color. - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## - # Show azure only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show azure. - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' - # Azure account name color. - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 - # Custom icon. - # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### - # Show gcloud only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show gcloud. - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' - # Google cloud color. - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 - - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or - # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative - # enough. You can use the following parameters in the expansions. Each of them corresponds to the - # output of `gcloud` tool. - # - # Parameter | Source - # -------------------------|-------------------------------------------------------------------- - # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' - # P9K_GCLOUD_ACCOUNT | gcloud config get-value account - # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project - # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. - # - # Obtaining project name requires sending a request to Google servers. This can take a long time - # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud - # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets - # set and gcloud prompt segment transitions to state COMPLETE. - # - # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL - # and COMPLETE. You can also hide gcloud in state PARTIAL by setting - # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and - # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. - typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' - typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' - - # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name - # this often. Negative value disables periodic polling. In this mode project name is retrieved - # only when the current configuration, account or project id changes. - typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 - - # Custom icon. - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# - # Show google_app_cred only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show google_app_cred. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' - - # Google application credentials classes for the purpose of using different colors, icons and - # expansions with different credentials. - # - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first - # element in each pair defines a pattern against which the current kubernetes context gets - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION - # parameters, you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. - # The first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD - # '*:*test*:*' TEST - # '*' DEFAULT) - # - # If your current Google application credentials is "service_account deathray-testing x@y.com", - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD # These values are examples that are unlikely - # '*:*test*:*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # You can use the following parameters in the expansion. Each of them corresponds to one of the - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. - # - # Parameter | JSON key file field - # ---------------------------------+--------------- - # P9K_GOOGLE_APP_CRED_TYPE | type - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' - - ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### - # Toolbox color. - typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 - # Don't display the name of the toolbox if it matches fedora-toolbox-*. - typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' - # Custom icon. - # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin ' - - ###############################[ public_ip: public IP address ]############################### - # Public IP color. - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 - # Custom icon. - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ########################[ vpn_ip: virtual private network indicator ]######################### - # VPN IP color. - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 - # When on VPN, show just an icon without the IP address. - # Tip: To display the private IP address when on VPN, remove the next line. - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN - # to see the name of the interface. - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' - # If set to true, show one segment per matching network interface. If set to false, show only - # one segment corresponding to the first matching network interface. - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false - # Custom icon. - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### - # IP color. - typeset -g POWERLEVEL9K_IP_FOREGROUND=38 - # The following parameters are accessible within the expansion: - # - # Parameter | Meaning - # ----------------------+------------------------------------------- - # P9K_IP_IP | IP address - # P9K_IP_INTERFACE | network interface - # P9K_IP_RX_BYTES | total number of bytes received - # P9K_IP_TX_BYTES | total number of bytes sent - # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt - # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt - # P9K_IP_RX_RATE | receive rate (since last prompt) - # P9K_IP_TX_RATE | send rate (since last prompt) - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %70F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %215F⇡$P9K_IP_TX_RATE}' - # Show information for the first network interface whose name matches this regular expression. - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. - typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' - # Custom icon. - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #########################[ proxy: system-wide http/https/ftp proxy ]########################## - # Proxy color. - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ battery: internal battery ]################################# - # Show battery in red when it's below this level and not connected to power supply. - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 - # Show battery in green when it's charging or fully charged. - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 - # Show battery in yellow when it's discharging. - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 - # Battery pictograms going from low to high level of charge. - typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') - # Don't show the remaining time to charge/discharge. - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false - - #####################################[ wifi: wifi speed ]##################################### - # WiFi color. - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). - # - # # Wifi colors and icons for different signal strength levels (low to high). - # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values - # - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' - # - # The following parameters are accessible within the expansions: - # - # Parameter | Meaning - # ----------------------+--------------- - # P9K_WIFI_SSID | service set identifier, a.k.a. network name - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) - - ####################################[ time: current time ]#################################### - # Current time color. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - # Custom icon. - # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' - - # Example of a user-defined prompt segment. Function prompt_example will be called on every - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. - # - # Type `p10k help segment` for documentation and a more sophisticated example. - function prompt_example() { - p10k segment -f 208 -i '⭐' -t 'hello, %n' - } - - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job - # is to generate the prompt segment for display in instant prompt. See - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k - # will replay these calls without actually calling instant_prompt_*. It is imperative that - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this - # rule is not observed, the content of instant prompt will be incorrect. - # - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. - function instant_prompt_example() { - # Since prompt_example always makes the same `p10k segment` calls, we can call it from - # instant_prompt_example. This will give us the same `example` prompt segment in the instant - # and regular prompts. - prompt_example - } - - # User-defined prompt segments can be customized the same way as built-in segments. - # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh deleted file mode 100644 index 97c1a20..0000000 --- a/airootfs/etc/skel/powerlevel10k/config/p10k-pure.zsh +++ /dev/null @@ -1,193 +0,0 @@ -# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure). -# -# Differences from Pure: -# -# - Git: -# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state. -# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`). -# -# Apart from the differences listed above, the replication of Pure prompt is exact. This includes -# even the questionable parts. For example, just like in Pure, there is no indication of Git status -# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt -# doesn't fit on one line, it wraps around with no attempt to shorten it. -# -# If you like the general style of Pure but not particularly attached to all its quirks, type -# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking -# advantage of Powerlevel10k features that aren't present in Pure. - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return - - # Prompt colors. - local grey=242 - local red=1 - local yellow=3 - local blue=4 - local magenta=5 - local cyan=6 - local white=7 - - # Left prompt segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - context # user@host - dir # current directory - vcs # git status - command_execution_time # previous command duration - # =========================[ Line #2 ]========================= - newline # \n - virtualenv # python virtual environment - prompt_char # prompt symbol - ) - - # Right prompt segments. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - # command_execution_time # previous command duration - # virtualenv # python virtual environment - # context # user@host - # time # current time - # =========================[ Line #2 ]========================= - newline # \n - ) - - # Basic style options that define the overall prompt look. - typeset -g POWERLEVEL9K_BACKGROUND= # transparent background - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol - typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons - - # Add an empty line before each prompt except the first. This doesn't emulate the bug - # in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Magenta prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode is the same as in command mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮' - # Prompt symbol in overwrite vi mode is the same as in command mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false - - # Grey Python Virtual Environment. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey - # Don't show Python version. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - - # Blue current directory. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue - - # Context format when root: user@host. The first part white, the rest grey. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f" - # Context format when not root: user@host. The whole thing grey. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f" - # Don't show context unless root or in SSH. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION= - - # Show previous command duration only if it's >= 5s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5 - # Don't show fractional seconds. Thus, 7s rather than 7.3s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Yellow previous command duration. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow - - # Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones. - typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey - - # Disable async loading indicator to make directories that aren't Git repositories - # indistinguishable from large Git repositories without known state. - typeset -g POWERLEVEL9K_VCS_LOADING_TEXT= - - # Don't wait for Git status even for a millisecond, so that prompt always updates - # asynchronously when Git state changes. - typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0 - - # Cyan ahead/behind arrows. - typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan - # Don't show remote branch, current tag or stashes. - typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind) - # Don't show the branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= - # When in detached HEAD state, show @commit where branch normally goes. - typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@' - # Don't show staged, unstaged, untracked indicators. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON= - # Show '*' when there are staged, unstaged or untracked files. - typeset -g POWERLEVEL9K_VCS_DIRTY_ICON='*' - # Show '⇣' if local branch is behind remote. - typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣' - # Show '⇡' if local branch is ahead of remote. - typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡' - # Don't show the number of commits next to the ahead/behind arrows. - typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1 - # Remove space between '⇣' and '⇡' and all trailing spaces. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }' - - # Grey current time. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands rather than the end times of - # their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh deleted file mode 100644 index e989b0a..0000000 --- a/airootfs/etc/skel/powerlevel10k/config/p10k-rainbow.zsh +++ /dev/null @@ -1,1757 +0,0 @@ -# Config for Powerlevel10k with powerline prompt style with colorful background. -# Type `p10k configure` to generate your own config based on it. -# -# Tip: Looking for a nice color? Here's a one-liner to print colormap. -# -# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. This allows you to apply configuration changes without - # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return - - # The list of segments shown on the left. Fill it with the most important segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - # os_icon # os identifier - dir # current directory - vcs # git status - # =========================[ Line #2 ]========================= - newline # \n - # prompt_char # prompt symbol - ) - - # The list of segments shown on the right. Fill it with less important segments. - # Right prompt on the last prompt line (where you are typing your commands) gets - # automatically hidden when the input line reaches it. Right prompt above the - # last prompt line gets hidden if it would overlap with left prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - status # exit code of the last command - command_execution_time # duration of the last command - background_jobs # presence of background jobs - direnv # direnv status (https://direnv.net/) - asdf # asdf version manager (https://github.com/asdf-vm/asdf) - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) - anaconda # conda environment (https://conda.io/) - pyenv # python environment (https://github.com/pyenv/pyenv) - goenv # go environment (https://github.com/syndbg/goenv) - nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) - nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) - nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) - # node_version # node.js version - # go_version # go version (https://golang.org) - # rust_version # rustc version (https://www.rust-lang.org) - # dotnet_version # .NET version (https://dotnet.microsoft.com) - # php_version # php version (https://www.php.net/) - # laravel_version # laravel php framework version (https://laravel.com/) - # java_version # java version (https://www.java.com/) - # package # name@version from package.json (https://docs.npmjs.com/files/package.json) - rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) - rvm # ruby version from rvm (https://rvm.io) - fvm # flutter version management (https://github.com/leoafarias/fvm) - luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) - jenv # java version from jenv (https://github.com/jenv/jenv) - plenv # perl version from plenv (https://github.com/tokuhirom/plenv) - perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) - phpenv # php version from phpenv (https://github.com/phpenv/phpenv) - scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) - haskell_stack # haskell version from stack (https://haskellstack.org/) - kubecontext # current kubernetes context (https://kubernetes.io/) - terraform # terraform workspace (https://www.terraform.io) - # terraform_version # terraform version (https://www.terraform.io) - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) - aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) - gcloud # google cloud cli account and project (https://cloud.google.com/) - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) - toolbox # toolbox name (https://github.com/containers/toolbox) - context # user@hostname - nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) - ranger # ranger shell (https://github.com/ranger/ranger) - nnn # nnn shell (https://github.com/jarun/nnn) - lf # lf shell (https://github.com/gokcehan/lf) - xplr # xplr shell (https://github.com/sayanarijit/xplr) - vim_shell # vim shell indicator (:sh) - midnight_commander # midnight commander shell (https://midnight-commander.org/) - nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) - # vi_mode # vi mode (you don't need this if you've enabled prompt_char) - # vpn_ip # virtual private network indicator - # load # CPU load - # disk_usage # disk usage - # ram # free RAM - # swap # used swap - todo # todo items (https://github.com/todotxt/todo.txt-cli) - timewarrior # timewarrior tracking status (https://timewarrior.net/) - taskwarrior # taskwarrior task count (https://taskwarrior.org/) - # cpu_arch # CPU architecture - # time # current time - # =========================[ Line #2 ]========================= - newline - # ip # ip address and bandwidth usage for a specified network interface - # public_ip # public IP address - # proxy # system-wide http/https/ftp proxy - # battery # internal battery - # wifi # wifi speed - # example # example user-defined segment (see prompt_example function below) - ) - - # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. - typeset -g POWERLEVEL9K_MODE=nerdfont-complete - # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid - # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. - typeset -g POWERLEVEL9K_ICON_PADDING=none - - # When set to true, icons appear before content on both sides of the prompt. When set - # to false, icons go after content. If empty or not set, icons go before content in the left - # prompt and after content in the right prompt. - # - # You can also override it for a specific segment: - # - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false - # - # Or for a specific segment in specific state: - # - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= - - # Add an empty line before each prompt. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Connect left prompt lines with these symbols. You'll probably want to use the same color - # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' - # Connect right prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%242F─╮' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%242F─┤' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%242F─╯' - - # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or - # '─'. The last two make it easier to see the alignment between left and right prompt and to - # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false - # for more compact prompt if using this option. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then - # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE - # ornaments defined above. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 - # Start filler from the edge of the screen if there are no left segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' - # End filler on the edge of the screen if there are no right segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' - fi - - # Separator between same-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1' - # Separator between same-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3' - # Separator between different-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' - # Separator between different-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' - # The right end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' - # The left end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' - # The left end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # The right end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= - # Left prompt terminator for lines without any segments. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - - #################################[ os_icon: os identifier ]################################## - # OS identifier color. - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=232 - typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=7 - # Custom icon. - # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' - - ################################[ prompt_char: prompt symbol ]################################ - # Transparent background. - typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' - # Prompt symbol in overwrite vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true - # No line terminator if prompt_char is the last segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - # No line introducer if prompt_char is the first segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # No surrounding whitespace. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= - - ##################################[ dir: current directory ]################################## - # Current directory background color. - typeset -g POWERLEVEL9K_DIR_BACKGROUND=4 - # Default current directory foreground color. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=254 - # If directory is too long, shorten some of its segments to the shortest possible unique - # prefix. The shortened directory can be tab-completed to the original. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique - # Replace removed segment suffixes with this symbol. - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= - # Color of the shortened directory segments. - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250 - # Color of the anchor directory segments. Anchor segments are never shortened. The first - # segment is always an anchor. - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255 - # Display anchor directory segments in bold. - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true - # Don't shorten directories that contain any of these files. They are anchors. - local anchor_files=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .go-version - .ruby-version - .lua-version - .java-version - .perl-version - .php-version - .tool-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - stack.yaml - ) - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" - # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains - # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is - # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) - # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers - # and other directories don't. - # - # Optionally, "first" and "last" can be followed by ":" where is an integer. - # This moves the truncation point to the right (positive offset) or to the left (negative offset) - # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" - # respectively. - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false - # Don't shorten this many last directory segments. They are anchors. - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - # Shorten directory if it's longer than this even if there is space for it. The value can - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, - # directory will be shortened only when prompt doesn't fit or when other parameters demand it - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). - # If set to `0`, directory will always be shortened to its minimum length. - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this - # many columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 - # If set to true, embed a hyperlink into the directory. Useful for quickly - # opening a directory in the file manager simply by clicking the link. - # Can also be handy when the directory is shortened, as it allows you to see - # the full directory that was used in previous commands. - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false - - # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON - # and POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 - - # The default icon shown next to non-writable and non-existent directories when - # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. - # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' - - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different - # directories. It must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. An empty string. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. - # - # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories - # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=( - # '~/work(|/*)' WORK '' - # '~(|/*)' HOME '' - # '*' DEFAULT '') - # - # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one - # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or - # WORK_NON_EXISTENT. - # - # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an - # option to define custom colors and icons for different directory classes. - # - # # Styling for WORK. - # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255 - # - # # Styling for WORK_NOT_WRITABLE. - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=254 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=250 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=255 - # - # # Styling for WORK_NON_EXISTENT. - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255 - # - # If a styling parameter isn't explicitly defined for some class, it falls back to the classless - # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls - # back to POWERLEVEL9K_DIR_FOREGROUND. - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=() - - # Custom prefix. - # typeset -g POWERLEVEL9K_DIR_PREFIX='in ' - - #####################################[ vcs: git status ]###################################### - # Version control background colors. - typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2 - typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2 - typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3 - typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8 - - # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= - - # Untracked files icon. It's really a question mark, your font isn't broken. - # Change the value of this parameter to show a different icon. - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' - - # Formatter for Git status. - # - # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. - # - # You can edit the function to customize how Git status looks. - # - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - function my_git_formatter() { - emulate -L zsh - - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - return - fi - - # Styling for different parts of Git status. - local meta='%7F' # white foreground - local clean='%0F' # black foreground - local modified='%0F' # black foreground - local untracked='%0F' # black foreground - local conflicted='%1F' # red foreground - - local res - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=${(V)VCS_STATUS_LOCAL_BRANCH} - # If local branch name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show local branch name in full without truncation, delete the next line. - (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line - res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" - fi - - if [[ -n $VCS_STATUS_TAG - # Show tag only if not on a branch. - # Tip: To always show tag, delete the next line. - && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line - ]]; then - local tag=${(V)VCS_STATUS_TAG} - # If tag name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show tag name in full without truncation, delete the next line. - (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line - res+="${meta}#${clean}${tag//\%/%%}" - fi - - # Display the current Git commit if there is no branch and no tag. - # Tip: To always display the current Git commit, delete the next line. - [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line - res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" - - # Show tracking branch name if it differs from local branch. - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - - # Display "wip" if the latest commit's summary contains "wip" or "WIP". - if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then - res+=" ${modified}wip" - fi - - # ⇣42 if behind the remote. - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" - # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" - # ⇠42 if behind the push remote. - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " - # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" - # *42 if have stashes. - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" - # 'merge' if the repo is in an unusual state. - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" - # ~42 if have merge conflicts. - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" - # +42 if have staged changes. - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" - # !42 if have unstaged changes. - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" - # ?42 if have untracked files. It's really a question mark, your font isn't broken. - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. - # Remove the next line if you don't want to see untracked files at all. - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" - # "─" if the number of unstaged files is unknown. This can happen due to - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower - # than the number of files in the Git index, or due to bash.showDirtyState being set to false - # in the repository config. The number of staged and untracked files may also be unknown - # in this case. - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" - - typeset -g my_git_format=$res - } - functions -M my_git_formatter 2>/dev/null - - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with - # more than this many files in the index. Negative value means infinity. - # - # If you are working in Git repositories with tens of millions of files and seeing performance - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's - # config: `git config bash.showDirtyState false`. - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 - - # Don't show Git status in prompt for repositories whose workdir matches this pattern. - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. - # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' - # Enable counters for staged, unstaged, etc. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 - - # Custom icon. - # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_VCS_PREFIX='on ' - - # Show status of repositories of these types. You can add svn and/or hg if you are - # using them. If you do, your prompt may become slow even when your current directory - # isn't in an svn or hg repository. - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) - - ##########################[ status: exit code of the last command ]########################### - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and - # style them independently from the regular OK and ERROR state. - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true - - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as - # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=true - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 - typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0 - - # Status when some part of a pipe command fails but the overall exit status is zero. It may look - # like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0 - - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as - # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=true - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 - typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 - - # Status when the last command was terminated by a signal. - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true - # Use terse signal names: "INT" instead of "SIGINT(2)". - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 - - # Status when some part of a pipe command fails and the overall exit status is also non-zero. - # It may look like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 - - ###################[ command_execution_time: duration of the last command ]################### - # Execution time color. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0 - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3 - # Show duration of the last command if takes at least this many seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 - # Show this many fractional digits. Zero means round to seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Custom icon. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took ' - - #######################[ background_jobs: presence of background jobs ]####################### - # Background jobs color. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6 - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0 - # Don't show the number of background jobs. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false - # Custom icon. - # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ direnv: direnv status (https://direnv.net/) ]######################## - # Direnv color. - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 - typeset -g POWERLEVEL9K_DIRENV_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### - # Default asdf color. Only used to display tools for which there is no color override (see below). - # Tip: Override these parameters for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND and - # POWERLEVEL9K_ASDF_${TOOL}_BACKGROUND. - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_BACKGROUND=7 - - # There are four parameters that can be used to hide asdf tools. Each parameter describes - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to - # hide a tool, it gets shown. - # - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: - # - # asdf local python 3.8.1 - # asdf global python 3.8.1 - # - # After running both commands the current python version is 3.8.1 and its source is "local" as - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, - # it'll hide python version in this case because 3.8.1 is the same as the global version. - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't - # contain "local". - - # Hide tool versions that don't come from one of these sources. - # - # Available sources: - # - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" - # - local `asdf current` says "set by /some/not/home/directory/file" - # - global `asdf current` says "set by /home/username/file" - # - # Note: If this parameter is set to (shell local global), it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) - - # If set to false, hide tool versions that are the same as global. - # - # Note: The name of this parameter doesn't reflect its meaning at all. - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false - - # If set to false, hide tool versions that are equal to "system". - # - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true - - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern - # in the current directory, or its parent directory, or its grandparent directory, and so on. - # - # Note: If this parameter is set to empty value, it won't hide tools. - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. - # - # Example: Hide nodejs version when there is no package.json and no *.js files in the current - # directory, in `..`, in `../..` and so on. - # - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= - - # Ruby version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_RUBY_BACKGROUND=1 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Python version from asdf. - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_PYTHON_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Go version from asdf. - typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_GOLANG_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Node.js version from asdf. - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_NODEJS_BACKGROUND=2 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Rust version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_RUST_BACKGROUND=208 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' - - # .NET Core version from asdf. - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_BACKGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Flutter version from asdf. - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_FLUTTER_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Lua version from asdf. - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_LUA_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Java version from asdf. - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=1 - typeset -g POWERLEVEL9K_ASDF_JAVA_BACKGROUND=7 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Perl version from asdf. - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_PERL_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Erlang version from asdf. - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_ERLANG_BACKGROUND=1 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Elixir version from asdf. - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_ELIXIR_BACKGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Postgres version from asdf. - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_POSTGRES_BACKGROUND=6 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' - - # PHP version from asdf. - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_PHP_BACKGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Haskell version from asdf. - typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_HASKELL_BACKGROUND=3 - # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Julia version from asdf. - typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_JULIA_BACKGROUND=2 - # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' - - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### - # NordVPN connection indicator color. - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7 - typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4 - # Hide NordVPN connection indicator when not connected. - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= - # Custom icon. - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## - # Ranger shell color. - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 - typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### - # Nnn shell color. - typeset -g POWERLEVEL9K_NNN_FOREGROUND=0 - typeset -g POWERLEVEL9K_NNN_BACKGROUND=6 - # Custom icon. - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### - # lf shell color. - typeset -g POWERLEVEL9K_LF_FOREGROUND=0 - typeset -g POWERLEVEL9K_LF_BACKGROUND=6 - # Custom icon. - # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## - # xplr shell color. - typeset -g POWERLEVEL9K_XPLR_FOREGROUND=0 - typeset -g POWERLEVEL9K_XPLR_BACKGROUND=6 - # Custom icon. - # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### - # Vim shell indicator color. - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=0 - typeset -g POWERLEVEL9K_VIM_SHELL_BACKGROUND=2 - # Custom icon. - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### - # Midnight Commander shell color. - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## - # Nix shell color. - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0 - typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4 - - # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store. - # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false - - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ disk_usage: disk usage ]################################## - # Colors for different levels of disk usage. - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=3 - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=0 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=0 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=3 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=7 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=1 - # Thresholds for different levels of disk usage (percentage points). - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false - # Custom icon. - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### - # Foreground color. - typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0 - # Text and color for normal (a.k.a. command) vi mode. - typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL - typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2 - # Text and color for visual vi mode. - typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL - typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4 - # Text and color for overtype (a.k.a. overwrite and replace) vi mode. - typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE - typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3 - # Text and color for insert vi mode. - typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= - typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8 - - ######################################[ ram: free RAM ]####################################### - # RAM color. - typeset -g POWERLEVEL9K_RAM_FOREGROUND=0 - typeset -g POWERLEVEL9K_RAM_BACKGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################################[ swap: used swap ]###################################### - # Swap color. - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=0 - typeset -g POWERLEVEL9K_SWAP_BACKGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ load: CPU load ]###################################### - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. - typeset -g POWERLEVEL9K_LOAD_WHICH=5 - # Load color when load is under 50%. - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0 - typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2 - # Load color when load is between 50% and 70%. - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0 - typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3 - # Load color when load is over 70%. - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0 - typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1 - # Custom icon. - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ - # Todo color. - typeset -g POWERLEVEL9K_TODO_FOREGROUND=0 - typeset -g POWERLEVEL9K_TODO_BACKGROUND=8 - # Hide todo when the total number of tasks is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true - # Hide todo when the number of tasks after filtering is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false - - # Todo format. The following parameters are available within the expansion. - # - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. - # - # These variables correspond to the last line of the output of `todo.sh -p ls`: - # - # TODO: 24 of 42 tasks shown - # - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. - # - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ - # Timewarrior color. - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=255 - typeset -g POWERLEVEL9K_TIMEWARRIOR_BACKGROUND=8 - - # If the tracked task is longer than 24 characters, truncate and append "…". - # Tip: To always display tasks without truncation, delete the following parameter. - # Tip: To hide task names and display just the icon when time tracking is enabled, set the - # value of the following parameter to "". - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' - - # Custom icon. - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## - # Taskwarrior color. - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=0 - typeset -g POWERLEVEL9K_TASKWARRIOR_BACKGROUND=6 - - # Taskwarrior segment format. The following parameters are available within the expansion. - # - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. - # - # Zero values are represented as empty parameters. - # - # The default format: - # - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' - # - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ cpu_arch: CPU architecture ]################################ - # CPU architecture color. - typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=0 - typeset -g POWERLEVEL9K_CPU_ARCH_BACKGROUND=3 - - # Hide the segment when on a specific CPU architecture. - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ context: user@hostname ]################################## - # Context color when running with privileges. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 - typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0 - # Context color in SSH without privileges. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=3 - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_BACKGROUND=0 - # Default context color (no privileges, no SSH). - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3 - typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0 - - # Context format when running with privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m' - # Context format when in SSH without privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' - # Default context format (no privileges, no SSH): user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' - - # Don't show context unless running with privileges or in SSH. - # Tip: Remove the next line to always show context. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with ' - - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### - # Python virtual environment color. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4 - # Don't show Python version next to the virtual environment name. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - # If set to "false", won't show virtualenv if pyenv is already shown. - # If set to "if-different", won't show virtualenv if it's the same as pyenv. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false - # Separate environment name from Python version only with a space. - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ anaconda: conda environment (https://conda.io/) ]###################### - # Anaconda environment color. - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0 - typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4 - - # Anaconda segment format. The following parameters are available within the expansion. - # - # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. - # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. - # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). - # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). - # - # CONDA_PROMPT_MODIFIER can be configured with the following command: - # - # conda config --set env_prompt '({default_env}) ' - # - # The last argument is a Python format string that can use the following variables: - # - # - prefix The same as CONDA_PREFIX. - # - default_env The same as CONDA_DEFAULT_ENV. - # - name The last segment of CONDA_PREFIX. - # - stacked_env Comma-separated list of names in the environment stack. The first element is - # always the same as default_env. - # - # Note: '({default_env}) ' is the default value of env_prompt. - # - # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER - # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former - # is empty. - typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' - - # Custom icon. - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ - # Pyenv color. - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4 - # Hide python version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) - # If set to false, hide python version if it's the same as global: - # $(pyenv version-name) == $(pyenv global). - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide python version if it's equal to "system". - typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true - - # Pyenv segment format. The following parameters are available within the expansion. - # - # - P9K_CONTENT Current pyenv environment (pyenv version-name). - # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). - # - # The default format has the following logic: - # - # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or - # starts with "$P9K_PYENV_PYTHON_VERSION/". - # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". - typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ - # Goenv color. - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_GOENV_BACKGROUND=4 - # Hide go version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) - # If set to false, hide go version if it's the same as global: - # $(goenv version-name) == $(goenv global). - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide go version if it's equal to "system". - typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## - # Nodenv color. - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 - typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0 - # Hide node version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) - # If set to false, hide node version if it's the same as global: - # $(nodenv version-name) == $(nodenv global). - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide node version if it's equal to "system". - typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### - # Nvm color. - typeset -g POWERLEVEL9K_NVM_FOREGROUND=0 - typeset -g POWERLEVEL9K_NVM_BACKGROUND=5 - # Custom icon. - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ - # Nodeenv color. - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 - typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0 - # Don't show Node version next to the environment name. - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false - # Separate environment name from Node version only with a space. - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############################[ node_version: node.js version ]############################### - # Node version color. - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7 - typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2 - # Show node version only when in a directory tree containing package.json. - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ go_version: go version (https://golang.org) ]######################## - # Go version color. - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255 - typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2 - # Show go version only when in a go project subdirectory. - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## - # Rust version color. - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0 - typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208 - # Show rust version only when in a rust project subdirectory. - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ - # .NET version color. - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7 - typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5 - # Show .NET version only when in a .NET project subdirectory. - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ php_version: php version (https://www.php.net/) ]###################### - # PHP version color. - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=0 - typeset -g POWERLEVEL9K_PHP_VERSION_BACKGROUND=5 - # Show PHP version only when in a PHP project subdirectory. - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### - # Laravel version color. - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 - typeset -g POWERLEVEL9K_LARAVEL_VERSION_BACKGROUND=7 - # Custom icon. - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## - # Rbenv color. - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1 - # Hide ruby version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) - # If set to false, hide ruby version if it's the same as global: - # $(rbenv version-name) == $(rbenv global). - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide ruby version if it's equal to "system". - typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ####################[ java_version: java version (https://www.java.com/) ]#################### - # Java version color. - typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=1 - typeset -g POWERLEVEL9K_JAVA_VERSION_BACKGROUND=7 - # Show java version only when in a java project subdirectory. - typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true - # Show brief version. - typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false - # Custom icon. - # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### - # Package color. - typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=0 - typeset -g POWERLEVEL9K_PACKAGE_BACKGROUND=6 - - # Package format. The following parameters are available within the expansion. - # - # - P9K_PACKAGE_NAME The value of `name` field in package.json. - # - P9K_PACKAGE_VERSION The value of `version` field in package.json. - # - # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## - # Rvm color. - typeset -g POWERLEVEL9K_RVM_FOREGROUND=0 - typeset -g POWERLEVEL9K_RVM_BACKGROUND=240 - # Don't show @gemset at the end. - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false - # Don't show ruby- at the front. - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ - # Fvm color. - typeset -g POWERLEVEL9K_FVM_FOREGROUND=0 - typeset -g POWERLEVEL9K_FVM_BACKGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### - # Lua color. - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_LUAENV_BACKGROUND=4 - # Hide lua version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) - # If set to false, hide lua version if it's the same as global: - # $(luaenv version-name) == $(luaenv global). - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide lua version if it's equal to "system". - typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ - # Java color. - typeset -g POWERLEVEL9K_JENV_FOREGROUND=1 - typeset -g POWERLEVEL9K_JENV_BACKGROUND=7 - # Hide java version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) - # If set to false, hide java version if it's the same as global: - # $(jenv version-name) == $(jenv global). - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide java version if it's equal to "system". - typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ - # Perl color. - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_PLENV_BACKGROUND=4 - # Hide perl version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) - # If set to false, hide perl version if it's the same as global: - # $(plenv version-name) == $(plenv global). - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide perl version if it's equal to "system". - typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ - # Perlbrew color. - typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 - # Show perlbrew version only when in a perl project subdirectory. - typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true - # Don't show "perl-" at the front. - typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ - # PHP color. - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_PHPENV_BACKGROUND=5 - # Hide php version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) - # If set to false, hide php version if it's the same as global: - # $(phpenv version-name) == $(phpenv global). - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide PHP version if it's equal to "system". - typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### - # Scala color. - typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_SCALAENV_BACKGROUND=1 - # Hide scala version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) - # If set to false, hide scala version if it's the same as global: - # $(scalaenv version-name) == $(scalaenv global). - typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide scala version if it's equal to "system". - typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### - # Haskell color. - typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=0 - typeset -g POWERLEVEL9K_HASKELL_STACK_BACKGROUND=3 - - # Hide haskell version if it doesn't come from one of these sources. - # - # shell: version is set by STACK_YAML - # local: version is set by stack.yaml up the directory tree - # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) - typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) - # If set to false, hide haskell version if it's the same as in the implicit global project. - typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true - # Custom icon. - # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# - # Don't show terraform workspace if it's literally "default". - typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current terraform workspace gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' OTHER) - # - # If your current terraform workspace is "project_test", its class is TEST because "project_test" - # doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_BACKGROUND=0 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' OTHER) - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_BACKGROUND=0 - # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ terraform_version: terraform version (https://www.terraform.io) ]############## - # Terraform version color. - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ terraform_version: It shows active terraform version (https://www.terraform.io) ]################# - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_SHOW_ON_COMMAND='terraform|tf' - - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# - # Show kubecontext only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show kubecontext. - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor' - - # Kubernetes context classes for the purpose of using different colors, icons and expansions with - # different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current kubernetes context gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current kubernetes context is "deathray-testing/default", its class is TEST - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5 - # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext - # segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # Within the expansion the following parameters are always available: - # - # - P9K_CONTENT The content that would've been displayed if there was no content - # expansion defined. - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE - # in the output of `kubectl config get-contexts`. If there is no - # namespace, the parameter is set to "default". - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the - # output of `kubectl config get-contexts`. - # - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), - # the following extra parameters are available: - # - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. - # - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=gke - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - # - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=eks - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' - # Append the current context's namespace if it's not "default". - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' - - # Custom prefix. - # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at ' - - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# - # Show aws only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show aws. - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' - - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current AWS profile gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current AWS profile is "company_test", its class is TEST - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=7 - typeset -g POWERLEVEL9K_AWS_DEFAULT_BACKGROUND=1 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # AWS segment format. The following parameters are available within the expansion. - # - # - P9K_AWS_PROFILE The name of the current AWS profile. - # - P9K_AWS_REGION The region associated with the current AWS profile. - typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' - - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# - # AWS Elastic Beanstalk environment color. - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 - typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## - # Show azure only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show azure. - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' - # Azure account name color. - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=7 - typeset -g POWERLEVEL9K_AZURE_BACKGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### - # Show gcloud only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show gcloud. - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' - # Google cloud color. - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=7 - typeset -g POWERLEVEL9K_GCLOUD_BACKGROUND=4 - - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or - # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative - # enough. You can use the following parameters in the expansions. Each of them corresponds to the - # output of `gcloud` tool. - # - # Parameter | Source - # -------------------------|-------------------------------------------------------------------- - # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' - # P9K_GCLOUD_ACCOUNT | gcloud config get-value account - # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project - # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. - # - # Obtaining project name requires sending a request to Google servers. This can take a long time - # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud - # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets - # set and gcloud prompt segment transitions to state COMPLETE. - # - # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL - # and COMPLETE. You can also hide gcloud in state PARTIAL by setting - # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and - # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. - typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' - typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' - - # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name - # this often. Negative value disables periodic polling. In this mode project name is retrieved - # only when the current configuration, account or project id changes. - typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 - - # Custom icon. - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# - # Show google_app_cred only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show google_app_cred. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' - - # Google application credentials classes for the purpose of using different colors, icons and - # expansions with different credentials. - # - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first - # element in each pair defines a pattern against which the current kubernetes context gets - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION - # parameters, you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. - # The first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD - # '*:*test*:*' TEST - # '*' DEFAULT) - # - # If your current Google application credentials is "service_account deathray-testing x@y.com", - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD # These values are examples that are unlikely - # '*:*test*:*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=7 - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_BACKGROUND=4 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # You can use the following parameters in the expansion. Each of them corresponds to one of the - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. - # - # Parameter | JSON key file field - # ---------------------------------+--------------- - # P9K_GOOGLE_APP_CRED_TYPE | type - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' - - ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### - # Toolbox color. - typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=0 - typeset -g POWERLEVEL9K_TOOLBOX_BACKGROUND=3 - # Don't display the name of the toolbox if it matches fedora-toolbox-*. - typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' - # Custom icon. - # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='in ' - - ###############################[ public_ip: public IP address ]############################### - # Public IP color. - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7 - typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ########################[ vpn_ip: virtual private network indicator ]######################### - # VPN IP color. - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0 - typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6 - # When on VPN, show just an icon without the IP address. - # Tip: To display the private IP address when on VPN, remove the next line. - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN - # to see the name of the interface. - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)' - # If set to true, show one segment per matching network interface. If set to false, show only - # one segment corresponding to the first matching network interface. - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false - # Custom icon. - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### - # IP color. - typeset -g POWERLEVEL9K_IP_BACKGROUND=4 - typeset -g POWERLEVEL9K_IP_FOREGROUND=0 - # The following parameters are accessible within the expansion: - # - # Parameter | Meaning - # ----------------------+------------------------------------------- - # P9K_IP_IP | IP address - # P9K_IP_INTERFACE | network interface - # P9K_IP_RX_BYTES | total number of bytes received - # P9K_IP_TX_BYTES | total number of bytes sent - # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt - # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt - # P9K_IP_RX_RATE | receive rate (since last prompt) - # P9K_IP_TX_RATE | send rate (since last prompt) - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+⇡$P9K_IP_TX_RATE }$P9K_IP_IP' - # Show information for the first network interface whose name matches this regular expression. - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. - typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' - # Custom icon. - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #########################[ proxy: system-wide http/https/ftp proxy ]########################## - # Proxy color. - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4 - typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ battery: internal battery ]################################# - # Show battery in red when it's below this level and not connected to power supply. - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 - # Show battery in green when it's charging or fully charged. - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 - # Show battery in yellow when it's discharging. - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 - # Battery pictograms going from low to high level of charge. - typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}▁' '%K{232}▂' '%K{232}▃' '%K{232}▄' '%K{232}▅' '%K{232}▆' '%K{232}▇' '%K{232}█') - # Don't show the remaining time to charge/discharge. - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false - typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0 - - #####################################[ wifi: wifi speed ]##################################### - # WiFi color. - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=0 - typeset -g POWERLEVEL9K_WIFI_BACKGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). - # - # # Wifi colors and icons for different signal strength levels (low to high). - # typeset -g my_wifi_fg=(0 0 0 0 0) # <-- change these values - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values - # - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' - # - # The following parameters are accessible within the expansions: - # - # Parameter | Meaning - # ----------------------+--------------- - # P9K_WIFI_SSID | service set identifier, a.k.a. network name - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) - - ####################################[ time: current time ]#################################### - # Current time color. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=0 - typeset -g POWERLEVEL9K_TIME_BACKGROUND=7 - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - # Custom icon. - # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TIME_PREFIX='at ' - - # Example of a user-defined prompt segment. Function prompt_example will be called on every - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background - # greeting the user. - # - # Type `p10k help segment` for documentation and a more sophisticated example. - function prompt_example() { - p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n' - } - - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job - # is to generate the prompt segment for display in instant prompt. See - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k - # will replay these calls without actually calling instant_prompt_*. It is imperative that - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this - # rule is not observed, the content of instant prompt will be incorrect. - # - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. - function instant_prompt_example() { - # Since prompt_example always makes the same `p10k segment` calls, we can call it from - # instant_prompt_example. This will give us the same `example` prompt segment in the instant - # and regular prompts. - prompt_example - } - - # User-defined prompt segments can be customized the same way as built-in segments. - typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=3 - typeset -g POWERLEVEL9K_EXAMPLE_BACKGROUND=1 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=off - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh b/airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh deleted file mode 100644 index a59e222..0000000 --- a/airootfs/etc/skel/powerlevel10k/config/p10k-robbyrussell.zsh +++ /dev/null @@ -1,111 +0,0 @@ -# Config file for Powerlevel10k with the style of robbyrussell theme from Oh My Zsh. -# -# Original: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#robbyrussell. -# -# Replication of robbyrussell theme is exact. The only observable difference is in -# performance. Powerlevel10k prompt is very fast everywhere, even in large Git repositories. -# -# Usage: Source this file either before or after loading Powerlevel10k. -# -# source ~/powerlevel10k/config/p10k-robbyrussell.zsh -# source ~/powerlevel10k/powerlevel10k.zsh-theme - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return - - # Left prompt segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(prompt_char dir vcs) - # Right prompt segments. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=() - - # Basic style options that define the overall prompt look. - typeset -g POWERLEVEL9K_BACKGROUND= # transparent background - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space - typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol - typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons - - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=green - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=red - # Prompt symbol: bold arrow. - typeset -g POWERLEVEL9K_PROMPT_CHAR_CONTENT_EXPANSION='%B➜ ' - - # Cyan current directory. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=cyan - # Show only the last segment of the current directory. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last - # Bold directory. - typeset -g POWERLEVEL9K_DIR_CONTENT_EXPANSION='%B$P9K_CONTENT' - - # Git status formatter. - function my_git_formatter() { - emulate -L zsh - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, it's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - else - # Use VCS_STATUS_* parameters to assemble Git status. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - typeset -g my_git_format="${1+%B%4F}git:(${1+%1F}" - my_git_format+=${${VCS_STATUS_LOCAL_BRANCH:-${VCS_STATUS_COMMIT[1,8]}}//\%/%%} - my_git_format+="${1+%4F})" - if (( VCS_STATUS_NUM_CONFLICTED || VCS_STATUS_NUM_STAGED || - VCS_STATUS_NUM_UNSTAGED || VCS_STATUS_NUM_UNTRACKED )); then - my_git_format+=" ${1+%3F}✗" - fi - fi - } - functions -M my_git_formatter 2>/dev/null - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' - typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' - # Grey Git status when loading. - typeset -g POWERLEVEL9K_VCS_LOADING_FOREGROUND=246 - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/airootfs/etc/skel/powerlevel10k/internal/configure.zsh b/airootfs/etc/skel/powerlevel10k/internal/configure.zsh deleted file mode 100644 index 3e880f2..0000000 --- a/airootfs/etc/skel/powerlevel10k/internal/configure.zsh +++ /dev/null @@ -1,85 +0,0 @@ -# Fewer than 47 columns will probably work. Haven't tried it. -typeset -gr __p9k_wizard_columns=47 -# The bottleneck is ask_tails with nerd fonts. Everything else works fine with 12 lines. -typeset -gr __p9k_wizard_lines=14 -typeset -gr __p9k_zd=${ZDOTDIR:-$HOME} -typeset -gr __p9k_zd_u=${${${(q)__p9k_zd}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%} -typeset -gr __p9k_zshrc=${${:-$__p9k_zd/.zshrc}:A} -typeset -gr __p9k_zshrc_u=$__p9k_zd_u/.zshrc -typeset -gr __p9k_root_dir_u=${${${(q)__p9k_root_dir}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%} - -function _p9k_can_configure() { - [[ $1 == '-q' ]] && local -i q=1 || local -i q=0 - function $0_error() { - (( q )) || print -rP "%1F[ERROR]%f %Bp10k configure%b: $1" >&2 - } - typeset -g __p9k_cfg_path_o=${POWERLEVEL9K_CONFIG_FILE:=${ZDOTDIR:-~}/.p10k.zsh} - typeset -g __p9k_cfg_basename=${__p9k_cfg_path_o:t} - typeset -g __p9k_cfg_path=${__p9k_cfg_path_o:A} - typeset -g __p9k_cfg_path_u=${${${(q)__p9k_cfg_path_o}/#(#b)${(q)HOME}(|\/*)/'~'$match[1]}//\%/%%} - { - [[ -o multibyte ]] || { $0_error "multibyte option is not set"; return 1 } - [[ -e $__p9k_zd ]] || { $0_error "$__p9k_zd_u does not exist"; return 1 } - [[ -d $__p9k_zd ]] || { $0_error "$__p9k_zd_u is not a directory"; return 1 } - [[ ! -d $__p9k_cfg_path ]] || { $0_error "$__p9k_cfg_path_u is a directory"; return 1 } - [[ ! -d $__p9k_zshrc ]] || { $0_error "$__p9k_zshrc_u is a directory"; return 1 } - - local dir=${__p9k_cfg_path:h} - while [[ ! -e $dir && $dir != ${dir:h} ]]; do dir=${dir:h}; done - if [[ ! -d $dir ]]; then - $0_error "cannot create $__p9k_cfg_path_u because ${dir//\%/%%} is not a directory" - return 1 - fi - if [[ ! -w $dir ]]; then - $0_error "cannot create $__p9k_cfg_path_u because ${dir//\%/%%} is readonly" - return 1 - fi - - [[ ! -e $__p9k_cfg_path || -f $__p9k_cfg_path || -h $__p9k_cfg_path ]] || { - $0_error "$__p9k_cfg_path_u is a special file" - return 1 - } - [[ ! -e $__p9k_zshrc || -f $__p9k_zshrc || -h $__p9k_zshrc ]] || { - $0_error "$__p9k_zshrc_u a special file" - return 1 - } - [[ ! -e $__p9k_zshrc || -r $__p9k_zshrc ]] || { - $0_error "$__p9k_zshrc_u is not readable" - return 1 - } - local style - for style in lean lean-8colors classic rainbow pure; do - [[ -r $__p9k_root_dir/config/p10k-$style.zsh ]] || { - $0_error "$__p9k_root_dir_u/config/p10k-$style.zsh is not readable" - return 1 - } - done - - (( LINES >= __p9k_wizard_lines && COLUMNS >= __p9k_wizard_columns )) || { - $0_error "terminal size too small; must be at least $__p9k_wizard_columns columns by $__p9k_wizard_lines lines" - return 1 - } - [[ -t 0 && -t 1 ]] || { - $0_error "no TTY" - return 2 - } - return 0 - } always { - unfunction $0_error - } -} - -function p9k_configure() { - eval "$__p9k_intro" - _p9k_can_configure || return - ( - set -- -f - builtin source $__p9k_root_dir/internal/wizard.zsh - ) - local ret=$? - case $ret in - 0) builtin source $__p9k_cfg_path; _p9k__force_must_init=1;; - 69) return 0;; - *) return $ret;; - esac -} diff --git a/airootfs/etc/skel/powerlevel10k/internal/icons.zsh b/airootfs/etc/skel/powerlevel10k/internal/icons.zsh deleted file mode 100644 index 0a6c665..0000000 --- a/airootfs/etc/skel/powerlevel10k/internal/icons.zsh +++ /dev/null @@ -1,1029 +0,0 @@ -typeset -gA icons - -function _p9k_init_icons() { - [[ -n ${POWERLEVEL9K_MODE-} || ${langinfo[CODESET]} == (utf|UTF)(-|)8 ]] || local POWERLEVEL9K_MODE=ascii - [[ $_p9k__icon_mode == $POWERLEVEL9K_MODE/$POWERLEVEL9K_LEGACY_ICON_SPACING/$POWERLEVEL9K_ICON_PADDING ]] && return - typeset -g _p9k__icon_mode=$POWERLEVEL9K_MODE/$POWERLEVEL9K_LEGACY_ICON_SPACING/$POWERLEVEL9K_ICON_PADDING - - if [[ $POWERLEVEL9K_LEGACY_ICON_SPACING == true ]]; then - local s= - local q=' ' - else - local s=' ' - local q= - fi - - case $POWERLEVEL9K_MODE in - 'flat'|'awesome-patched') - # Awesome-Patched Font required! See: - # https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched - icons=( - RULER_CHAR '\u2500' # ─ - LEFT_SEGMENT_SEPARATOR '\uE0B0' #  - RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  - LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace - LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  - RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  - CARRIAGE_RETURN_ICON '\u21B5'$s # ↵ - ROOT_ICON '\uE801' #  - SUDO_ICON '\uE0A2' #  - RUBY_ICON '\uE847 ' #  - AWS_ICON '\uE895'$s #  - AWS_EB_ICON '\U1F331'$q # 🌱 - BACKGROUND_JOBS_ICON '\uE82F ' #  - TEST_ICON '\uE891'$s #  - TODO_ICON '\u2611' # ☑ - BATTERY_ICON '\uE894'$s #  - DISK_ICON '\uE1AE ' #  - OK_ICON '\u2714' # ✔ - FAIL_ICON '\u2718' # ✘ - SYMFONY_ICON 'SF' - NODE_ICON '\u2B22'$s # ⬢ - NODEJS_ICON '\u2B22'$s # ⬢ - MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ - MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ - MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ - APPLE_ICON '\uE26E'$s #  - WINDOWS_ICON '\uE26F'$s #  - FREEBSD_ICON '\U1F608'$q # 😈 - ANDROID_ICON '\uE270'$s #  - LINUX_ICON '\uE271'$s #  - LINUX_ARCH_ICON '\uE271'$s #  - LINUX_DEBIAN_ICON '\uE271'$s #  - LINUX_RASPBIAN_ICON '\uE271'$s #  - LINUX_UBUNTU_ICON '\uE271'$s #  - LINUX_CENTOS_ICON '\uE271'$s #  - LINUX_COREOS_ICON '\uE271'$s #  - LINUX_ELEMENTARY_ICON '\uE271'$s #  - LINUX_MINT_ICON '\uE271'$s #  - LINUX_FEDORA_ICON '\uE271'$s #  - LINUX_GENTOO_ICON '\uE271'$s #  - LINUX_MAGEIA_ICON '\uE271'$s #  - LINUX_NIXOS_ICON '\uE271'$s #  - LINUX_MANJARO_ICON '\uE271'$s #  - LINUX_DEVUAN_ICON '\uE271'$s #  - LINUX_ALPINE_ICON '\uE271'$s #  - LINUX_AOSC_ICON '\uE271'$s #  - LINUX_OPENSUSE_ICON '\uE271'$s #  - LINUX_SABAYON_ICON '\uE271'$s #  - LINUX_SLACKWARE_ICON '\uE271'$s #  - LINUX_VOID_ICON '\uE271'$s #  - LINUX_ARTIX_ICON '\uE271'$s #  - LINUX_RHEL_ICON '\uE271'$s #  - LINUX_AMZN_ICON '\uE271'$s #  - LINUX_ENDEAVOUROS_ICON '\uE271'$s #  - SUNOS_ICON '\U1F31E'$q # 🌞 - HOME_ICON '\uE12C'$s #  - HOME_SUB_ICON '\uE18D'$s #  - FOLDER_ICON '\uE818'$s #  - NETWORK_ICON '\uE1AD'$s #  - ETC_ICON '\uE82F'$s #  - LOAD_ICON '\uE190 ' #  - SWAP_ICON '\uE87D'$s #  - RAM_ICON '\uE1E2 ' #  - SERVER_ICON '\uE895'$s #  - VCS_UNTRACKED_ICON '\uE16C'$s #  - VCS_UNSTAGED_ICON '\uE17C'$s #  - VCS_STAGED_ICON '\uE168'$s #  - VCS_STASH_ICON '\uE133 ' #  - #VCS_INCOMING_CHANGES_ICON '\uE1EB ' #  - #VCS_INCOMING_CHANGES_ICON '\uE80D ' #  - VCS_INCOMING_CHANGES_ICON '\uE131 ' #  - #VCS_OUTGOING_CHANGES_ICON '\uE1EC ' #  - #VCS_OUTGOING_CHANGES_ICON '\uE80E ' #  - VCS_OUTGOING_CHANGES_ICON '\uE132 ' #  - VCS_TAG_ICON '\uE817 ' #  - VCS_BOOKMARK_ICON '\uE87B' #  - VCS_COMMIT_ICON '\uE821 ' #  - VCS_BRANCH_ICON '\uE220 ' #  - VCS_REMOTE_BRANCH_ICON '\u2192' # → - VCS_LOADING_ICON '' - VCS_GIT_ICON '\uE20E ' #  - VCS_GIT_GITHUB_ICON '\uE20E ' # - VCS_GIT_BITBUCKET_ICON '\uE20E ' # - VCS_GIT_GITLAB_ICON '\uE20E ' # - VCS_HG_ICON '\uE1C3 ' #  - VCS_SVN_ICON 'svn'$q - RUST_ICON 'R' - PYTHON_ICON '\uE63C'$s #  (doesn't always work) - SWIFT_ICON 'Swift' - GO_ICON 'Go' - GOLANG_ICON 'Go' - PUBLIC_IP_ICON 'IP' - LOCK_ICON '\UE138' #  - NORDVPN_ICON '\UE138' #  - EXECUTION_TIME_ICON '\UE89C'$s #  - SSH_ICON 'ssh' - VPN_ICON '\UE138' - KUBERNETES_ICON '\U2388'$s # ⎈ - DROPBOX_ICON '\UF16B'$s #  (doesn't always work) - DATE_ICON '\uE184'$s #  - TIME_ICON '\uE12E'$s #  - JAVA_ICON '\U2615' # ☕︎ - LARAVEL_ICON '' - RANGER_ICON '\u2B50' # ⭐ - MIDNIGHT_COMMANDER_ICON 'mc' - VIM_ICON 'vim' - TERRAFORM_ICON 'tf' - PROXY_ICON '\u2194' # ↔ - DOTNET_ICON '.NET' - DOTNET_CORE_ICON '.NET' - AZURE_ICON '\u2601' # ☁ - DIRENV_ICON '\u25BC' # ▼ - FLUTTER_ICON 'F' - GCLOUD_ICON 'G' - LUA_ICON 'lua' - PERL_ICON 'perl' - NNN_ICON 'nnn' - LF_ICON 'lf' - XPLR_ICON 'xplr' - TIMEWARRIOR_ICON 'tw' - TASKWARRIOR_ICON 'task' - NIX_SHELL_ICON 'nix' - WIFI_ICON 'WiFi' - ERLANG_ICON 'erl' - ELIXIR_ICON 'elixir' - POSTGRES_ICON 'postgres' - PHP_ICON 'php' - HASKELL_ICON 'hs' - PACKAGE_ICON 'pkg' - JULIA_ICON 'jl' - SCALA_ICON 'scala' - TOOLBOX_ICON '\u2B22' # ⬢ - ARCH_ICON 'arch' - ) - ;; - 'awesome-fontconfig') - # fontconfig with awesome-font required! See - # https://github.com/gabrielelana/awesome-terminal-fonts - icons=( - RULER_CHAR '\u2500' # ─ - LEFT_SEGMENT_SEPARATOR '\uE0B0' #  - RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  - LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace - LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  - RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  - CARRIAGE_RETURN_ICON '\u21B5' # ↵ - ROOT_ICON '\uF201'$s #  - SUDO_ICON '\uF09C'$s #  - RUBY_ICON '\uF219 ' #  - AWS_ICON '\uF270'$s #  - AWS_EB_ICON '\U1F331'$q # 🌱 - BACKGROUND_JOBS_ICON '\uF013 ' #  - TEST_ICON '\uF291'$s #  - TODO_ICON '\u2611' # ☑ - BATTERY_ICON '\U1F50B' # 🔋 - DISK_ICON '\uF0A0 ' #  - OK_ICON '\u2714' # ✔ - FAIL_ICON '\u2718' # ✘ - SYMFONY_ICON 'SF' - NODE_ICON '\u2B22' # ⬢ - NODEJS_ICON '\u2B22' # ⬢ - MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ - MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ - MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ - APPLE_ICON '\uF179'$s #  - WINDOWS_ICON '\uF17A'$s #  - FREEBSD_ICON '\U1F608'$q # 😈 - ANDROID_ICON '\uE17B'$s #  (doesn't always work) - LINUX_ICON '\uF17C'$s #  - LINUX_ARCH_ICON '\uF17C'$s #  - LINUX_DEBIAN_ICON '\uF17C'$s #  - LINUX_RASPBIAN_ICON '\uF17C'$s #  - LINUX_UBUNTU_ICON '\uF17C'$s #  - LINUX_CENTOS_ICON '\uF17C'$s #  - LINUX_COREOS_ICON '\uF17C'$s #  - LINUX_ELEMENTARY_ICON '\uF17C'$s #  - LINUX_MINT_ICON '\uF17C'$s #  - LINUX_FEDORA_ICON '\uF17C'$s #  - LINUX_GENTOO_ICON '\uF17C'$s #  - LINUX_MAGEIA_ICON '\uF17C'$s #  - LINUX_NIXOS_ICON '\uF17C'$s #  - LINUX_MANJARO_ICON '\uF17C'$s #  - LINUX_DEVUAN_ICON '\uF17C'$s #  - LINUX_ALPINE_ICON '\uF17C'$s #  - LINUX_AOSC_ICON '\uF17C'$s #  - LINUX_OPENSUSE_ICON '\uF17C'$s #  - LINUX_SABAYON_ICON '\uF17C'$s #  - LINUX_SLACKWARE_ICON '\uF17C'$s #  - LINUX_VOID_ICON '\uF17C'$s #  - LINUX_ARTIX_ICON '\uF17C'$s #  - LINUX_RHEL_ICON '\uF17C'$s #  - LINUX_AMZN_ICON '\uF17C'$s #  - LINUX_ENDEAVOUROS_ICON '\uF17C'$s #  - SUNOS_ICON '\uF185 ' #  - HOME_ICON '\uF015'$s #  - HOME_SUB_ICON '\uF07C'$s #  - FOLDER_ICON '\uF115'$s #  - ETC_ICON '\uF013 ' #  - NETWORK_ICON '\uF09E'$s #  - LOAD_ICON '\uF080 ' #  - SWAP_ICON '\uF0E4'$s #  - RAM_ICON '\uF0E4'$s #  - SERVER_ICON '\uF233'$s #  - VCS_UNTRACKED_ICON '\uF059'$s #  - VCS_UNSTAGED_ICON '\uF06A'$s #  - VCS_STAGED_ICON '\uF055'$s #  - VCS_STASH_ICON '\uF01C ' #  - VCS_INCOMING_CHANGES_ICON '\uF01A ' #  - VCS_OUTGOING_CHANGES_ICON '\uF01B ' #  - VCS_TAG_ICON '\uF217 ' #  - VCS_BOOKMARK_ICON '\uF27B ' #  - VCS_COMMIT_ICON '\uF221 ' #  - VCS_BRANCH_ICON '\uF126 ' #  - VCS_REMOTE_BRANCH_ICON '\u2192' # → - VCS_LOADING_ICON '' - VCS_GIT_ICON '\uF1D3 ' #  - VCS_GIT_GITHUB_ICON '\uF113 ' #  - VCS_GIT_BITBUCKET_ICON '\uF171 ' #  - VCS_GIT_GITLAB_ICON '\uF296 ' #  - VCS_HG_ICON '\uF0C3 ' #  - VCS_SVN_ICON 'svn'$q - RUST_ICON '\uE6A8' #  - PYTHON_ICON '\uE63C'$s #  - SWIFT_ICON 'Swift' - GO_ICON 'Go' - GOLANG_ICON 'Go' - PUBLIC_IP_ICON 'IP' - LOCK_ICON '\UF023' #  - NORDVPN_ICON '\UF023' #  - EXECUTION_TIME_ICON '\uF253'$s #  - SSH_ICON 'ssh' - VPN_ICON '\uF023' - KUBERNETES_ICON '\U2388' # ⎈ - DROPBOX_ICON '\UF16B'$s #  - DATE_ICON '\uF073 ' #  - TIME_ICON '\uF017 ' #  - JAVA_ICON '\U2615' # ☕︎ - LARAVEL_ICON '' - RANGER_ICON '\u2B50' # ⭐ - MIDNIGHT_COMMANDER_ICON 'mc' - VIM_ICON 'vim' - TERRAFORM_ICON 'tf' - PROXY_ICON '\u2194' # ↔ - DOTNET_ICON '.NET' - DOTNET_CORE_ICON '.NET' - AZURE_ICON '\u2601' # ☁ - DIRENV_ICON '\u25BC' # ▼ - FLUTTER_ICON 'F' - GCLOUD_ICON 'G' - LUA_ICON 'lua' - PERL_ICON 'perl' - NNN_ICON 'nnn' - LF_ICON 'lf' - XPLR_ICON 'xplr' - TIMEWARRIOR_ICON 'tw' - TASKWARRIOR_ICON 'task' - NIX_SHELL_ICON 'nix' - WIFI_ICON 'WiFi' - ERLANG_ICON 'erl' - ELIXIR_ICON 'elixir' - POSTGRES_ICON 'postgres' - PHP_ICON 'php' - HASKELL_ICON 'hs' - PACKAGE_ICON 'pkg' - JULIA_ICON 'jl' - SCALA_ICON 'scala' - TOOLBOX_ICON '\u2B22' # ⬢ - ARCH_ICON 'arch' - ) - ;; - 'awesome-mapped-fontconfig') - # mapped fontconfig with awesome-font required! See - # https://github.com/gabrielelana/awesome-terminal-fonts - # don't forget to source the font maps in your startup script - if [ -z "$AWESOME_GLYPHS_LOADED" ]; then - echo "Powerlevel9k warning: Awesome-Font mappings have not been loaded. - Source a font mapping in your shell config, per the Awesome-Font docs - (https://github.com/gabrielelana/awesome-terminal-fonts), - Or use a different Powerlevel9k font configuration."; - fi - icons=( - RULER_CHAR '\u2500' # ─ - LEFT_SEGMENT_SEPARATOR '\uE0B0' #  - RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  - LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace - LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  - RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  - CARRIAGE_RETURN_ICON '\u21B5' # ↵ - ROOT_ICON "${CODEPOINT_OF_OCTICONS_ZAP:+\\u$CODEPOINT_OF_OCTICONS_ZAP}" - SUDO_ICON "${CODEPOINT_OF_AWESOME_UNLOCK:+\\u$CODEPOINT_OF_AWESOME_UNLOCK$s}" - RUBY_ICON "${CODEPOINT_OF_OCTICONS_RUBY:+\\u$CODEPOINT_OF_OCTICONS_RUBY }" - AWS_ICON "${CODEPOINT_OF_AWESOME_SERVER:+\\u$CODEPOINT_OF_AWESOME_SERVER$s}" - AWS_EB_ICON '\U1F331'$q # 🌱 - BACKGROUND_JOBS_ICON "${CODEPOINT_OF_AWESOME_COG:+\\u$CODEPOINT_OF_AWESOME_COG }" - TEST_ICON "${CODEPOINT_OF_AWESOME_BUG:+\\u$CODEPOINT_OF_AWESOME_BUG$s}" - TODO_ICON "${CODEPOINT_OF_AWESOME_CHECK_SQUARE_O:+\\u$CODEPOINT_OF_AWESOME_CHECK_SQUARE_O$s}" - BATTERY_ICON "${CODEPOINT_OF_AWESOME_BATTERY_FULL:+\\U$CODEPOINT_OF_AWESOME_BATTERY_FULL$s}" - DISK_ICON "${CODEPOINT_OF_AWESOME_HDD_O:+\\u$CODEPOINT_OF_AWESOME_HDD_O }" - OK_ICON "${CODEPOINT_OF_AWESOME_CHECK:+\\u$CODEPOINT_OF_AWESOME_CHECK$s}" - FAIL_ICON "${CODEPOINT_OF_AWESOME_TIMES:+\\u$CODEPOINT_OF_AWESOME_TIMES}" - SYMFONY_ICON 'SF' - NODE_ICON '\u2B22' # ⬢ - NODEJS_ICON '\u2B22' # ⬢ - MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ - MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ - MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ - APPLE_ICON "${CODEPOINT_OF_AWESOME_APPLE:+\\u$CODEPOINT_OF_AWESOME_APPLE$s}" - FREEBSD_ICON '\U1F608'$q # 😈 - LINUX_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_ARCH_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_DEBIAN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_RASPBIAN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_UBUNTU_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_CENTOS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_COREOS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_ELEMENTARY_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_MINT_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_FEDORA_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_GENTOO_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_MAGEIA_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_NIXOS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_MANJARO_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_DEVUAN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_ALPINE_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_AOSC_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_OPENSUSE_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_SABAYON_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_SLACKWARE_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_VOID_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_ARTIX_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_RHEL_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_AMZN_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - LINUX_ENDEAVOUROS_ICON "${CODEPOINT_OF_AWESOME_LINUX:+\\u$CODEPOINT_OF_AWESOME_LINUX$s}" - SUNOS_ICON "${CODEPOINT_OF_AWESOME_SUN_O:+\\u$CODEPOINT_OF_AWESOME_SUN_O }" - HOME_ICON "${CODEPOINT_OF_AWESOME_HOME:+\\u$CODEPOINT_OF_AWESOME_HOME$s}" - HOME_SUB_ICON "${CODEPOINT_OF_AWESOME_FOLDER_OPEN:+\\u$CODEPOINT_OF_AWESOME_FOLDER_OPEN$s}" - FOLDER_ICON "${CODEPOINT_OF_AWESOME_FOLDER_O:+\\u$CODEPOINT_OF_AWESOME_FOLDER_O$s}" - ETC_ICON "${CODEPOINT_OF_AWESOME_COG:+\\u$CODEPOINT_OF_AWESOME_COG }" - NETWORK_ICON "${CODEPOINT_OF_AWESOME_RSS:+\\u$CODEPOINT_OF_AWESOME_RSS$s}" - LOAD_ICON "${CODEPOINT_OF_AWESOME_BAR_CHART:+\\u$CODEPOINT_OF_AWESOME_BAR_CHART }" - SWAP_ICON "${CODEPOINT_OF_AWESOME_DASHBOARD:+\\u$CODEPOINT_OF_AWESOME_DASHBOARD$s}" - RAM_ICON "${CODEPOINT_OF_AWESOME_DASHBOARD:+\\u$CODEPOINT_OF_AWESOME_DASHBOARD$s}" - SERVER_ICON "${CODEPOINT_OF_AWESOME_SERVER:+\\u$CODEPOINT_OF_AWESOME_SERVER$s}" - VCS_UNTRACKED_ICON "${CODEPOINT_OF_AWESOME_QUESTION_CIRCLE:+\\u$CODEPOINT_OF_AWESOME_QUESTION_CIRCLE$s}" - VCS_UNSTAGED_ICON "${CODEPOINT_OF_AWESOME_EXCLAMATION_CIRCLE:+\\u$CODEPOINT_OF_AWESOME_EXCLAMATION_CIRCLE$s}" - VCS_STAGED_ICON "${CODEPOINT_OF_AWESOME_PLUS_CIRCLE:+\\u$CODEPOINT_OF_AWESOME_PLUS_CIRCLE$s}" - VCS_STASH_ICON "${CODEPOINT_OF_AWESOME_INBOX:+\\u$CODEPOINT_OF_AWESOME_INBOX }" - VCS_INCOMING_CHANGES_ICON "${CODEPOINT_OF_AWESOME_ARROW_CIRCLE_DOWN:+\\u$CODEPOINT_OF_AWESOME_ARROW_CIRCLE_DOWN }" - VCS_OUTGOING_CHANGES_ICON "${CODEPOINT_OF_AWESOME_ARROW_CIRCLE_UP:+\\u$CODEPOINT_OF_AWESOME_ARROW_CIRCLE_UP }" - VCS_TAG_ICON "${CODEPOINT_OF_AWESOME_TAG:+\\u$CODEPOINT_OF_AWESOME_TAG }" - VCS_BOOKMARK_ICON "${CODEPOINT_OF_OCTICONS_BOOKMARK:+\\u$CODEPOINT_OF_OCTICONS_BOOKMARK}" - VCS_COMMIT_ICON "${CODEPOINT_OF_OCTICONS_GIT_COMMIT:+\\u$CODEPOINT_OF_OCTICONS_GIT_COMMIT }" - VCS_BRANCH_ICON "${CODEPOINT_OF_OCTICONS_GIT_BRANCH:+\\u$CODEPOINT_OF_OCTICONS_GIT_BRANCH }" - VCS_REMOTE_BRANCH_ICON "${CODEPOINT_OF_OCTICONS_REPO_PUSH:+\\u$CODEPOINT_OF_OCTICONS_REPO_PUSH$s}" - VCS_LOADING_ICON '' - VCS_GIT_ICON "${CODEPOINT_OF_AWESOME_GIT:+\\u$CODEPOINT_OF_AWESOME_GIT }" - VCS_GIT_GITHUB_ICON "${CODEPOINT_OF_AWESOME_GITHUB_ALT:+\\u$CODEPOINT_OF_AWESOME_GITHUB_ALT }" - VCS_GIT_BITBUCKET_ICON "${CODEPOINT_OF_AWESOME_BITBUCKET:+\\u$CODEPOINT_OF_AWESOME_BITBUCKET }" - VCS_GIT_GITLAB_ICON "${CODEPOINT_OF_AWESOME_GITLAB:+\\u$CODEPOINT_OF_AWESOME_GITLAB }" - VCS_HG_ICON "${CODEPOINT_OF_AWESOME_FLASK:+\\u$CODEPOINT_OF_AWESOME_FLASK }" - VCS_SVN_ICON 'svn'$q - RUST_ICON '\uE6A8' #  - PYTHON_ICON '\U1F40D' # 🐍 - SWIFT_ICON '\uE655'$s #  - PUBLIC_IP_ICON "${CODEPOINT_OF_AWESOME_GLOBE:+\\u$CODEPOINT_OF_AWESOME_GLOBE$s}" - LOCK_ICON "${CODEPOINT_OF_AWESOME_LOCK:+\\u$CODEPOINT_OF_AWESOME_LOCK}" - NORDVPN_ICON "${CODEPOINT_OF_AWESOME_LOCK:+\\u$CODEPOINT_OF_AWESOME_LOCK}" - EXECUTION_TIME_ICON "${CODEPOINT_OF_AWESOME_HOURGLASS_END:+\\u$CODEPOINT_OF_AWESOME_HOURGLASS_END$s}" - SSH_ICON 'ssh' - VPN_ICON "${CODEPOINT_OF_AWESOME_LOCK:+\\u$CODEPOINT_OF_AWESOME_LOCK}" - KUBERNETES_ICON '\U2388' # ⎈ - DROPBOX_ICON "${CODEPOINT_OF_AWESOME_DROPBOX:+\\u$CODEPOINT_OF_AWESOME_DROPBOX$s}" - DATE_ICON '\uF073 ' #  - TIME_ICON '\uF017 ' #  - JAVA_ICON '\U2615' # ☕︎ - LARAVEL_ICON '' - RANGER_ICON '\u2B50' # ⭐ - MIDNIGHT_COMMANDER_ICON 'mc' - VIM_ICON 'vim' - TERRAFORM_ICON 'tf' - PROXY_ICON '\u2194' # ↔ - DOTNET_ICON '.NET' - DOTNET_CORE_ICON '.NET' - AZURE_ICON '\u2601' # ☁ - DIRENV_ICON '\u25BC' # ▼ - FLUTTER_ICON 'F' - GCLOUD_ICON 'G' - LUA_ICON 'lua' - PERL_ICON 'perl' - NNN_ICON 'nnn' - LF_ICON 'lf' - XPLR_ICON 'xplr' - TIMEWARRIOR_ICON 'tw' - TASKWARRIOR_ICON 'task' - NIX_SHELL_ICON 'nix' - WIFI_ICON 'WiFi' - ERLANG_ICON 'erl' - ELIXIR_ICON 'elixir' - POSTGRES_ICON 'postgres' - PHP_ICON 'php' - HASKELL_ICON 'hs' - PACKAGE_ICON 'pkg' - JULIA_ICON 'jl' - SCALA_ICON 'scala' - TOOLBOX_ICON '\u2B22' # ⬢ - ARCH_ICON 'arch' - ) - ;; - 'nerdfont-v3') - # In this version of Nerd Fonts the Material icons are mapped to U+F0001-U+F19C3. - # The font may also have Material icons in the old range of U+F500-U+FD46 but - # powerlevel10k won't rely on them. - icons=( - RULER_CHAR '\u2500' # ─ - LEFT_SEGMENT_SEPARATOR '\uE0B0' #  - RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  - LEFT_SEGMENT_END_SEPARATOR ' ' # - LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  - RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  - CARRIAGE_RETURN_ICON '\u21B5' # ↵ - ROOT_ICON '\uE614'$q #  - SUDO_ICON '\uF09C'$s #  - RUBY_ICON '\uF219 ' #  - AWS_ICON '\uF270'$s #  - AWS_EB_ICON '\UF1BD'$q$q #  - BACKGROUND_JOBS_ICON '\uF013 ' #  - TEST_ICON '\uF188'$s #  - TODO_ICON '\u2611' # ☑ - BATTERY_ICON '\UF240 ' #  - DISK_ICON '\uF0A0'$s #  - OK_ICON '\uF00C'$s #  - FAIL_ICON '\uF00D' #  - SYMFONY_ICON '\uE757' #  - NODE_ICON '\uE617 ' #  - NODEJS_ICON '\uE617 ' #  - MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ - MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ - MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ - APPLE_ICON '\uF179' #  - WINDOWS_ICON '\uF17A'$s #  - FREEBSD_ICON '\UF30C ' #  - ANDROID_ICON '\uF17B' #  - LINUX_ARCH_ICON '\uF303' #  - LINUX_CENTOS_ICON '\uF304'$s #  - LINUX_COREOS_ICON '\uF305'$s #  - LINUX_DEBIAN_ICON '\uF306' #  - LINUX_RASPBIAN_ICON '\uF315' #  - LINUX_ELEMENTARY_ICON '\uF309'$s #  - LINUX_FEDORA_ICON '\uF30a'$s #  - LINUX_GENTOO_ICON '\uF30d'$s #  - LINUX_MAGEIA_ICON '\uF310' #  - LINUX_MINT_ICON '\uF30e'$s #  - LINUX_NIXOS_ICON '\uF313'$s #  - LINUX_MANJARO_ICON '\uF312'$s #  - LINUX_DEVUAN_ICON '\uF307'$s #  - LINUX_ALPINE_ICON '\uF300'$s #  - LINUX_AOSC_ICON '\uF301'$s #  - LINUX_OPENSUSE_ICON '\uF314'$s #  - LINUX_SABAYON_ICON '\uF317'$s #  - LINUX_SLACKWARE_ICON '\uF319'$s #  - LINUX_VOID_ICON '\UF32E'$s #  - LINUX_ARTIX_ICON '\UF31F'$s #  - LINUX_UBUNTU_ICON '\uF31b'$s #  - LINUX_RHEL_ICON '\uF316'$s #  - LINUX_AMZN_ICON '\uF270'$s #  - LINUX_ENDEAVOUROS_ICON '\UF322'$s #  - LINUX_ICON '\uF17C' #  - SUNOS_ICON '\uF185 ' #  - HOME_ICON '\uF015'$s #  - HOME_SUB_ICON '\uF07C'$s #  - FOLDER_ICON '\uF115'$s #  - ETC_ICON '\uF013'$s #  - NETWORK_ICON '\UF0378'$s # 󰍸 - LOAD_ICON '\uF080 ' #  - SWAP_ICON '\uF464'$s #  - RAM_ICON '\uF0E4'$s #  - SERVER_ICON '\uF0AE'$s #  - VCS_UNTRACKED_ICON '\uF059'$s #  - VCS_UNSTAGED_ICON '\uF06A'$s #  - VCS_STAGED_ICON '\uF055'$s #  - VCS_STASH_ICON '\uF01C ' #  - VCS_INCOMING_CHANGES_ICON '\uF01A ' #  - VCS_OUTGOING_CHANGES_ICON '\uF01B ' #  - VCS_TAG_ICON '\uF02B ' #  - VCS_BOOKMARK_ICON '\uF461 ' #  - VCS_COMMIT_ICON '\uE729 ' #  - VCS_BRANCH_ICON '\uF126 ' #  - VCS_REMOTE_BRANCH_ICON '\uE728 ' #  - VCS_LOADING_ICON '' # - VCS_GIT_ICON '\uF1D3 ' #  - VCS_GIT_GITHUB_ICON '\uF113 ' #  - VCS_GIT_BITBUCKET_ICON '\uE703 ' #  - VCS_GIT_GITLAB_ICON '\uF296 ' #  - VCS_HG_ICON '\uF0C3 ' #  - VCS_SVN_ICON '\uE72D'$q #  - RUST_ICON '\uE7A8'$q #  - PYTHON_ICON '\UE73C ' #  - SWIFT_ICON '\uE755' #  - GO_ICON '\uE626' #  - GOLANG_ICON '\uE626' #  - PUBLIC_IP_ICON '\UF0AC'$s #  - LOCK_ICON '\UF023' #  - NORDVPN_ICON '\UF023' #  - EXECUTION_TIME_ICON '\uF252'$s #  - SSH_ICON '\uF489'$s #  - VPN_ICON '\UF023' #  - KUBERNETES_ICON '\UF10FE' # 󱃾 - DROPBOX_ICON '\UF16B'$s #  - DATE_ICON '\uF073 ' #  - TIME_ICON '\uF017 ' #  - JAVA_ICON '\uE738' #  - LARAVEL_ICON '\ue73f'$q #  - RANGER_ICON '\uF00b ' #  - MIDNIGHT_COMMANDER_ICON 'mc' # mc - VIM_ICON '\uE62B' #  - TERRAFORM_ICON '\uF1BB ' #  - PROXY_ICON '\u2194' # ↔ - DOTNET_ICON '\uE77F' #  - DOTNET_CORE_ICON '\uE77F' #  - AZURE_ICON '\UF0805' # 󰠅 - DIRENV_ICON '\u25BC' # ▼ - FLUTTER_ICON 'F' # F - GCLOUD_ICON '\UF02AD' # 󰊭 - LUA_ICON '\uE620' #  - PERL_ICON '\uE769' #  - NNN_ICON 'nnn' # nnn - LF_ICON 'lf' # lf - XPLR_ICON 'xplr' # xplr - TIMEWARRIOR_ICON '\uF49B' #  - TASKWARRIOR_ICON '\uF4A0 ' #  - NIX_SHELL_ICON '\uF313 ' #  - WIFI_ICON '\uF1EB ' #  - ERLANG_ICON '\uE7B1 ' #  - ELIXIR_ICON '\uE62D' #  - POSTGRES_ICON '\uE76E' #  - PHP_ICON '\uE608' #  - HASKELL_ICON '\uE61F' #  - PACKAGE_ICON '\UF03D7' # 󰏗 - JULIA_ICON '\uE624' #  - SCALA_ICON '\uE737' #  - TOOLBOX_ICON '\uE20F'$s #  - ARCH_ICON '\uE266' #  - ) - ;; - 'nerdfont-complete'|'nerdfont-fontconfig') - # nerd-font patched (complete) font required! See - # https://github.com/ryanoasis/nerd-fonts - # http://nerdfonts.com/#cheat-sheet - icons=( - RULER_CHAR '\u2500' # ─ - LEFT_SEGMENT_SEPARATOR '\uE0B0' #  - RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  - LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace - LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  - RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  - CARRIAGE_RETURN_ICON '\u21B5' # ↵ - ROOT_ICON '\uE614'$q #  - SUDO_ICON '\uF09C'$s #  - RUBY_ICON '\uF219 ' #  - AWS_ICON '\uF270'$s #  - AWS_EB_ICON '\UF1BD'$q$q #  - BACKGROUND_JOBS_ICON '\uF013 ' #  - TEST_ICON '\uF188'$s #  - TODO_ICON '\u2611' # ☑ - BATTERY_ICON '\UF240 ' #  - DISK_ICON '\uF0A0'$s #  - OK_ICON '\uF00C'$s #  - FAIL_ICON '\uF00D' #  - SYMFONY_ICON '\uE757' #  - NODE_ICON '\uE617 ' #  - NODEJS_ICON '\uE617 ' #  - MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ - MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ - MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ - APPLE_ICON '\uF179' #  - WINDOWS_ICON '\uF17A'$s #  - FREEBSD_ICON '\UF30C ' #  - ANDROID_ICON '\uF17B' #  - LINUX_ARCH_ICON '\uF303' #  - LINUX_CENTOS_ICON '\uF304'$s #  - LINUX_COREOS_ICON '\uF305'$s #  - LINUX_DEBIAN_ICON '\uF306' #  - LINUX_RASPBIAN_ICON '\uF315' #  - LINUX_ELEMENTARY_ICON '\uF309'$s #  - LINUX_FEDORA_ICON '\uF30a'$s #  - LINUX_GENTOO_ICON '\uF30d'$s #  - LINUX_MAGEIA_ICON '\uF310' #  - LINUX_MINT_ICON '\uF30e'$s #  - LINUX_NIXOS_ICON '\uF313'$s #  - LINUX_MANJARO_ICON '\uF312'$s #  - LINUX_DEVUAN_ICON '\uF307'$s #  - LINUX_ALPINE_ICON '\uF300'$s #  - LINUX_AOSC_ICON '\uF301'$s #  - LINUX_OPENSUSE_ICON '\uF314'$s #  - LINUX_SABAYON_ICON '\uF317'$s #  - LINUX_SLACKWARE_ICON '\uF319'$s #  - LINUX_VOID_ICON '\uF17C' #  - LINUX_ARTIX_ICON '\uF17C' #  - LINUX_UBUNTU_ICON '\uF31b'$s #  - LINUX_RHEL_ICON '\uF316'$s #  - LINUX_AMZN_ICON '\uF270'$s #  - LINUX_ENDEAVOUROS_ICON '\uF17C' #  - LINUX_ICON '\uF17C' #  - SUNOS_ICON '\uF185 ' #  - HOME_ICON '\uF015'$s #  - HOME_SUB_ICON '\uF07C'$s #  - FOLDER_ICON '\uF115'$s #  - ETC_ICON '\uF013'$s #  - NETWORK_ICON '\uF50D'$s #  - LOAD_ICON '\uF080 ' #  - SWAP_ICON '\uF464'$s #  - RAM_ICON '\uF0E4'$s #  - SERVER_ICON '\uF0AE'$s #  - VCS_UNTRACKED_ICON '\uF059'$s #  - VCS_UNSTAGED_ICON '\uF06A'$s #  - VCS_STAGED_ICON '\uF055'$s #  - VCS_STASH_ICON '\uF01C ' #  - VCS_INCOMING_CHANGES_ICON '\uF01A ' #  - VCS_OUTGOING_CHANGES_ICON '\uF01B ' #  - VCS_TAG_ICON '\uF02B ' #  - VCS_BOOKMARK_ICON '\uF461 ' #  - VCS_COMMIT_ICON '\uE729 ' #  - VCS_BRANCH_ICON '\uF126 ' #  - VCS_REMOTE_BRANCH_ICON '\uE728 ' #  - VCS_LOADING_ICON '' - VCS_GIT_ICON '\uF1D3 ' #  - VCS_GIT_GITHUB_ICON '\uF113 ' #  - VCS_GIT_BITBUCKET_ICON '\uE703 ' #  - VCS_GIT_GITLAB_ICON '\uF296 ' #  - VCS_HG_ICON '\uF0C3 ' #  - VCS_SVN_ICON '\uE72D'$q #  - RUST_ICON '\uE7A8'$q #  - PYTHON_ICON '\UE73C ' #  - SWIFT_ICON '\uE755' #  - GO_ICON '\uE626' #  - GOLANG_ICON '\uE626' #  - PUBLIC_IP_ICON '\UF0AC'$s #  - LOCK_ICON '\UF023' #  - NORDVPN_ICON '\UF023' #  - EXECUTION_TIME_ICON '\uF252'$s #  - SSH_ICON '\uF489'$s #  - VPN_ICON '\UF023' - KUBERNETES_ICON '\U2388' # ⎈ - DROPBOX_ICON '\UF16B'$s #  - DATE_ICON '\uF073 ' #  - TIME_ICON '\uF017 ' #  - JAVA_ICON '\uE738' #  - LARAVEL_ICON '\ue73f'$q #  - RANGER_ICON '\uF00b ' #  - MIDNIGHT_COMMANDER_ICON 'mc' - VIM_ICON '\uE62B' #  - TERRAFORM_ICON '\uF1BB ' #  - PROXY_ICON '\u2194' # ↔ - DOTNET_ICON '\uE77F' #  - DOTNET_CORE_ICON '\uE77F' #  - AZURE_ICON '\uFD03' # ﴃ - DIRENV_ICON '\u25BC' # ▼ - FLUTTER_ICON 'F' - GCLOUD_ICON '\uF7B7' #  - LUA_ICON '\uE620' #  - PERL_ICON '\uE769' #  - NNN_ICON 'nnn' - LF_ICON 'lf' - XPLR_ICON 'xplr' - TIMEWARRIOR_ICON '\uF49B' #  - TASKWARRIOR_ICON '\uF4A0 ' #  - NIX_SHELL_ICON '\uF313 ' #  - WIFI_ICON '\uF1EB ' #  - ERLANG_ICON '\uE7B1 ' #  - ELIXIR_ICON '\uE62D' #  - POSTGRES_ICON '\uE76E' #  - PHP_ICON '\uE608' #  - HASKELL_ICON '\uE61F' #  - PACKAGE_ICON '\uF8D6' #  - JULIA_ICON '\uE624' #  - SCALA_ICON '\uE737' #  - TOOLBOX_ICON '\uE20F'$s #  - ARCH_ICON '\uE266' #  - ) - ;; - ascii) - icons=( - RULER_CHAR '-' - LEFT_SEGMENT_SEPARATOR '' - RIGHT_SEGMENT_SEPARATOR '' - LEFT_SEGMENT_END_SEPARATOR ' ' - LEFT_SUBSEGMENT_SEPARATOR '|' - RIGHT_SUBSEGMENT_SEPARATOR '|' - CARRIAGE_RETURN_ICON '' - ROOT_ICON '#' - SUDO_ICON '' - RUBY_ICON 'rb' - AWS_ICON 'aws' - AWS_EB_ICON 'eb' - BACKGROUND_JOBS_ICON '%%' - TEST_ICON '' - TODO_ICON 'todo' - BATTERY_ICON 'battery' - DISK_ICON 'disk' - OK_ICON 'ok' - FAIL_ICON 'err' - SYMFONY_ICON 'symphony' - NODE_ICON 'node' - NODEJS_ICON 'node' - MULTILINE_FIRST_PROMPT_PREFIX '' - MULTILINE_NEWLINE_PROMPT_PREFIX '' - MULTILINE_LAST_PROMPT_PREFIX '' - APPLE_ICON 'mac' - WINDOWS_ICON 'win' - FREEBSD_ICON 'bsd' - ANDROID_ICON 'android' - LINUX_ICON 'linux' - LINUX_ARCH_ICON 'arch' - LINUX_DEBIAN_ICON 'debian' - LINUX_RASPBIAN_ICON 'pi' - LINUX_UBUNTU_ICON 'ubuntu' - LINUX_CENTOS_ICON 'centos' - LINUX_COREOS_ICON 'coreos' - LINUX_ELEMENTARY_ICON 'elementary' - LINUX_MINT_ICON 'mint' - LINUX_FEDORA_ICON 'fedora' - LINUX_GENTOO_ICON 'gentoo' - LINUX_MAGEIA_ICON 'mageia' - LINUX_NIXOS_ICON 'nixos' - LINUX_MANJARO_ICON 'manjaro' - LINUX_DEVUAN_ICON 'devuan' - LINUX_ALPINE_ICON 'alpine' - LINUX_AOSC_ICON 'aosc' - LINUX_OPENSUSE_ICON 'suse' - LINUX_SABAYON_ICON 'sabayon' - LINUX_SLACKWARE_ICON 'slack' - LINUX_VOID_ICON 'void' - LINUX_ARTIX_ICON 'artix' - LINUX_RHEL_ICON 'rhel' - LINUX_AMZN_ICON 'amzn' - LINUX_ENDEAVOUROS_ICON 'edvos' - SUNOS_ICON 'sunos' - HOME_ICON '' - HOME_SUB_ICON '' - FOLDER_ICON '' - ETC_ICON '' - NETWORK_ICON 'ip' - LOAD_ICON 'cpu' - SWAP_ICON 'swap' - RAM_ICON 'ram' - SERVER_ICON '' - VCS_UNTRACKED_ICON '?' - VCS_UNSTAGED_ICON '!' - VCS_STAGED_ICON '+' - VCS_STASH_ICON '#' - VCS_INCOMING_CHANGES_ICON '<' - VCS_OUTGOING_CHANGES_ICON '>' - VCS_TAG_ICON '' - VCS_BOOKMARK_ICON '^' - VCS_COMMIT_ICON '@' - VCS_BRANCH_ICON '' - VCS_REMOTE_BRANCH_ICON ':' - VCS_LOADING_ICON '' - VCS_GIT_ICON '' - VCS_GIT_GITHUB_ICON '' - VCS_GIT_BITBUCKET_ICON '' - VCS_GIT_GITLAB_ICON '' - VCS_HG_ICON '' - VCS_SVN_ICON '' - RUST_ICON 'rust' - PYTHON_ICON 'py' - SWIFT_ICON 'swift' - GO_ICON 'go' - GOLANG_ICON 'go' - PUBLIC_IP_ICON 'ip' - LOCK_ICON '!w' - NORDVPN_ICON 'nordvpn' - EXECUTION_TIME_ICON '' - SSH_ICON 'ssh' - VPN_ICON 'vpn' - KUBERNETES_ICON 'kube' - DROPBOX_ICON 'dropbox' - DATE_ICON '' - TIME_ICON '' - JAVA_ICON 'java' - LARAVEL_ICON '' - RANGER_ICON 'ranger' - MIDNIGHT_COMMANDER_ICON 'mc' - VIM_ICON 'vim' - TERRAFORM_ICON 'tf' - PROXY_ICON 'proxy' - DOTNET_ICON '.net' - DOTNET_CORE_ICON '.net' - AZURE_ICON 'az' - DIRENV_ICON 'direnv' - FLUTTER_ICON 'flutter' - GCLOUD_ICON 'gcloud' - LUA_ICON 'lua' - PERL_ICON 'perl' - NNN_ICON 'nnn' - LF_ICON 'lf' - XPLR_ICON 'xplr' - TIMEWARRIOR_ICON 'tw' - TASKWARRIOR_ICON 'task' - NIX_SHELL_ICON 'nix' - WIFI_ICON 'wifi' - ERLANG_ICON 'erlang' - ELIXIR_ICON 'elixir' - POSTGRES_ICON 'postgres' - PHP_ICON 'php' - HASKELL_ICON 'hs' - PACKAGE_ICON 'pkg' - JULIA_ICON 'jl' - SCALA_ICON 'scala' - TOOLBOX_ICON 'toolbox' - ARCH_ICON 'arch' - ) - ;; - *) - # Powerline-Patched Font required! - # See https://github.com/Lokaltog/powerline-fonts - icons=( - RULER_CHAR '\u2500' # ─ - LEFT_SEGMENT_SEPARATOR '\uE0B0' #  - RIGHT_SEGMENT_SEPARATOR '\uE0B2' #  - LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace - LEFT_SUBSEGMENT_SEPARATOR '\uE0B1' #  - RIGHT_SUBSEGMENT_SEPARATOR '\uE0B3' #  - CARRIAGE_RETURN_ICON '\u21B5' # ↵ - ROOT_ICON '\u26A1' # ⚡ - SUDO_ICON '' - RUBY_ICON 'Ruby' - AWS_ICON 'AWS' - AWS_EB_ICON '\U1F331'$q # 🌱 - BACKGROUND_JOBS_ICON '\u2699' # ⚙ - TEST_ICON '' - TODO_ICON '\u2206' # ∆ - BATTERY_ICON '\U1F50B' # 🔋 - DISK_ICON 'hdd' - OK_ICON '\u2714' # ✔ - FAIL_ICON '\u2718' # ✘ - SYMFONY_ICON 'SF' - NODE_ICON 'Node' - NODEJS_ICON 'Node' - MULTILINE_FIRST_PROMPT_PREFIX '\u256D\U2500' # ╭─ - MULTILINE_NEWLINE_PROMPT_PREFIX '\u251C\U2500' # ├─ - MULTILINE_LAST_PROMPT_PREFIX '\u2570\U2500 ' # ╰─ - APPLE_ICON 'OSX' - WINDOWS_ICON 'WIN' - FREEBSD_ICON 'BSD' - ANDROID_ICON 'And' - LINUX_ICON 'Lx' - LINUX_ARCH_ICON 'Arc' - LINUX_DEBIAN_ICON 'Deb' - LINUX_RASPBIAN_ICON 'RPi' - LINUX_UBUNTU_ICON 'Ubu' - LINUX_CENTOS_ICON 'Cen' - LINUX_COREOS_ICON 'Cor' - LINUX_ELEMENTARY_ICON 'Elm' - LINUX_MINT_ICON 'LMi' - LINUX_FEDORA_ICON 'Fed' - LINUX_GENTOO_ICON 'Gen' - LINUX_MAGEIA_ICON 'Mag' - LINUX_NIXOS_ICON 'Nix' - LINUX_MANJARO_ICON 'Man' - LINUX_DEVUAN_ICON 'Dev' - LINUX_ALPINE_ICON 'Alp' - LINUX_AOSC_ICON 'Aos' - LINUX_OPENSUSE_ICON 'OSu' - LINUX_SABAYON_ICON 'Sab' - LINUX_SLACKWARE_ICON 'Sla' - LINUX_VOID_ICON 'Vo' - LINUX_ARTIX_ICON 'Art' - LINUX_RHEL_ICON 'RH' - LINUX_AMZN_ICON 'Amzn' - LINUX_ENDEAVOUROS_ICON 'Edv' - SUNOS_ICON 'Sun' - HOME_ICON '' - HOME_SUB_ICON '' - FOLDER_ICON '' - ETC_ICON '\u2699' # ⚙ - NETWORK_ICON 'IP' - LOAD_ICON 'L' - SWAP_ICON 'SWP' - RAM_ICON 'RAM' - SERVER_ICON '' - VCS_UNTRACKED_ICON '?' - VCS_UNSTAGED_ICON '\u25CF' # ● - VCS_STAGED_ICON '\u271A' # ✚ - VCS_STASH_ICON '\u235F' # ⍟ - VCS_INCOMING_CHANGES_ICON '\u2193' # ↓ - VCS_OUTGOING_CHANGES_ICON '\u2191' # ↑ - VCS_TAG_ICON '' - VCS_BOOKMARK_ICON '\u263F' # ☿ - VCS_COMMIT_ICON '' - VCS_BRANCH_ICON '\uE0A0 ' #  - VCS_REMOTE_BRANCH_ICON '\u2192' # → - VCS_LOADING_ICON '' - VCS_GIT_ICON '' - VCS_GIT_GITHUB_ICON '' - VCS_GIT_BITBUCKET_ICON '' - VCS_GIT_GITLAB_ICON '' - VCS_HG_ICON '' - VCS_SVN_ICON '' - RUST_ICON 'R' - PYTHON_ICON 'Py' - SWIFT_ICON 'Swift' - GO_ICON 'Go' - GOLANG_ICON 'Go' - PUBLIC_IP_ICON 'IP' - LOCK_ICON '\UE0A2' - NORDVPN_ICON '\UE0A2' - EXECUTION_TIME_ICON '' - SSH_ICON 'ssh' - VPN_ICON 'vpn' - KUBERNETES_ICON '\U2388' # ⎈ - DROPBOX_ICON 'Dropbox' - DATE_ICON '' - TIME_ICON '' - JAVA_ICON '\U2615' # ☕︎ - LARAVEL_ICON '' - RANGER_ICON '\u2B50' # ⭐ - MIDNIGHT_COMMANDER_ICON 'mc' - VIM_ICON 'vim' - TERRAFORM_ICON 'tf' - PROXY_ICON '\u2194' # ↔ - DOTNET_ICON '.NET' - DOTNET_CORE_ICON '.NET' - AZURE_ICON '\u2601' # ☁ - DIRENV_ICON '\u25BC' # ▼ - FLUTTER_ICON 'F' - GCLOUD_ICON 'G' - LUA_ICON 'lua' - PERL_ICON 'perl' - NNN_ICON 'nnn' - LF_ICON 'lf' - XPLR_ICON 'xplr' - TIMEWARRIOR_ICON 'tw' - TASKWARRIOR_ICON 'task' - NIX_SHELL_ICON 'nix' - WIFI_ICON 'WiFi' - ERLANG_ICON 'erl' - ELIXIR_ICON 'elixir' - POSTGRES_ICON 'postgres' - PHP_ICON 'php' - HASKELL_ICON 'hs' - PACKAGE_ICON 'pkg' - JULIA_ICON 'jl' - SCALA_ICON 'scala' - TOOLBOX_ICON '\u2B22' # ⬢ - ARCH_ICON 'arch' - ) - ;; - esac - - # Override the above icon settings with any user-defined variables. - case $POWERLEVEL9K_MODE in - 'flat') - icons[LEFT_SEGMENT_SEPARATOR]='' - icons[RIGHT_SEGMENT_SEPARATOR]='' - icons[LEFT_SUBSEGMENT_SEPARATOR]='|' - icons[RIGHT_SUBSEGMENT_SEPARATOR]='|' - ;; - 'compatible') - icons[LEFT_SEGMENT_SEPARATOR]='\u2B80' # ⮀ - icons[RIGHT_SEGMENT_SEPARATOR]='\u2B82' # ⮂ - icons[VCS_BRANCH_ICON]='@' - ;; - esac - - if [[ $POWERLEVEL9K_ICON_PADDING == none && $POWERLEVEL9K_MODE != ascii ]]; then - icons=("${(@kv)icons%% #}") - icons[LEFT_SEGMENT_END_SEPARATOR]+=' ' - icons[MULTILINE_LAST_PROMPT_PREFIX]+=' ' - icons[VCS_TAG_ICON]+=' ' - icons[VCS_BOOKMARK_ICON]+=' ' - icons[VCS_COMMIT_ICON]+=' ' - icons[VCS_BRANCH_ICON]+=' ' - icons[VCS_REMOTE_BRANCH_ICON]+=' ' - fi -} - -# Sadly, this is a part of public API. Its use is emphatically discouraged. -function print_icon() { - eval "$__p9k_intro" - _p9k_init_icons - local var=POWERLEVEL9K_$1 - if (( $+parameters[$var] )); then - echo -n - ${(P)var} - else - echo -n - $icons[$1] - fi -} - -# Prints a list of configured icons. -# -# * $1 string - If "original", then the original icons are printed, -# otherwise "print_icon" is used, which takes the users -# overrides into account. -function get_icon_names() { - eval "$__p9k_intro" - _p9k_init_icons - local key - for key in ${(@kon)icons}; do - echo -n - "POWERLEVEL9K_$key: " - print -nP "%K{red} %k" - if [[ $1 == original ]]; then - echo -n - $icons[$key] - else - print_icon $key - fi - print -P "%K{red} %k" - done -} diff --git a/airootfs/etc/skel/powerlevel10k/internal/notes.md b/airootfs/etc/skel/powerlevel10k/internal/notes.md deleted file mode 100644 index dea28d3..0000000 --- a/airootfs/etc/skel/powerlevel10k/internal/notes.md +++ /dev/null @@ -1,197 +0,0 @@ -battery: use the same technique as in vpn_ip to avoid reset=2. - ---- - -implement fake gitstatus api on top of vcs_info (or plain git?) + worker and use it if there is no -gitstatus. - ---- - -- call vcs_info on worker. the tricky question is what to display while "loading". - ---- - -- add _SHOW_SYSTEM to all *env segments. - ---- - -- support states in SHOW_ON_COMMAND: POWERLEVEL9K_SEGMENT_STATE_SHOW_ON_COMMAND='...' - ---- - -add POWERLEVEL9K_${SEGMENT}_${STATE}_SHOW_IN_DIR='pwd_pattern'; implement the same way as -SHOW_ON_UPGLOB. how should it interact with POWERLEVEL9K_${SEGMENT}_DISABLED_DIR_PATTERN? - ---- - -add `p10k upglob`; returns 0 on match and sets REPLY to the directory where match was found. - ---- - -when directory cannot be shortened any further, start chopping off segments from the left and -replacing the chopped off part with `…`. e.g., `…/x/anchor/y/anchor`. the shortest dir -representation is thus `…/last` or `…/last` depending on whether the last segment is an anchor. -the replacement parameter's value is `…/` (with a slash) to allow for `x/anchor/y/anchor`. - ---- - -- add to faq: how do i display an environment variable in prompt? link it from "extensible" - ---- - -- add to faq: how do i display an icon in prompt? link it from "extensible" - ---- - -- add root_indicator to config templates - ---- - -- test chruby and add it to config templates - ---- - -- add ssh to config templates - ---- - -- add swift version to config templates; see if there is a good pattern for PROJECT_ONLY - ---- - -- add swiftenv - ---- - -- add faq: how to customize directory shortening? mention POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER, -POWERLEVEL9K_DIR_MAX_LENGTH and co., and truncate_to_last. - ---- - -fix a bug in zsh: https://github.com/romkatv/powerlevel10k/issues/502. to reproduce: - -```zsh -emulate zsh -o prompt_percent -c 'print -P "%F{#ff0000}red%F{green}%B bold green"' -``` - ---- - -add `p10k explain` that prints something like this: - -```text -segment icons meaning - ---- - ---- - ---- - ---- - ---- - ---- - ---- - ---- --- -status ✔ ✘ exit code of the last command -``` - -implement it the hard way: for every enabled segment go over all its {state,icon} pairs, resolve -the icon (if not absolute), apply VISUAL_IDENTIFIER_EXPANSION, remove leading and trailing -whitespace and print without formatting (sort of like `print -P | cat`); print segment names in -green and icons in bold; battery can have an unlimited number of icons, so `...` would be needed -(based on total length of concatenated icons rather than the number of icons); user-defined -segments would have "unknown" icons by default (yellow and not bold); can allow them to -participate by defining `explainprompt_foo` that populates array `reply` with strings like this: -'-s STATE -i LOCK_ICON +r'; the first element must be segment description. - ---- - -add `docker_context` prompt segment; similar to `kubecontext`; the data should come from -`currentContext` field in `~/.docker/config.json` (according to -https://github.com/starship/starship/issues/995); there is also `DOCKER_CONTEXT`; more info: -https://docs.docker.com/engine/reference/commandline/context_use; also -https://github.com/starship/starship/pull/996. - ---- - -support `env`, `ionice` and `strace` precommands in `parser.zsh`. - ---- - -Add ruler to configuration wizard. Options: `─`, `·`, `╌`, `┄`, `▁`, `═`. - ---- - -Add frame styles to the wizard. - -```text -╭─ -╰─ - -┌─ -└─ - -┏━ -┗━ - -╔═ -╚═ - -▛▀ -▙▄ -``` - -Prompt connection should have matching options. - ---- - -Add `POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_MIRROR_SEPARATOR`. If set, left segments get separated with -`POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR` followed by `POWERLEVEL9K_LEFT_SEGMENT_MIRROR_SEPARATOR`. -Each is drawn without background. The first with the foreground of left segment, the second with -the background of right segment. To insert space in between, embed it in -`POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_MIRROR_SEPARATOR`. -`POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR` is unused. - ---- - -Add *Segment Connection* screen to configuration wizard with options *Fused*, *Touching* and -*Disjoint*. The last two differ by the absence/presence of space between `SEGMENT_SEPARATOR` and -`SEGMENT_MIRROR_SEPARATOR`. - -*Fused* requires line separator (there is already a screen for it) but the other two options require -two filled separators similar to heads and tail. Figure out how to present this choice. - ---- - -Optimize auto-wizard check. - -```text -time ( repeat 1000 [[ -z "${parameters[(I)POWERLEVEL9K_*~(POWERLEVEL9K_MODE|POWERLEVEL9K_CONFIG_FILE)]}" ]] ) -user=0.21s system=0.05s cpu=99% total=0.264 - -time ( repeat 1000 [[ -z "${parameters[(I)POWERLEVEL9K_*]}" ]] ) -user=0.17s system=0.00s cpu=99% total=0.175 -``` - ---- - -Add the equivalent of `P9K_PYTHON_VERSION` to all `*env` segments where it makes sense. - ---- - -Define `P9K_ICON` on initialization. Fill it with `$icon`. Duplicate every key that ends in `_ICON`. -Respect `POWERLEVEL9K_VCS_STASH_ICON` overrides but not anything with segment name or state. - -Define `POWERLEVEL9K_VCS_*` parameters in config templates for all symbols used in -`my_git_formatter`. Add missing entries to `icons`. Use `$P9K_ICON[...]` within `my_git_formatter`. -Add a screen to the wizard to choose between clear and circled icons. - ---- - -Add a screen to the wizard asking whether to set `POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~'`. -Show it only if there is `$HOME/.git`. By default this parameter should be commented out. diff --git a/airootfs/etc/skel/powerlevel10k/internal/p10k.zsh b/airootfs/etc/skel/powerlevel10k/internal/p10k.zsh deleted file mode 100644 index ac4783e..0000000 --- a/airootfs/etc/skel/powerlevel10k/internal/p10k.zsh +++ /dev/null @@ -1,9334 +0,0 @@ -if [[ $__p9k_sourced != 13 ]]; then - >&2 print -P "" - >&2 print -P "[%F{1}ERROR%f]: Corrupted powerlevel10k installation." - >&2 print -P "" - if (( ${+functions[antigen]} )); then - >&2 print -P "If using %Bantigen%b, run the following command to fix:" - >&2 print -P "" - >&2 print -P " %F{2}antigen%f reset" - if [[ -d ~/.antigen ]]; then - >&2 print -P "" - >&2 print -P "If it doesn't help, try this:" - >&2 print -P "" - >&2 print -P " %F{2}rm%f -rf %U~/.antigen%u" - fi - else - >&2 print -P "Try resetting cache in your plugin manager or" - >&2 print -P "reinstalling powerlevel10k from scratch." - fi - >&2 print -P "" - return 1 -fi - -if [[ $ZSH_VERSION != (5.<1->*|<6->.*) ]]; then - () { - >&2 echo -E "You are using ZSH version $ZSH_VERSION. The minimum required version for Powerlevel10k is 5.1." - >&2 echo -E "Type 'echo \$ZSH_VERSION' to see your current zsh version." - local def=${SHELL:c:A} - local cur=${${ZSH_ARGZERO#-}:c:A} - local cur_v="$($cur -c 'echo -E $ZSH_VERSION' 2>/dev/null)" - if [[ $cur_v == $ZSH_VERSION && $cur != $def ]]; then - >&2 echo -E "The shell you are currently running is likely $cur." - fi - local other=${${:-zsh}:c} - if [[ -n $other ]] && $other -fc '[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]]' &>/dev/null; then - local other_v="$($other -fc 'echo -E $ZSH_VERSION' 2>/dev/null)" - if [[ -n $other_v && $other_v != $ZSH_VERSION ]]; then - >&2 echo -E "You have $other with version $other_v but this is not what you are using." - if [[ -n $def && $def != ${other:A} ]]; then - >&2 echo -E "To change your user shell, type the following command:" - >&2 echo -E "" - if [[ "$(grep -F $other /etc/shells 2>/dev/null)" != $other ]]; then - >&2 echo -E " echo ${(q-)other} | sudo tee -a /etc/shells" - fi - >&2 echo -E " chsh -s ${(q-)other}" - fi - fi - fi - } - return 1 -fi - -builtin source "${__p9k_root_dir}/internal/configure.zsh" -builtin source "${__p9k_root_dir}/internal/worker.zsh" -builtin source "${__p9k_root_dir}/internal/parser.zsh" -builtin source "${__p9k_root_dir}/internal/icons.zsh" - -# For compatibility with Powerlevel9k. It's not recommended to use mnemonic color -# names in the configuration except for colors 0-7 as these are standard. -typeset -grA __p9k_colors=( - black 000 red 001 green 002 yellow 003 - blue 004 magenta 005 cyan 006 white 007 - grey 008 maroon 009 lime 010 olive 011 - navy 012 fuchsia 013 aqua 014 teal 014 - silver 015 grey0 016 navyblue 017 darkblue 018 - blue3 020 blue1 021 darkgreen 022 deepskyblue4 025 - dodgerblue3 026 dodgerblue2 027 green4 028 springgreen4 029 - turquoise4 030 deepskyblue3 032 dodgerblue1 033 darkcyan 036 - lightseagreen 037 deepskyblue2 038 deepskyblue1 039 green3 040 - springgreen3 041 cyan3 043 darkturquoise 044 turquoise2 045 - green1 046 springgreen2 047 springgreen1 048 mediumspringgreen 049 - cyan2 050 cyan1 051 purple4 055 purple3 056 - blueviolet 057 grey37 059 mediumpurple4 060 slateblue3 062 - royalblue1 063 chartreuse4 064 paleturquoise4 066 steelblue 067 - steelblue3 068 cornflowerblue 069 darkseagreen4 071 cadetblue 073 - skyblue3 074 chartreuse3 076 seagreen3 078 aquamarine3 079 - mediumturquoise 080 steelblue1 081 seagreen2 083 seagreen1 085 - darkslategray2 087 darkred 088 darkmagenta 091 orange4 094 - lightpink4 095 plum4 096 mediumpurple3 098 slateblue1 099 - wheat4 101 grey53 102 lightslategrey 103 mediumpurple 104 - lightslateblue 105 yellow4 106 darkseagreen 108 lightskyblue3 110 - skyblue2 111 chartreuse2 112 palegreen3 114 darkslategray3 116 - skyblue1 117 chartreuse1 118 lightgreen 120 aquamarine1 122 - darkslategray1 123 deeppink4 125 mediumvioletred 126 darkviolet 128 - purple 129 mediumorchid3 133 mediumorchid 134 darkgoldenrod 136 - rosybrown 138 grey63 139 mediumpurple2 140 mediumpurple1 141 - darkkhaki 143 navajowhite3 144 grey69 145 lightsteelblue3 146 - lightsteelblue 147 darkolivegreen3 149 darkseagreen3 150 lightcyan3 152 - lightskyblue1 153 greenyellow 154 darkolivegreen2 155 palegreen1 156 - darkseagreen2 157 paleturquoise1 159 red3 160 deeppink3 162 - magenta3 164 darkorange3 166 indianred 167 hotpink3 168 - hotpink2 169 orchid 170 orange3 172 lightsalmon3 173 - lightpink3 174 pink3 175 plum3 176 violet 177 - gold3 178 lightgoldenrod3 179 tan 180 mistyrose3 181 - thistle3 182 plum2 183 yellow3 184 khaki3 185 - lightyellow3 187 grey84 188 lightsteelblue1 189 yellow2 190 - darkolivegreen1 192 darkseagreen1 193 honeydew2 194 lightcyan1 195 - red1 196 deeppink2 197 deeppink1 199 magenta2 200 - magenta1 201 orangered1 202 indianred1 204 hotpink 206 - mediumorchid1 207 darkorange 208 salmon1 209 lightcoral 210 - palevioletred1 211 orchid2 212 orchid1 213 orange1 214 - sandybrown 215 lightsalmon1 216 lightpink1 217 pink1 218 - plum1 219 gold1 220 lightgoldenrod2 222 navajowhite1 223 - mistyrose1 224 thistle1 225 yellow1 226 lightgoldenrod1 227 - khaki1 228 wheat1 229 cornsilk1 230 grey100 231 - grey3 232 grey7 233 grey11 234 grey15 235 - grey19 236 grey23 237 grey27 238 grey30 239 - grey35 240 grey39 241 grey42 242 grey46 243 - grey50 244 grey54 245 grey58 246 grey62 247 - grey66 248 grey70 249 grey74 250 grey78 251 - grey82 252 grey85 253 grey89 254 grey93 255) - -# For compatibility with Powerlevel9k. -# -# Type `getColorCode background` or `getColorCode foreground` to see the list of predefined colors. -function getColorCode() { - eval "$__p9k_intro" - if (( ARGC == 1 )); then - case $1 in - foreground) - local k - for k in "${(k@)__p9k_colors}"; do - local v=${__p9k_colors[$k]} - print -rP -- "%F{$v}$v - $k%f" - done - return 0 - ;; - background) - local k - for k in "${(k@)__p9k_colors}"; do - local v=${__p9k_colors[$k]} - print -rP -- "%K{$v}$v - $k%k" - done - return 0 - ;; - esac - fi - echo "Usage: getColorCode background|foreground" >&2 - return 1 -} - -# _p9k_declare [default]... -function _p9k_declare() { - local -i set=$+parameters[$2] - (( ARGC > 2 || set )) || return 0 - case $1 in - -b) - if (( set )); then - [[ ${(P)2} == true ]] && typeset -gi _$2=1 || typeset -gi _$2=0 - else - typeset -gi _$2=$3 - fi - ;; - -a) - local -a v=("${(@P)2}") - if (( set )); then - eval "typeset -ga _${(q)2}=(${(@qq)v})"; - else - if [[ $3 != '--' ]]; then - echo "internal error in _p9k_declare " "${(qqq)@}" >&2 - fi - eval "typeset -ga _${(q)2}=(${(@qq)*[4,-1]})" - fi - ;; - -i) - (( set )) && typeset -gi _$2=$2 || typeset -gi _$2=$3 - ;; - -F) - (( set )) && typeset -gF _$2=$2 || typeset -gF _$2=$3 - ;; - -s) - (( set )) && typeset -g _$2=${(P)2} || typeset -g _$2=$3 - ;; - -e) - if (( set )); then - local v=${(P)2} - typeset -g _$2=${(g::)v} - else - typeset -g _$2=${(g::)3} - fi - ;; - *) - echo "internal error in _p9k_declare " "${(qqq)@}" >&2 - esac -} - -function _p9k_read_word() { - local -a stat - zstat -A stat +mtime -- $1 2>/dev/null || stat=(-1) - local cached=$_p9k__read_word_cache[$1] - if [[ $cached == $stat[1]:* ]]; then - _p9k__ret=${cached#*:} - else - local rest - _p9k__ret= - { read _p9k__ret rest <$1 } 2>/dev/null - _p9k__ret=${_p9k__ret%$'\r'} - _p9k__read_word_cache[$1]=$stat[1]:$_p9k__ret - fi - [[ -n $_p9k__ret ]] -} - -function _p9k_fetch_cwd() { - if [[ $PWD == /* && $PWD -ef . ]]; then - _p9k__cwd=$PWD - else - _p9k__cwd=${${${:-.}:a}:-.} - fi - _p9k__cwd_a=${${_p9k__cwd:A}:-.} - - case $_p9k__cwd in - /|.) - _p9k__parent_dirs=() - _p9k__parent_mtimes=() - _p9k__parent_mtimes_i=() - _p9k__parent_mtimes_s= - return - ;; - ~|~/*) - local parent=${${${:-~/..}:a}%/}/ - local parts=(${(s./.)_p9k__cwd#$parent}) - ;; - *) - local parent=/ - local parts=(${(s./.)_p9k__cwd}) - ;; - esac - local MATCH - _p9k__parent_dirs=(${(@)${:-{$#parts..1}}/(#m)*/$parent${(pj./.)parts[1,MATCH]}}) - if ! zstat -A _p9k__parent_mtimes +mtime -- $_p9k__parent_dirs 2>/dev/null; then - _p9k__parent_mtimes=(${(@)parts/*/-1}) - fi - _p9k__parent_mtimes_i=(${(@)${:-{1..$#parts}}/(#m)*/$MATCH:$_p9k__parent_mtimes[MATCH]}) - _p9k__parent_mtimes_s="$_p9k__parent_mtimes_i" -} - -# Usage: _p9k_glob parent_dir_index pattern [glob_qual] -# -# parent_dir_index indexes _p9k__parent_dirs. -# -# Returns the number of matches. -# -# Pattern cannot have slashes. -# -# Example: _p9k_glob 3 '*.csproj' -function _p9k_glob() { - local dir=$_p9k__parent_dirs[$1] - local cached=$_p9k__glob_cache[$dir/$2] - if [[ $cached == $_p9k__parent_mtimes[$1]:* ]]; then - return ${cached##*:} - fi - local -a stat - zstat -A stat +mtime -- $dir 2>/dev/null || stat=(-1) - eval 'local files=($dir/$~2('$3'N:t))' - _p9k__glob_cache[$dir/$2]="$stat[1]:$#files" - return $#files -} - -# Usage: _p9k_upglob pattern [glob_qual] -# -# Returns index within _p9k__parent_dirs or 0 if there is no match. -# -# Search stops before reaching ~/../ or / and never matches in those directories. -# -# Example: _p9k_upglob '*.csproj' -function _p9k_upglob() { - local cached=$_p9k__upsearch_cache[$_p9k__cwd/$1] - if [[ -n $cached ]]; then - if [[ $_p9k__parent_mtimes_s == ${cached% *}(| *) ]]; then - return ${cached##* } - fi - cached=(${(s: :)cached}) - local last_idx=$cached[-1] - cached[-1]=() - local -i i - for i in ${(@)${cached:|_p9k__parent_mtimes_i}%:*}; do - _p9k_glob $i "$@" && continue - _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i" - return i - done - if (( i != last_idx )); then - _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,$#cached]} $last_idx" - return last_idx - fi - i=$(($#cached + 1)) - else - local -i i=1 - fi - for ((; i <= $#_p9k__parent_mtimes; ++i)); do - _p9k_glob $i "$@" && continue - _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i" - return i - done - _p9k__upsearch_cache[$_p9k__cwd/$1]="$_p9k__parent_mtimes_s 0" - return 0 -} - -# If we execute `print -P $1`, how many characters will be printed on the last line? -# Assumes that `%{%}` and `%G` don't lie. -# -# _p9k_prompt_length '' => 0 -# _p9k_prompt_length 'abc' => 3 -# _p9k_prompt_length $'abc\nxy' => 2 -# _p9k_prompt_length $'\t' => 8 -# _p9k_prompt_length '%F{red}abc' => 3 -# _p9k_prompt_length $'%{a\b%Gb%}' => 1 -function _p9k_prompt_length() { - local -i COLUMNS=1024 - local -i x y=${#1} m - if (( y )); then - while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do - x=y - (( y *= 2 )) - done - while (( y > x + 1 )); do - (( m = x + (y - x) / 2 )) - (( ${${(%):-$1%$m(l.x.y)}[-1]} = m )) - done - fi - typeset -g _p9k__ret=$x -} - -typeset -gr __p9k_byte_suffix=('B' 'K' 'M' 'G' 'T' 'P' 'E' 'Z' 'Y') - -# 512 => 512B -# 1800 => 1.76K -# 18000 => 17.6K -function _p9k_human_readable_bytes() { - typeset -F n=$1 - local suf - for suf in $__p9k_byte_suffix; do - (( n < 1024 )) && break - (( n /= 1024 )) - done - if (( n >= 100 )); then - printf -v _p9k__ret '%.0f.' $n - elif (( n >= 10 )); then - printf -v _p9k__ret '%.1f' $n - else - printf -v _p9k__ret '%.2f' $n - fi - _p9k__ret=${${_p9k__ret%%0#}%.}$suf -} - -if [[ $ZSH_VERSION == (5.<4->*|<6->.*) ]]; then - function _p9k_print_params() { typeset -p -- "$@" } -else - # Cannot use `typeset -p` unconditionally because of bugs in zsh. - function _p9k_print_params() { - local name - for name; do - case $parameters[$name] in - array*) - print -r -- "$name=(" "${(@q)${(@P)name}}" ")" - ;; - association*) - # Cannot use "${(@q)${(@kvP)name}}" because of bugs in zsh. - local kv=("${(@kvP)name}") - print -r -- "$name=(" "${(@q)kv}" ")" - ;; - *) - print -r -- "$name=${(q)${(P)name}}" - ;; - esac - done - } -fi - -# Determine if the passed segment is used in the prompt -# -# Pass the name of the segment to this function to test for its presence in -# either the LEFT or RIGHT prompt arrays. -# * $1: The segment to be tested. -_p9k_segment_in_use() { - (( $_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[(I)$1(|_joined)] || - $_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[(I)$1(|_joined)] )) -} - -# Caching allows storing array-to-array associations. It should be used like this: -# -# if ! _p9k_cache_get "$key1" "$key2"; then -# # Compute val1 and val2 and then store them in the cache. -# _p9k_cache_set "$val1" "$val2" -# fi -# # Here ${_p9k__cache_val[1]} and ${_p9k__cache_val[2]} are $val1 and $val2 respectively. -# -# Limitations: -# -# * Calling _p9k_cache_set without arguments clears the cache entry. Subsequent calls to -# _p9k_cache_get for the same key will return an error. -# * There must be no intervening _p9k_cache_get calls between the associated _p9k_cache_get -# and _p9k_cache_set. -_p9k_cache_set() { - # Uncomment to see cache misses. - # echo "caching: ${(@0q)_p9k__cache_key} => (${(q)@})" >&2 - _p9k_cache[$_p9k__cache_key]="${(pj:\0:)*}0" - _p9k__cache_val=("$@") - _p9k__state_dump_scheduled=1 -} - -_p9k_cache_get() { - _p9k__cache_key="${(pj:\0:)*}" - local v=$_p9k_cache[$_p9k__cache_key] - [[ -n $v ]] && _p9k__cache_val=("${(@0)${v[1,-2]}}") -} - -_p9k_cache_ephemeral_set() { - # Uncomment to see cache misses. - # echo "caching: ${(@0q)_p9k__cache_key} => (${(q)@})" >&2 - _p9k__cache_ephemeral[$_p9k__cache_key]="${(pj:\0:)*}0" - _p9k__cache_val=("$@") -} - -_p9k_cache_ephemeral_get() { - _p9k__cache_key="${(pj:\0:)*}" - local v=$_p9k__cache_ephemeral[$_p9k__cache_key] - [[ -n $v ]] && _p9k__cache_val=("${(@0)${v[1,-2]}}") -} - -_p9k_cache_stat_get() { - local -H stat - local label=$1 f - shift - - _p9k__cache_stat_meta= - _p9k__cache_stat_fprint= - - for f; do - if zstat -H stat -- $f 2>/dev/null; then - _p9k__cache_stat_meta+="${(q)f} $stat[inode] $stat[mtime] $stat[size] $stat[mode]; " - fi - done - - if _p9k_cache_get $0 $label meta "$@"; then - if [[ $_p9k__cache_val[1] == $_p9k__cache_stat_meta ]]; then - _p9k__cache_stat_fprint=$_p9k__cache_val[2] - local -a key=($0 $label fprint "$@" "$_p9k__cache_stat_fprint") - _p9k__cache_fprint_key="${(pj:\0:)key}" - shift 2 _p9k__cache_val - return 0 - else - local -a key=($0 $label fprint "$@" "$_p9k__cache_val[2]") - _p9k__cache_ephemeral[${(pj:\0:)key}]="${(pj:\0:)_p9k__cache_val[3,-1]}0" - fi - fi - - if (( $+commands[md5] )); then - _p9k__cache_stat_fprint="$(md5 -- $* 2>&1)" - elif (( $+commands[md5sum] )); then - _p9k__cache_stat_fprint="$(md5sum -b -- $* 2>&1)" - else - return 1 - fi - - local meta_key=$_p9k__cache_key - if _p9k_cache_ephemeral_get $0 $label fprint "$@" "$_p9k__cache_stat_fprint"; then - _p9k__cache_fprint_key=$_p9k__cache_key - _p9k__cache_key=$meta_key - _p9k_cache_set "$_p9k__cache_stat_meta" "$_p9k__cache_stat_fprint" "$_p9k__cache_val[@]" - shift 2 _p9k__cache_val - return 0 - fi - - _p9k__cache_fprint_key=$_p9k__cache_key - _p9k__cache_key=$meta_key - return 1 -} - -_p9k_cache_stat_set() { - _p9k_cache_set "$_p9k__cache_stat_meta" "$_p9k__cache_stat_fprint" "$@" - _p9k__cache_key=$_p9k__cache_fprint_key - _p9k_cache_ephemeral_set "$@" -} - -# _p9k_param prompt_foo_BAR BACKGROUND red -_p9k_param() { - local key="_p9k_param ${(pj:\0:)*}" - _p9k__ret=$_p9k_cache[$key] - if [[ -n $_p9k__ret ]]; then - _p9k__ret[-1,-1]='' - else - if [[ ${1//-/_} == (#b)prompt_([a-z0-9_]#)(*) ]]; then - local var=_POWERLEVEL9K_${${(U)match[1]}//İ/I}$match[2]_$2 - if (( $+parameters[$var] )); then - _p9k__ret=${(P)var} - else - var=_POWERLEVEL9K_${${(U)match[1]%_}//İ/I}_$2 - if (( $+parameters[$var] )); then - _p9k__ret=${(P)var} - else - var=_POWERLEVEL9K_$2 - if (( $+parameters[$var] )); then - _p9k__ret=${(P)var} - else - _p9k__ret=$3 - fi - fi - fi - else - local var=_POWERLEVEL9K_$2 - if (( $+parameters[$var] )); then - _p9k__ret=${(P)var} - else - _p9k__ret=$3 - fi - fi - _p9k_cache[$key]=${_p9k__ret}. - fi -} - -# _p9k_get_icon prompt_foo_BAR BAZ_ICON quix -_p9k_get_icon() { - local key="_p9k_get_icon ${(pj:\0:)*}" - _p9k__ret=$_p9k_cache[$key] - if [[ -n $_p9k__ret ]]; then - _p9k__ret[-1,-1]='' - else - if [[ $2 == $'\1'* ]]; then - _p9k__ret=${2[2,-1]} - else - _p9k_param "$1" "$2" ${icons[$2]-$'\1'$3} - if [[ $_p9k__ret == $'\1'* ]]; then - _p9k__ret=${_p9k__ret[2,-1]} - else - _p9k__ret=${(g::)_p9k__ret} - [[ $_p9k__ret != $'\b'? ]] || _p9k__ret="%{$_p9k__ret%}" # penance for past sins - fi - fi - _p9k_cache[$key]=${_p9k__ret}. - fi -} - -_p9k_translate_color() { - if [[ $1 == <-> ]]; then # decimal color code: 255 - _p9k__ret=${(l.3..0.)1} - elif [[ $1 == '#'[[:xdigit:]]## ]]; then # hexademical color code: #ffffff - _p9k__ret=${${(L)1}//ı/i} - else # named color: red - # Strip prifixes if there are any. - _p9k__ret=$__p9k_colors[${${${1#bg-}#fg-}#br}] - fi -} - -# _p9k_color prompt_foo_BAR BACKGROUND red -_p9k_color() { - local key="_p9k_color ${(pj:\0:)*}" - _p9k__ret=$_p9k_cache[$key] - if [[ -n $_p9k__ret ]]; then - _p9k__ret[-1,-1]='' - else - _p9k_param "$@" - _p9k_translate_color $_p9k__ret - _p9k_cache[$key]=${_p9k__ret}. - fi -} - -# _p9k_vcs_style CLEAN REMOTE_BRANCH -_p9k_vcs_style() { - local key="$0 ${(pj:\0:)*}" - _p9k__ret=$_p9k_cache[$key] - if [[ -n $_p9k__ret ]]; then - _p9k__ret[-1,-1]='' - else - local style=%b # TODO: support bold - _p9k_color prompt_vcs_$1 BACKGROUND "${__p9k_vcs_states[$1]}" - _p9k_background $_p9k__ret - style+=$_p9k__ret - - local var=_POWERLEVEL9K_VCS_${1}_${2}FORMAT_FOREGROUND - if (( $+parameters[$var] )); then - _p9k_translate_color "${(P)var}" - else - var=_POWERLEVEL9K_VCS_${2}FORMAT_FOREGROUND - if (( $+parameters[$var] )); then - _p9k_translate_color "${(P)var}" - else - _p9k_color prompt_vcs_$1 FOREGROUND "$_p9k_color1" - fi - fi - - _p9k_foreground $_p9k__ret - _p9k__ret=$style$_p9k__ret - _p9k_cache[$key]=${_p9k__ret}. - fi -} - -_p9k_background() { - [[ -n $1 ]] && _p9k__ret="%K{$1}" || _p9k__ret="%k" -} - -_p9k_foreground() { - # Note: This code used to produce `%1F` instead of `%F{1}` because it's more efficient. - # Unfortunately, this triggers a bug in zsh. Namely, `%1F{2}` gets percent-expanded as if - # it was `%F{2}`. - [[ -n $1 ]] && _p9k__ret="%F{$1}" || _p9k__ret="%f" -} - -_p9k_escape_style() { - [[ $1 == *'}'* ]] && _p9k__ret='${:-"'$1'"}' || _p9k__ret=$1 -} - -_p9k_escape() { - [[ $1 == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] && _p9k__ret="\${(Q)\${:-${(qqq)${(q)1}}}}" || _p9k__ret=$1 -} - -# * $1: Name of the function that was originally invoked. -# Necessary, to make the dynamic color-overwrite mechanism work. -# * $2: Background color. -# * $3: Foreground color. -# * $4: An identifying icon. -# * $5: 1 to to perform parameter expansion and process substitution. -# * $6: If not empty but becomes empty after parameter expansion and process substitution, -# the segment isn't rendered. -# * $7: Content. -_p9k_left_prompt_segment() { - if ! _p9k_cache_get "$0" "$1" "$2" "$3" "$4" "$_p9k__segment_index"; then - _p9k_color $1 BACKGROUND $2 - local bg_color=$_p9k__ret - _p9k_background $bg_color - local bg=$_p9k__ret - - _p9k_color $1 FOREGROUND $3 - local fg_color=$_p9k__ret - _p9k_foreground $fg_color - local fg=$_p9k__ret - - local style=%b$bg$fg - local style_=${style//\}/\\\}} - - _p9k_get_icon $1 LEFT_SEGMENT_SEPARATOR - local sep=$_p9k__ret - _p9k_escape $_p9k__ret - local sep_=$_p9k__ret - - _p9k_get_icon $1 LEFT_SUBSEGMENT_SEPARATOR - _p9k_escape $_p9k__ret - local subsep_=$_p9k__ret - - local icon_ - if [[ -n $4 ]]; then - _p9k_get_icon $1 $4 - _p9k_escape $_p9k__ret - icon_=$_p9k__ret - fi - - _p9k_get_icon $1 LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL - local start_sep=$_p9k__ret - [[ -n $start_sep ]] && start_sep="%b%k%F{$bg_color}$start_sep" - - _p9k_get_icon $1 LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL $sep - _p9k_escape $_p9k__ret - local end_sep_=$_p9k__ret - - _p9k_get_icon $1 WHITESPACE_BETWEEN_LEFT_SEGMENTS ' ' - local space=$_p9k__ret - - _p9k_get_icon $1 LEFT_LEFT_WHITESPACE $space - local left_space=$_p9k__ret - [[ $left_space == *%* ]] && left_space+=$style - - _p9k_get_icon $1 LEFT_RIGHT_WHITESPACE $space - _p9k_escape $_p9k__ret - local right_space_=$_p9k__ret - [[ $right_space_ == *%* ]] && right_space_+=$style_ - - local s='<_p9k__s>' ss='<_p9k__ss>' - - local -i non_hermetic=0 - - # Segment separator logic: - # - # if [[ $_p9k__bg == NONE ]]; then - # 1 - # elif (( joined )); then - # 2 - # elif [[ $bg_color == (${_p9k__bg}|${_p9k__bg:-0}) ]]; then - # 3 - # else - # 4 - # fi - - local t=$(($#_p9k_t - __p9k_ksh_arrays)) - _p9k_t+=$start_sep$style$left_space # 1 - _p9k_t+=$style # 2 - if [[ -n $fg_color && $fg_color == $bg_color ]]; then - if [[ $fg_color == $_p9k_color1 ]]; then - _p9k_foreground $_p9k_color2 - else - _p9k_foreground $_p9k_color1 - fi - _p9k_t+=%b$bg$_p9k__ret$ss$style$left_space # 3 - else - _p9k_t+=%b$bg$ss$style$left_space # 3 - fi - _p9k_t+=%b$bg$s$style$left_space # 4 - - local join="_p9k__i>=$_p9k_left_join[$_p9k__segment_index]" - _p9k_param $1 SELF_JOINED false - if [[ $_p9k__ret == false ]]; then - if (( _p9k__segment_index > $_p9k_left_join[$_p9k__segment_index] )); then - join+="&&_p9k__i<$_p9k__segment_index" - else - join= - fi - fi - - local p= - p+="\${_p9k__n::=}" - p+="\${\${\${_p9k__bg:-0}:#NONE}:-\${_p9k__n::=$((t+1))}}" # 1 - if [[ -n $join ]]; then - p+="\${_p9k__n:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2 - fi - if (( __p9k_sh_glob )); then - p+="\${_p9k__n:=\${\${(M)\${:-x$bg_color}:#x\$_p9k__bg}:+$((t+3))}}" # 3 - p+="\${_p9k__n:=\${\${(M)\${:-x$bg_color}:#x\$${_p9k__bg:-0}}:+$((t+3))}}" # 3 - else - p+="\${_p9k__n:=\${\${(M)\${:-x$bg_color}:#x(\$_p9k__bg|\${_p9k__bg:-0})}:+$((t+3))}}" # 3 - fi - p+="\${_p9k__n:=$((t+4))}" # 4 - - _p9k_param $1 VISUAL_IDENTIFIER_EXPANSION '${P9K_VISUAL_IDENTIFIER}' - [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 - local icon_exp_=${_p9k__ret:+\"$_p9k__ret\"} - - _p9k_param $1 CONTENT_EXPANSION '${P9K_CONTENT}' - [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 - local content_exp_=${_p9k__ret:+\"$_p9k__ret\"} - - if [[ ( $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ) || - ( $content_exp_ != '"${P9K_CONTENT}"' && $content_exp_ == *'$'* ) ]]; then - p+="\${P9K_VISUAL_IDENTIFIER::=$icon_}" - fi - - local -i has_icon=-1 # maybe - - if [[ $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ]]; then - p+='${_p9k__v::='$icon_exp_$style_'}' - else - [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _p9k__ret=$icon_ || _p9k__ret=$icon_exp_ - if [[ -n $_p9k__ret ]]; then - p+="\${_p9k__v::=$_p9k__ret" - [[ $_p9k__ret == *%* ]] && p+=$style_ - p+="}" - has_icon=1 # definitely yes - else - has_icon=0 # definitely no - fi - fi - - p+='${_p9k__c::='$content_exp_'}${_p9k__c::=${_p9k__c//'$'\r''}}' - p+='${_p9k__e::=${${_p9k__'${_p9k__line_index}l${${1#prompt_}%%[A-Z0-9_]#}'+00}:-' - if (( has_icon == -1 )); then - p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}${${(%):-$_p9k__v%1(l.1.0)}[-1]}}' - else - p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}'$has_icon'}' - fi - - p+='}}+}' - - p+='${${_p9k__e:#00}:+${${_p9k_t[$_p9k__n]/'$ss'/$_p9k__ss}/'$s'/$_p9k__s}' - - _p9k_param $1 ICON_BEFORE_CONTENT '' - if [[ $_p9k__ret != false ]]; then - _p9k_param $1 PREFIX '' - _p9k__ret=${(g::)_p9k__ret} - _p9k_escape $_p9k__ret - p+=$_p9k__ret - [[ $_p9k__ret == *%* ]] && local -i need_style=1 || local -i need_style=0 - - if (( has_icon != 0 )); then - _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color - _p9k_foreground $_p9k__ret - _p9k__ret=%b$bg$_p9k__ret - _p9k__ret=${_p9k__ret//\}/\\\}} - if [[ $_p9k__ret != $style_ ]]; then - p+=$_p9k__ret'${_p9k__v}'$style_ - else - (( need_style )) && p+=$style_ - p+='${_p9k__v}' - fi - - _p9k_get_icon $1 LEFT_MIDDLE_WHITESPACE ' ' - if [[ -n $_p9k__ret ]]; then - _p9k_escape $_p9k__ret - [[ _p9k__ret == *%* ]] && _p9k__ret+=$style_ - p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' - fi - elif (( need_style )); then - p+=$style_ - fi - - p+='${_p9k__c}'$style_ - else - _p9k_param $1 PREFIX '' - _p9k__ret=${(g::)_p9k__ret} - _p9k_escape $_p9k__ret - p+=$_p9k__ret - [[ $_p9k__ret == *%* ]] && p+=$style_ - - p+='${_p9k__c}'$style_ - - if (( has_icon != 0 )); then - local -i need_style=0 - _p9k_get_icon $1 LEFT_MIDDLE_WHITESPACE ' ' - if [[ -n $_p9k__ret ]]; then - _p9k_escape $_p9k__ret - [[ $_p9k__ret == *%* ]] && need_style=1 - p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' - fi - - _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color - _p9k_foreground $_p9k__ret - _p9k__ret=%b$bg$_p9k__ret - _p9k__ret=${_p9k__ret//\}/\\\}} - [[ $_p9k__ret != $style_ || $need_style == 1 ]] && p+=$_p9k__ret - p+='$_p9k__v' - fi - fi - - _p9k_param $1 SUFFIX '' - _p9k__ret=${(g::)_p9k__ret} - _p9k_escape $_p9k__ret - p+=$_p9k__ret - [[ $_p9k__ret == *%* && -n $right_space_ ]] && p+=$style_ - p+=$right_space_ - - p+='${${:-' - p+="\${_p9k__s::=%F{$bg_color\}$sep_}\${_p9k__ss::=$subsep_}\${_p9k__sss::=%F{$bg_color\}$end_sep_}" - p+="\${_p9k__i::=$_p9k__segment_index}\${_p9k__bg::=$bg_color}" - p+='}+}' - - p+='}' - - _p9k_param $1 SHOW_ON_UPGLOB '' - _p9k_cache_set "$p" $non_hermetic $_p9k__ret - fi - - if [[ -n $_p9k__cache_val[3] ]]; then - _p9k__has_upglob=1 - _p9k_upglob $_p9k__cache_val[3] && return - fi - - _p9k__non_hermetic_expansion=$_p9k__cache_val[2] - - (( $5 )) && _p9k__ret=\"$7\" || _p9k_escape $7 - if [[ -z $6 ]]; then - _p9k__prompt+="\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]" - else - _p9k__prompt+="\${\${:-\"$6\"}:+\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]}" - fi -} - -# The same as _p9k_left_prompt_segment above but for the right prompt. -_p9k_right_prompt_segment() { - if ! _p9k_cache_get "$0" "$1" "$2" "$3" "$4" "$_p9k__segment_index"; then - _p9k_color $1 BACKGROUND $2 - local bg_color=$_p9k__ret - _p9k_background $bg_color - local bg=$_p9k__ret - local bg_=${_p9k__ret//\}/\\\}} - - _p9k_color $1 FOREGROUND $3 - local fg_color=$_p9k__ret - _p9k_foreground $fg_color - local fg=$_p9k__ret - - local style=%b$bg$fg - local style_=${style//\}/\\\}} - - _p9k_get_icon $1 RIGHT_SEGMENT_SEPARATOR - local sep=$_p9k__ret - _p9k_escape $_p9k__ret - local sep_=$_p9k__ret - - _p9k_get_icon $1 RIGHT_SUBSEGMENT_SEPARATOR - local subsep=$_p9k__ret - [[ $subsep == *%* ]] && subsep+=$style - - local icon_ - if [[ -n $4 ]]; then - _p9k_get_icon $1 $4 - _p9k_escape $_p9k__ret - icon_=$_p9k__ret - fi - - _p9k_get_icon $1 RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL $sep - local start_sep=$_p9k__ret - [[ -n $start_sep ]] && start_sep="%b%k%F{$bg_color}$start_sep" - - _p9k_get_icon $1 RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL - _p9k_escape $_p9k__ret - local end_sep_=$_p9k__ret - - _p9k_get_icon $1 WHITESPACE_BETWEEN_RIGHT_SEGMENTS ' ' - local space=$_p9k__ret - - _p9k_get_icon $1 RIGHT_LEFT_WHITESPACE $space - local left_space=$_p9k__ret - [[ $left_space == *%* ]] && left_space+=$style - - _p9k_get_icon $1 RIGHT_RIGHT_WHITESPACE $space - _p9k_escape $_p9k__ret - local right_space_=$_p9k__ret - [[ $right_space_ == *%* ]] && right_space_+=$style_ - - local w='<_p9k__w>' s='<_p9k__s>' - - local -i non_hermetic=0 - - # Segment separator logic: - # - # if [[ $_p9k__bg == NONE ]]; then - # 1 - # elif (( joined )); then - # 2 - # elif [[ $_p9k__bg == (${bg_color}|${bg_color:-0}) ]]; then - # 3 - # else - # 4 - # fi - - local t=$(($#_p9k_t - __p9k_ksh_arrays)) - _p9k_t+=$start_sep$style$left_space # 1 - _p9k_t+=$w$style # 2 - _p9k_t+=$w$style$subsep$left_space # 3 - _p9k_t+=$w%F{$bg_color}$sep$style$left_space # 4 - - local join="_p9k__i>=$_p9k_right_join[$_p9k__segment_index]" - _p9k_param $1 SELF_JOINED false - if [[ $_p9k__ret == false ]]; then - if (( _p9k__segment_index > $_p9k_right_join[$_p9k__segment_index] )); then - join+="&&_p9k__i<$_p9k__segment_index" - else - join= - fi - fi - - local p= - p+="\${_p9k__n::=}" - p+="\${\${\${_p9k__bg:-0}:#NONE}:-\${_p9k__n::=$((t+1))}}" # 1 - if [[ -n $join ]]; then - p+="\${_p9k__n:=\${\${\$(($join)):#0}:+$((t+2))}}" # 2 - fi - if (( __p9k_sh_glob )); then - p+="\${_p9k__n:=\${\${(M)\${:-x\$_p9k__bg}:#x${(b)bg_color}}:+$((t+3))}}" # 3 - p+="\${_p9k__n:=\${\${(M)\${:-x\$_p9k__bg}:#x${(b)bg_color:-0}}:+$((t+3))}}" # 3 - else - p+="\${_p9k__n:=\${\${(M)\${:-x\$_p9k__bg}:#x(${(b)bg_color}|${(b)bg_color:-0})}:+$((t+3))}}" # 3 - fi - p+="\${_p9k__n:=$((t+4))}" # 4 - - _p9k_param $1 VISUAL_IDENTIFIER_EXPANSION '${P9K_VISUAL_IDENTIFIER}' - [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 - local icon_exp_=${_p9k__ret:+\"$_p9k__ret\"} - - _p9k_param $1 CONTENT_EXPANSION '${P9K_CONTENT}' - [[ $_p9k__ret == (|*[^\\])'$('* ]] && non_hermetic=1 - local content_exp_=${_p9k__ret:+\"$_p9k__ret\"} - - if [[ ( $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ) || - ( $content_exp_ != '"${P9K_CONTENT}"' && $content_exp_ == *'$'* ) ]]; then - p+="\${P9K_VISUAL_IDENTIFIER::=$icon_}" - fi - - local -i has_icon=-1 # maybe - - if [[ $icon_exp_ != '"${P9K_VISUAL_IDENTIFIER}"' && $icon_exp_ == *'$'* ]]; then - p+="\${_p9k__v::=$icon_exp_$style_}" - else - [[ $icon_exp_ == '"${P9K_VISUAL_IDENTIFIER}"' ]] && _p9k__ret=$icon_ || _p9k__ret=$icon_exp_ - if [[ -n $_p9k__ret ]]; then - p+="\${_p9k__v::=$_p9k__ret" - [[ $_p9k__ret == *%* ]] && p+=$style_ - p+="}" - has_icon=1 # definitely yes - else - has_icon=0 # definitely no - fi - fi - - p+='${_p9k__c::='$content_exp_'}${_p9k__c::=${_p9k__c//'$'\r''}}' - p+='${_p9k__e::=${${_p9k__'${_p9k__line_index}r${${1#prompt_}%%[A-Z0-9_]#}'+00}:-' - if (( has_icon == -1 )); then - p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}${${(%):-$_p9k__v%1(l.1.0)}[-1]}}' - else - p+='${${(%):-$_p9k__c%1(l.1.0)}[-1]}'$has_icon'}' - fi - - p+='}}+}' - - p+='${${_p9k__e:#00}:+${_p9k_t[$_p9k__n]/'$w'/$_p9k__w}' - - _p9k_param $1 ICON_BEFORE_CONTENT '' - if [[ $_p9k__ret != true ]]; then - _p9k_param $1 PREFIX '' - _p9k__ret=${(g::)_p9k__ret} - _p9k_escape $_p9k__ret - p+=$_p9k__ret - [[ $_p9k__ret == *%* ]] && p+=$style_ - - p+='${_p9k__c}'$style_ - - if (( has_icon != 0 )); then - local -i need_style=0 - _p9k_get_icon $1 RIGHT_MIDDLE_WHITESPACE ' ' - if [[ -n $_p9k__ret ]]; then - _p9k_escape $_p9k__ret - [[ $_p9k__ret == *%* ]] && need_style=1 - p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' - fi - - _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color - _p9k_foreground $_p9k__ret - _p9k__ret=%b$bg$_p9k__ret - _p9k__ret=${_p9k__ret//\}/\\\}} - [[ $_p9k__ret != $style_ || $need_style == 1 ]] && p+=$_p9k__ret - p+='$_p9k__v' - fi - else - _p9k_param $1 PREFIX '' - _p9k__ret=${(g::)_p9k__ret} - _p9k_escape $_p9k__ret - p+=$_p9k__ret - [[ $_p9k__ret == *%* ]] && local -i need_style=1 || local -i need_style=0 - - if (( has_icon != 0 )); then - _p9k_color $1 VISUAL_IDENTIFIER_COLOR $fg_color - _p9k_foreground $_p9k__ret - _p9k__ret=%b$bg$_p9k__ret - _p9k__ret=${_p9k__ret//\}/\\\}} - if [[ $_p9k__ret != $style_ ]]; then - p+=$_p9k__ret'${_p9k__v}'$style_ - else - (( need_style )) && p+=$style_ - p+='${_p9k__v}' - fi - - _p9k_get_icon $1 RIGHT_MIDDLE_WHITESPACE ' ' - if [[ -n $_p9k__ret ]]; then - _p9k_escape $_p9k__ret - [[ _p9k__ret == *%* ]] && _p9k__ret+=$style_ - p+='${${(M)_p9k__e:#11}:+'$_p9k__ret'}' - fi - elif (( need_style )); then - p+=$style_ - fi - - p+='${_p9k__c}'$style_ - fi - - _p9k_param $1 SUFFIX '' - _p9k__ret=${(g::)_p9k__ret} - _p9k_escape $_p9k__ret - p+=$_p9k__ret - - p+='${${:-' - - if [[ -n $fg_color && $fg_color == $bg_color ]]; then - if [[ $fg_color == $_p9k_color1 ]]; then - _p9k_foreground $_p9k_color2 - else - _p9k_foreground $_p9k_color1 - fi - else - _p9k__ret=$fg - fi - _p9k__ret=${_p9k__ret//\}/\\\}} - p+="\${_p9k__w::=${right_space_:+$style_}$right_space_%b$bg_$_p9k__ret}" - - p+='${_p9k__sss::=' - p+=$style_$right_space_ - [[ $right_space_ == *%* ]] && p+=$style_ - if [[ -n $end_sep_ ]]; then - p+="%k%F{$bg_color\}$end_sep_$style_" - fi - p+='}' - - p+="\${_p9k__i::=$_p9k__segment_index}\${_p9k__bg::=$bg_color}" - - p+='}+}' - p+='}' - - _p9k_param $1 SHOW_ON_UPGLOB '' - _p9k_cache_set "$p" $non_hermetic $_p9k__ret - fi - - if [[ -n $_p9k__cache_val[3] ]]; then - _p9k__has_upglob=1 - _p9k_upglob $_p9k__cache_val[3] && return - fi - - _p9k__non_hermetic_expansion=$_p9k__cache_val[2] - - (( $5 )) && _p9k__ret=\"$7\" || _p9k_escape $7 - if [[ -z $6 ]]; then - _p9k__prompt+="\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]" - else - _p9k__prompt+="\${\${:-\"$6\"}:+\${\${:-\${P9K_CONTENT::=$_p9k__ret}$_p9k__cache_val[1]}" - fi -} - -function _p9k_prompt_segment() { "_p9k_${_p9k__prompt_side}_prompt_segment" "$@" } -function p9k_prompt_segment() { p10k segment "$@" } - -function _p9k_python_version() { - case $commands[python] in - "") - return 1 - ;; - ${PYENV_ROOT:-~/.pyenv}/shims/python) - local P9K_PYENV_PYTHON_VERSION _p9k__pyenv_version - local -i _POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=1 _POWERLEVEL9K_PYENV_SHOW_SYSTEM=1 - local _POWERLEVEL9K_PYENV_SOURCES=(shell local global) - if _p9k_pyenv_compute && [[ $P9K_PYENV_PYTHON_VERSION == ([[:digit:].]##)* ]]; then - _p9k__ret=$P9K_PYENV_PYTHON_VERSION - return 0 - fi - ;& # fall through - *) - _p9k_cached_cmd 1 '' python --version || return - [[ $_p9k__ret == (#b)Python\ ([[:digit:].]##)* ]] && _p9k__ret=$match[1] - ;; - esac -} - -################################################################ -# Prompt Segment Definitions -################################################################ - -################################################################ -# Anaconda Environment -prompt_anaconda() { - local msg - if _p9k_python_version; then - P9K_ANACONDA_PYTHON_VERSION=$_p9k__ret - if (( _POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION )); then - msg="${P9K_ANACONDA_PYTHON_VERSION//\%/%%} " - fi - else - unset P9K_ANACONDA_PYTHON_VERSION - fi - local p=${CONDA_PREFIX:-$CONDA_ENV_PATH} - msg+="$_POWERLEVEL9K_ANACONDA_LEFT_DELIMITER${${p:t}//\%/%%}$_POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER" - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg" -} - -_p9k_prompt_anaconda_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${CONDA_PREFIX:-$CONDA_ENV_PATH}' -} - -# Populates array `reply` with "$#profile:$profile:$region" where $profile and $region -# come from the AWS config (~/.aws/config). -function _p9k_parse_aws_config() { - local cfg=$1 - typeset -ga reply=() - [[ -f $cfg && -r $cfg ]] || return - - local -a lines - lines=(${(f)"$(<$cfg)"}) || return - - local line profile - local -a match mbegin mend - for line in $lines; do - if [[ $line == [[:space:]]#'[default]'[[:space:]]#(|'#'*) ]]; then - # example: [default] - profile=default - elif [[ $line == (#b)'[profile'[[:space:]]##([^[:space:]]|[^[:space:]]*[^[:space:]])[[:space:]]#']'[[:space:]]#(|'#'*) ]]; then - # example: [profile prod] - profile=${(Q)match[1]} - elif [[ $line == (#b)[[:space:]]#region[[:space:]]#=[[:space:]]#([^[:space:]]|[^[:space:]]*[^[:space:]])[[:space:]]# ]]; then - # example: region = eu-west-1 - if [[ -n $profile ]]; then - reply+=$#profile:$profile:$match[1] - profile= - fi - fi - done -} - -################################################################ -# AWS Profile -prompt_aws() { - typeset -g P9K_AWS_PROFILE="${AWS_VAULT:-${AWSUME_PROFILE:-${AWS_PROFILE:-$AWS_DEFAULT_PROFILE}}}" - local pat class state - for pat class in "${_POWERLEVEL9K_AWS_CLASSES[@]}"; do - if [[ $P9K_AWS_PROFILE == ${~pat} ]]; then - [[ -n $class ]] && state=_${${(U)class}//İ/I} - break - fi - done - - if [[ -n ${AWS_REGION:-$AWS_DEFAULT_REGION} ]]; then - typeset -g P9K_AWS_REGION=${AWS_REGION:-$AWS_DEFAULT_REGION} - else - local cfg=${AWS_CONFIG_FILE:-~/.aws/config} - if ! _p9k_cache_stat_get $0 $cfg; then - local -a reply - _p9k_parse_aws_config $cfg - _p9k_cache_stat_set $reply - fi - local prefix=$#P9K_AWS_PROFILE:$P9K_AWS_PROFILE: - local kv=$_p9k__cache_val[(r)${(b)prefix}*] - typeset -g P9K_AWS_REGION=${kv#$prefix} - fi - - _p9k_prompt_segment "$0$state" red white 'AWS_ICON' 0 '' "${P9K_AWS_PROFILE//\%/%%}" -} - -_p9k_prompt_aws_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${AWS_VAULT:-${AWSUME_PROFILE:-${AWS_PROFILE:-$AWS_DEFAULT_PROFILE}}}' -} - -################################################################ -# Current Elastic Beanstalk environment -prompt_aws_eb_env() { - _p9k_upglob .elasticbeanstalk -/ && return - local dir=$_p9k__parent_dirs[$?] - - if ! _p9k_cache_stat_get $0 $dir/.elasticbeanstalk/config.yml; then - local env - env="$(command eb list 2>/dev/null)" || env= - env="${${(@M)${(@f)env}:#\* *}#\* }" - _p9k_cache_stat_set "$env" - fi - [[ -n $_p9k__cache_val[1] ]] || return - _p9k_prompt_segment "$0" black green 'AWS_EB_ICON' 0 '' "${_p9k__cache_val[1]//\%/%%}" -} - -_p9k_prompt_aws_eb_env_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[eb]' -} - -################################################################ -# Segment to indicate background jobs with an icon. -prompt_background_jobs() { - local -i len=$#_p9k__prompt _p9k__has_upglob - local msg - if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE )); then - if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS )); then - msg='${(%):-%j}' - else - msg='${${(%):-%j}:#1}' - fi - fi - _p9k_prompt_segment $0 "$_p9k_color1" cyan BACKGROUND_JOBS_ICON 1 '${${(%):-%j}:#0}' "$msg" - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -################################################################ -# Segment that indicates usage level of current partition. -prompt_disk_usage() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0_CRITICAL red white DISK_ICON 1 '$_p9k__disk_usage_critical' '$_p9k__disk_usage_pct%%' - _p9k_prompt_segment $0_WARNING yellow $_p9k_color1 DISK_ICON 1 '$_p9k__disk_usage_warning' '$_p9k__disk_usage_pct%%' - if (( ! _POWERLEVEL9K_DISK_USAGE_ONLY_WARNING )); then - _p9k_prompt_segment $0_NORMAL $_p9k_color1 yellow DISK_ICON 1 '$_p9k__disk_usage_normal' '$_p9k__disk_usage_pct%%' - fi - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_disk_usage_init() { - typeset -g _p9k__disk_usage_pct= - typeset -g _p9k__disk_usage_normal= - typeset -g _p9k__disk_usage_warning= - typeset -g _p9k__disk_usage_critical= - _p9k__async_segments_compute+='_p9k_worker_invoke disk_usage "_p9k_prompt_disk_usage_compute ${(q)_p9k__cwd_a}"' -} - -_p9k_prompt_disk_usage_compute() { - (( $+commands[df] )) || return - _p9k_worker_async "_p9k_prompt_disk_usage_async ${(q)1}" _p9k_prompt_disk_usage_sync -} - -_p9k_prompt_disk_usage_async() { - local pct=${${=${(f)"$(df -P $1 2>/dev/null)"}[2]}[5]%%%} - [[ $pct == <0-100> && $pct != $_p9k__disk_usage_pct ]] || return - _p9k__disk_usage_pct=$pct - _p9k__disk_usage_normal= - _p9k__disk_usage_warning= - _p9k__disk_usage_critical= - if (( _p9k__disk_usage_pct >= _POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL )); then - _p9k__disk_usage_critical=1 - elif (( _p9k__disk_usage_pct >= _POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL )); then - _p9k__disk_usage_warning=1 - elif (( ! _POWERLEVEL9K_DISK_USAGE_ONLY_WARNING )); then - _p9k__disk_usage_normal=1 - fi - _p9k_print_params \ - _p9k__disk_usage_pct \ - _p9k__disk_usage_normal \ - _p9k__disk_usage_warning \ - _p9k__disk_usage_critical - echo -E - 'reset=1' -} - -_p9k_prompt_disk_usage_sync() { - eval $REPLY - _p9k_worker_reply $REPLY -} - -function _p9k_read_file() { - _p9k__ret='' - [[ -n $1 ]] && IFS='' read -r _p9k__ret <$1 - [[ -n $_p9k__ret ]] -} - -function _p9k_fvm_old() { - _p9k_upglob fvm @ && return 1 - local fvm=$_p9k__parent_dirs[$?]/fvm - if [[ ${fvm:A} == (#b)*/versions/([^/]##)/bin/flutter ]]; then - _p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%} - return 0 - fi - return 1 -} - -function _p9k_fvm_new() { - _p9k_upglob .fvm @ && return 1 - local sdk=$_p9k__parent_dirs[$?]/.fvm/flutter_sdk - if [[ ${sdk:A} == (#b)*/versions/([^/]##) ]]; then - _p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%} - return 0 - fi - return 1 -} - -prompt_fvm() { - _p9k_fvm_new || _p9k_fvm_old -} - -_p9k_prompt_fvm_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[fvm]' -} - -################################################################ -# Segment that displays the battery status in levels and colors -prompt_battery() { - [[ $_p9k_os == (Linux|Android) ]] && _p9k_prompt_battery_set_args - (( $#_p9k__battery_args )) && _p9k_prompt_segment "${_p9k__battery_args[@]}" -} - -_p9k_prompt_battery_init() { - typeset -ga _p9k__battery_args=() - if [[ $_p9k_os == OSX && $+commands[pmset] == 1 ]]; then - _p9k__async_segments_compute+='_p9k_worker_invoke battery _p9k_prompt_battery_compute' - return - fi - if [[ $_p9k_os != (Linux|Android) || - -z /sys/class/power_supply/(CMB*|BAT*|*battery)/(energy_full|charge_full|charge_counter)(#qN) ]]; then - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - fi -} - -_p9k_prompt_battery_compute() { - _p9k_worker_async _p9k_prompt_battery_async _p9k_prompt_battery_sync -} - -_p9k_prompt_battery_async() { - local prev="${(pj:\0:)_p9k__battery_args}" - _p9k_prompt_battery_set_args - [[ "${(pj:\0:)_p9k__battery_args}" == $prev ]] && return 1 - _p9k_print_params _p9k__battery_args - echo -E - 'reset=2' -} - -_p9k_prompt_battery_sync() { - eval $REPLY - _p9k_worker_reply $REPLY -} - -_p9k_prompt_battery_set_args() { - _p9k__battery_args=() - - local state remain - local -i bat_percent - - case $_p9k_os in - OSX) - (( $+commands[pmset] )) || return - local raw_data=${${(Af)"$(pmset -g batt 2>/dev/null)"}[2]} - [[ $raw_data == *InternalBattery* ]] || return - remain=${${(s: :)${${(s:; :)raw_data}[3]}}[1]} - [[ $remain == *no* ]] && remain="..." - [[ $raw_data =~ '([0-9]+)%' ]] && bat_percent=$match[1] - - case "${${(s:; :)raw_data}[2]}" in - 'charging'|'finishing charge'|'AC attached') - if (( bat_percent == 100 )); then - state=CHARGED - remain='' - else - state=CHARGING - fi - ;; - 'discharging') - (( bat_percent < _POWERLEVEL9K_BATTERY_LOW_THRESHOLD )) && state=LOW || state=DISCONNECTED - ;; - *) - state=CHARGED - remain='' - ;; - esac - ;; - - Linux|Android) - # See https://sourceforge.net/projects/acpiclient. - local -a bats=( /sys/class/power_supply/(CMB*|BAT*|*battery)/(FN) ) - (( $#bats )) || return - - local -i energy_now energy_full power_now - local -i is_full=1 is_calculating is_charching - local dir - for dir in $bats; do - local -i pow=0 full=0 - if _p9k_read_file $dir/(energy_full|charge_full|charge_counter)(N); then - (( energy_full += ${full::=_p9k__ret} )) - fi - if _p9k_read_file $dir/(power|current)_now(N) && (( $#_p9k__ret < 9 )); then - (( power_now += ${pow::=$_p9k__ret} )) - fi - if _p9k_read_file $dir/capacity(N); then - (( energy_now += _p9k__ret * full / 100. + 0.5 )) - elif _p9k_read_file $dir/(energy|charge)_now(N); then - (( energy_now += _p9k__ret )) - fi - _p9k_read_file $dir/status(N) && local bat_status=$_p9k__ret || continue - [[ $bat_status != Full ]] && is_full=0 - [[ $bat_status == Charging ]] && is_charching=1 - [[ $bat_status == (Charging|Discharging) && $pow == 0 ]] && is_calculating=1 - done - - (( energy_full )) || return - - bat_percent=$(( 100. * energy_now / energy_full + 0.5 )) - (( bat_percent > 100 )) && bat_percent=100 - - if (( is_full || (bat_percent == 100 && is_charching) )); then - state=CHARGED - else - if (( is_charching )); then - state=CHARGING - elif (( bat_percent < _POWERLEVEL9K_BATTERY_LOW_THRESHOLD )); then - state=LOW - else - state=DISCONNECTED - fi - - if (( power_now > 0 )); then - (( is_charching )) && local -i e=$((energy_full - energy_now)) || local -i e=energy_now - local -i minutes=$(( 60 * e / power_now )) - (( minutes > 0 )) && remain=$((minutes/60)):${(l#2##0#)$((minutes%60))} - elif (( is_calculating )); then - remain="..." - fi - fi - ;; - - *) - return 0 - ;; - esac - - (( bat_percent >= _POWERLEVEL9K_BATTERY_${state}_HIDE_ABOVE_THRESHOLD )) && return - - local msg="$bat_percent%%" - [[ $_POWERLEVEL9K_BATTERY_VERBOSE == 1 && -n $remain ]] && msg+=" ($remain)" - - local icon=BATTERY_ICON - local var=_POWERLEVEL9K_BATTERY_${state}_STAGES - local -i idx="${#${(@P)var}}" - if (( idx )); then - (( bat_percent < 100 )) && idx=$((bat_percent * idx / 100 + 1)) - icon=$'\1'"${${(@P)var}[idx]}" - fi - - local bg=$_p9k_color1 - local var=_POWERLEVEL9K_BATTERY_${state}_LEVEL_BACKGROUND - local -i idx="${#${(@P)var}}" - if (( idx )); then - (( bat_percent < 100 )) && idx=$((bat_percent * idx / 100 + 1)) - bg="${${(@P)var}[idx]}" - fi - - local fg=$_p9k_battery_states[$state] - local var=_POWERLEVEL9K_BATTERY_${state}_LEVEL_FOREGROUND - local -i idx="${#${(@P)var}}" - if (( idx )); then - (( bat_percent < 100 )) && idx=$((bat_percent * idx / 100 + 1)) - fg="${${(@P)var}[idx]}" - fi - - _p9k__battery_args=(prompt_battery_$state "$bg" "$fg" $icon 0 '' $msg) -} - -################################################################ -# Public IP segment -prompt_public_ip() { - local -i len=$#_p9k__prompt _p9k__has_upglob - local ip='${_p9k__public_ip:-$_POWERLEVEL9K_PUBLIC_IP_NONE}' - if [[ -n $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]]; then - _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" PUBLIC_IP_ICON 1 '${_p9k__public_ip_not_vpn:+'$ip'}' $ip - _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" VPN_ICON 1 '${_p9k__public_ip_vpn:+'$ip'}' $ip - else - _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" PUBLIC_IP_ICON 1 $ip $ip - fi - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_public_ip_init() { - typeset -g _p9k__public_ip= - typeset -gF _p9k__public_ip_next_time=0 - _p9k__async_segments_compute+='_p9k_worker_invoke public_ip _p9k_prompt_public_ip_compute' -} - -_p9k_prompt_public_ip_compute() { - (( EPOCHREALTIME >= _p9k__public_ip_next_time )) || return - _p9k_worker_async _p9k_prompt_public_ip_async _p9k_prompt_public_ip_sync -} - -_p9k_prompt_public_ip_async() { - local ip method - local -F start=EPOCHREALTIME - local -F next='start + 5' - for method in $_POWERLEVEL9K_PUBLIC_IP_METHODS $_POWERLEVEL9K_PUBLIC_IP_METHODS; do - case $method in - dig) - if (( $+commands[dig] )); then - ip="$(dig +tries=1 +short -4 A myip.opendns.com @resolver1.opendns.com 2>/dev/null)" - [[ $ip == ';'* ]] && ip= - if [[ -z $ip ]]; then - ip="$(dig +tries=1 +short -6 AAAA myip.opendns.com @resolver1.opendns.com 2>/dev/null)" - [[ $ip == ';'* ]] && ip= - fi - fi - ;; - curl) - if (( $+commands[curl] )); then - ip="$(curl --max-time 5 -w '\n' "$_POWERLEVEL9K_PUBLIC_IP_HOST" 2>/dev/null)" - fi - ;; - wget) - if (( $+commands[wget] )); then - ip="$(wget -T 5 -qO- "$_POWERLEVEL9K_PUBLIC_IP_HOST" 2>/dev/null)" - fi - ;; - esac - [[ $ip =~ '^[0-9a-f.:]+$' ]] || ip='' - if [[ -n $ip ]]; then - next=$((start + _POWERLEVEL9K_PUBLIC_IP_TIMEOUT)) - break - fi - done - _p9k__public_ip_next_time=$next - _p9k_print_params _p9k__public_ip_next_time - [[ $_p9k__public_ip == $ip ]] && return - _p9k__public_ip=$ip - _p9k_print_params _p9k__public_ip - echo -E - 'reset=1' -} - -_p9k_prompt_public_ip_sync() { - eval $REPLY - _p9k_worker_reply $REPLY -} - -################################################################ -# Context: user@hostname (who am I and where am I) -prompt_context() { - local -i len=$#_p9k__prompt _p9k__has_upglob - - local content - if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 0 && -n $DEFAULT_USER && $P9K_SSH == 0 ]]; then - local user="${(%):-%n}" - if [[ $user == $DEFAULT_USER ]]; then - content="${user//\%/%%}" - fi - fi - - local state - if (( P9K_SSH )); then - if [[ -n "$SUDO_COMMAND" ]]; then - state="REMOTE_SUDO" - else - state="REMOTE" - fi - elif [[ -n "$SUDO_COMMAND" ]]; then - state="SUDO" - else - state="DEFAULT" - fi - - local cond - for state cond in $state '${${(%):-%#}:#\#}' ROOT '${${(%):-%#}:#\%}'; do - local text=$content - if [[ -z $text ]]; then - local var=_POWERLEVEL9K_CONTEXT_${state}_TEMPLATE - if (( $+parameters[$var] )); then - text=${(P)var} - text=${(g::)text} - else - text=$_POWERLEVEL9K_CONTEXT_TEMPLATE - fi - fi - _p9k_prompt_segment "$0_$state" "$_p9k_color1" yellow '' 0 "$cond" "$text" - done - - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -instant_prompt_context() { - if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 0 && -n $DEFAULT_USER && $P9K_SSH == 0 ]]; then - if [[ ${(%):-%n} == $DEFAULT_USER ]]; then - if (( ! _POWERLEVEL9K_ALWAYS_SHOW_USER )); then - return - fi - fi - fi - prompt_context -} - -_p9k_prompt_context_init() { - if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 0 && -n $DEFAULT_USER && $P9K_SSH == 0 ]]; then - if [[ ${(%):-%n} == $DEFAULT_USER ]]; then - if (( ! _POWERLEVEL9K_ALWAYS_SHOW_USER )); then - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - fi - fi - fi -} - -################################################################ -# User: user (who am I) -prompt_user() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment "${0}_ROOT" "${_p9k_color1}" yellow ROOT_ICON 0 '${${(%):-%#}:#\%}' "$_POWERLEVEL9K_USER_TEMPLATE" - if [[ -n "$SUDO_COMMAND" ]]; then - _p9k_prompt_segment "${0}_SUDO" "${_p9k_color1}" yellow SUDO_ICON 0 '${${(%):-%#}:#\#}' "$_POWERLEVEL9K_USER_TEMPLATE" - else - _p9k_prompt_segment "${0}_DEFAULT" "${_p9k_color1}" yellow USER_ICON 0 '${${(%):-%#}:#\#}' "%n" - fi - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -instant_prompt_user() { - if [[ $_POWERLEVEL9K_ALWAYS_SHOW_USER == 0 && "${(%):-%n}" == $DEFAULT_USER ]]; then - return - fi - prompt_user -} - -_p9k_prompt_user_init() { - if [[ $_POWERLEVEL9K_ALWAYS_SHOW_USER == 0 && "${(%):-%n}" == $DEFAULT_USER ]]; then - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - fi -} - -################################################################ -# Host: machine (where am I) -prompt_host() { - local -i len=$#_p9k__prompt _p9k__has_upglob - if (( P9K_SSH )); then - _p9k_prompt_segment "$0_REMOTE" "${_p9k_color1}" yellow SSH_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE" - else - _p9k_prompt_segment "$0_LOCAL" "${_p9k_color1}" yellow HOST_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE" - fi - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -instant_prompt_host() { prompt_host; } - -################################################################ -# Toolbox: https://github.com/containers/toolbox -function prompt_toolbox() { - _p9k_prompt_segment $0 $_p9k_color1 yellow TOOLBOX_ICON 0 '' $P9K_TOOLBOX_NAME -} - -_p9k_prompt_toolbox_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$P9K_TOOLBOX_NAME' -} - -function instant_prompt_toolbox() { - _p9k_prompt_segment prompt_toolbox $_p9k_color1 yellow TOOLBOX_ICON 1 '$P9K_TOOLBOX_NAME' '$P9K_TOOLBOX_NAME' -} - -################################################################ -# The 'custom` prompt provides a way for users to invoke commands and display -# the output in a segment. -_p9k_custom_prompt() { - local segment_name=${1:u} - local command=_POWERLEVEL9K_CUSTOM_${segment_name} - command=${(P)command} - local parts=("${(@z)command}") - local cmd="${(Q)parts[1]}" - (( $+functions[$cmd] || $+commands[$cmd] )) || return - local content="$(eval $command)" - [[ -n $content ]] || return - _p9k_prompt_segment "prompt_custom_$1" $_p9k_color2 $_p9k_color1 "CUSTOM_${segment_name}_ICON" 0 '' "$content" -} - -################################################################ -# Display the duration the command needed to run. -prompt_command_execution_time() { - (( $+P9K_COMMAND_DURATION_SECONDS )) || return - (( P9K_COMMAND_DURATION_SECONDS >= _POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )) || return - - if (( P9K_COMMAND_DURATION_SECONDS < 60 )); then - if (( !_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION )); then - local -i sec=$((P9K_COMMAND_DURATION_SECONDS + 0.5)) - else - local -F $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION sec=P9K_COMMAND_DURATION_SECONDS - fi - local text=${sec}s - else - local -i d=$((P9K_COMMAND_DURATION_SECONDS + 0.5)) - if [[ $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT == "H:M:S" ]]; then - local text=${(l.2..0.)$((d % 60))} - if (( d >= 60 )); then - text=${(l.2..0.)$((d / 60 % 60))}:$text - if (( d >= 36000 )); then - text=$((d / 3600)):$text - elif (( d >= 3600 )); then - text=0$((d / 3600)):$text - fi - fi - else - local text="$((d % 60))s" - if (( d >= 60 )); then - text="$((d / 60 % 60))m $text" - if (( d >= 3600 )); then - text="$((d / 3600 % 24))h $text" - if (( d >= 86400 )); then - text="$((d / 86400))d $text" - fi - fi - fi - fi - fi - - _p9k_prompt_segment "$0" "red" "yellow1" 'EXECUTION_TIME_ICON' 0 '' $text -} - -function _p9k_shorten_delim_len() { - local def=$1 - _p9k__ret=${_POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1} - (( _p9k__ret >= 0 )) || _p9k_prompt_length $1 -} - -# Percents are duplicated because this function is currently used only -# where the result is going to be percent-expanded. -function _p9k_url_escape() { - emulate -L zsh -o no_multi_byte -o extended_glob - local MATCH MBEGIN MEND - _p9k__ret=${1//(#m)[^a-zA-Z0-9"\/:_.-!'()~"]/%%${(l:2::0:)$(([##16]#MATCH))}} -} - -################################################################ -# Dir: current working directory -prompt_dir() { - if (( _POWERLEVEL9K_DIR_PATH_ABSOLUTE )); then - local p=${(V)_p9k__cwd} - local -a parts=("${(s:/:)p}") - elif [[ -o auto_name_dirs ]]; then - local p=${(V)${_p9k__cwd/#(#b)$HOME(|\/*)/'~'$match[1]}} - local -a parts=("${(s:/:)p}") - else - local p=${(%):-%~} - if [[ $p == '~['* ]]; then - # If "${(%):-%~}" expands to "~[a]/]/b", is the first component "~[a]" or "~[a]/]"? - # One would expect "${(%):-%-1~}" to give the right answer but alas it always simply - # gives the segment before the first slash, which would be "~[a]" in this case. Worse, - # for "~[a/b]" it'll give the nonsensical "~[a". To solve this problem we have to - # repeat what "${(%):-%~}" does and hope that it produces the same result. - local func='' - local -a parts=() - for func in zsh_directory_name $zsh_directory_name_functions; do - local reply=() - if (( $+functions[$func] )) && $func d $_p9k__cwd && [[ $p == '~['${(V)reply[1]}']'* ]]; then - parts+='~['${(V)reply[1]}']' - break - fi - done - if (( $#parts )); then - parts+=(${(s:/:)${p#$parts[1]}}) - else - p=${(V)_p9k__cwd} - parts=("${(s:/:)p}") - fi - else - local -a parts=("${(s:/:)p}") - fi - fi - - local -i fake_first=0 expand=0 shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:--1} - - if (( $+_POWERLEVEL9K_SHORTEN_DELIMITER )); then - local delim=$_POWERLEVEL9K_SHORTEN_DELIMITER - else - if [[ $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then - local delim=$'\u2026' - else - local delim='..' - fi - fi - - case $_POWERLEVEL9K_SHORTEN_STRATEGY in - truncate_absolute|truncate_absolute_chars) - if (( shortenlen > 0 && $#p > shortenlen )); then - _p9k_shorten_delim_len $delim - if (( $#p > shortenlen + $_p9k__ret )); then - local -i n=shortenlen - local -i i=$#parts - while true; do - local dir=$parts[i] - local -i len=$(( $#dir + (i > 1) )) - if (( len <= n )); then - (( n -= len )) - (( --i )) - else - parts[i]=$'\1'$dir[-n,-1] - parts[1,i-1]=() - break - fi - done - fi - fi - ;; - truncate_with_package_name|truncate_middle|truncate_from_right) - () { - [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name && - $+commands[jq] == 1 && $#_POWERLEVEL9K_DIR_PACKAGE_FILES > 0 ]] || return - local pats="(${(j:|:)_POWERLEVEL9K_DIR_PACKAGE_FILES})" - local -i i=$#parts - local dir=$_p9k__cwd - for (( ; i > 0; --i )); do - local markers=($dir/${~pats}(N)) - if (( $#markers )); then - local pat= pkg_file= - for pat in $_POWERLEVEL9K_DIR_PACKAGE_FILES; do - for pkg_file in $markers; do - [[ $pkg_file == $dir/${~pat} ]] || continue - if ! _p9k_cache_stat_get $0_pkg $pkg_file; then - local pkg_name='' - pkg_name="$(jq -j '.name | select(. != null)' <$pkg_file 2>/dev/null)" || pkg_name='' - _p9k_cache_stat_set "$pkg_name" - fi - [[ -n $_p9k__cache_val[1] ]] || continue - parts[1,i]=($_p9k__cache_val[1]) - fake_first=1 - return 0 - done - done - fi - dir=${dir:h} - done - } - if (( shortenlen > 0 )); then - _p9k_shorten_delim_len $delim - local -i d=_p9k__ret pref=shortenlen suf=0 i=2 - [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_middle ]] && suf=pref - for (( ; i < $#parts; ++i )); do - local dir=$parts[i] - if (( $#dir > pref + suf + d )); then - dir[pref+1,-suf-1]=$'\1' - parts[i]=$dir - fi - done - fi - ;; - truncate_to_last) - shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1} - (( shortenlen > 0 )) || shortenlen=1 - local -i i='shortenlen+1' - if [[ $#parts -gt i || $p[1] != / && $#parts -gt shortenlen ]]; then - fake_first=1 - parts[1,-i]=() - fi - ;; - truncate_to_first_and_last) - if (( shortenlen > 0 )); then - local -i i=$(( shortenlen + 1 )) - [[ $p == /* ]] && (( ++i )) - for (( ; i <= $#parts - shortenlen; ++i )); do - parts[i]=$'\1' - done - fi - ;; - truncate_to_unique) - expand=1 - delim=${_POWERLEVEL9K_SHORTEN_DELIMITER-'*'} - shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1} - (( shortenlen >= 0 )) || shortenlen=1 - local rp=${(g:oce:)p} - local rparts=("${(@s:/:)rp}") - - local -i i=2 e=$(($#parts - shortenlen)) - if [[ -n $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER ]]; then - (( e += shortenlen )) - local orig=("$parts[2]" "${(@)parts[$((shortenlen > $#parts ? -$#parts : -shortenlen)),-1]}") - elif [[ $p[1] == / ]]; then - (( ++i )) - fi - if (( i <= e )); then - local mtimes=(${(Oa)_p9k__parent_mtimes:$(($#parts-e)):$((e-i+1))}) - local key="${(pj.:.)mtimes}" - else - local key= - fi - if ! _p9k_cache_ephemeral_get $0 $e $i $_p9k__cwd || [[ $key != $_p9k__cache_val[1] ]]; then - local rtail=${(j./.)rparts[i,-1]} - local parent=$_p9k__cwd[1,-2-$#rtail] - _p9k_prompt_length $delim - local -i real_delim_len=_p9k__ret - [[ -n $parts[i-1] ]] && parts[i-1]="\${(Q)\${:-${(qqq)${(q)parts[i-1]}}}}"$'\2' - local -i d=${_POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1} - (( d >= 0 )) || d=real_delim_len - local -i m=1 - for (( ; i <= e; ++i, ++m )); do - local sub=$parts[i] - local rsub=$rparts[i] - local dir=$parent/$rsub mtime=$mtimes[m] - local pair=$_p9k__dir_stat_cache[$dir] - if [[ $pair == ${mtime:-x}:* ]]; then - parts[i]=${pair#*:} - else - [[ $sub != *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] - local -i q=$? - if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER && - -n $dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]]; then - (( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)sub}}}}" - parts[i]+=$'\2' - else - local -i j=$rsub[(i)[^.]] - for (( ; j + d < $#rsub; ++j )); do - local -a matching=($parent/$rsub[1,j]*/(N)) - (( $#matching == 1 )) && break - done - local -i saved=$((${(m)#${(V)${rsub:$j}}} - d)) - if (( saved > 0 )); then - if (( q )); then - parts[i]='${${${_p9k__d:#-*}:+${(Q)${:-'${(qqq)${(q)sub}}'}}}:-${(Q)${:-' - parts[i]+=$'\3'${(qqq)${(q)${(V)${rsub[1,j]}}}}$'}}\1\3''${$((_p9k__d+='$saved'))+}}' - else - parts[i]='${${${_p9k__d:#-*}:+'$sub$'}:-\3'${(V)${rsub[1,j]}}$'\1\3''${$((_p9k__d+='$saved'))+}}' - fi - else - (( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)sub}}}}" - fi - fi - [[ -n $mtime ]] && _p9k__dir_stat_cache[$dir]="$mtime:$parts[i]" - fi - parent+=/$rsub - done - if [[ -n $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER ]]; then - local _2=$'\2' - if [[ $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER == last* ]]; then - (( e = ${parts[(I)*$_2]} + ${_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER#*:} )) - else - (( e = ${parts[(ib:2:)*$_2]} + ${_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER#*:} )) - fi - if (( e > 1 && e <= $#parts )); then - parts[1,e-1]=() - fake_first=1 - elif [[ $p == /?* ]]; then - parts[2]="\${(Q)\${:-${(qqq)${(q)orig[1]}}}}"$'\2' - fi - for ((i = $#parts < shortenlen ? $#parts : shortenlen; i > 0; --i)); do - [[ $#parts[-i] == *$'\2' ]] && continue - if [[ $orig[-i] == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]]; then - parts[-i]='${(Q)${:-'${(qqq)${(q)orig[-i]}}'}}'$'\2' - else - parts[-i]=${orig[-i]}$'\2' - fi - done - else - for ((; i <= $#parts; ++i)); do - [[ $parts[i] == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] && parts[i]='${(Q)${:-'${(qqq)${(q)parts[i]}}'}}' - parts[i]+=$'\2' - done - fi - _p9k_cache_ephemeral_set "$key" "${parts[@]}" - fi - parts=("${(@)_p9k__cache_val[2,-1]}") - ;; - truncate_with_folder_marker) - if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER ]]; then - local dir=$_p9k__cwd - local -a m=() - local -i i=$(($#parts - 1)) - for (( ; i > 1; --i )); do - dir=${dir:h} - [[ -n $dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]] && m+=$i - done - m+=1 - for (( i=1; i < $#m; ++i )); do - (( m[i] - m[i+1] > 2 )) && parts[m[i+1]+1,m[i]-1]=($'\1') - done - fi - ;; - *) - if (( shortenlen > 0 )); then - local -i len=$#parts - [[ -z $parts[1] ]] && (( --len )) - if (( len > shortenlen )); then - parts[1,-shortenlen-1]=($'\1') - fi - fi - ;; - esac - - # w=0: writable - # w=1: not writable - # w=2: does not exist - (( !_POWERLEVEL9K_DIR_SHOW_WRITABLE )) || [[ -w $_p9k__cwd ]] - local -i w=$? - (( w && _POWERLEVEL9K_DIR_SHOW_WRITABLE > 2 )) && [[ ! -e $_p9k__cwd ]] && w=2 - if ! _p9k_cache_ephemeral_get $0 $_p9k__cwd $p $w $fake_first "${parts[@]}"; then - local state=$0 - local icon='' - local a='' b='' c='' - for a b c in "${_POWERLEVEL9K_DIR_CLASSES[@]}"; do - if [[ $_p9k__cwd == ${~a} ]]; then - [[ -n $b ]] && state+=_${${(U)b}//İ/I} - icon=$'\1'$c - break - fi - done - if (( w )); then - if (( _POWERLEVEL9K_DIR_SHOW_WRITABLE == 1 )); then - state=${0}_NOT_WRITABLE - elif (( w == 2 )); then - state+=_NON_EXISTENT - else - state+=_NOT_WRITABLE - fi - icon=LOCK_ICON - fi - - local state_u=${${(U)state}//İ/I} - - local style=%b - _p9k_color $state BACKGROUND blue - _p9k_background $_p9k__ret - style+=$_p9k__ret - _p9k_color $state FOREGROUND "$_p9k_color1" - _p9k_foreground $_p9k__ret - style+=$_p9k__ret - if (( expand )); then - _p9k_escape_style $style - style=$_p9k__ret - fi - - parts=("${(@)parts//\%/%%}") - if [[ $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION != '~' && $fake_first == 0 && $p == ('~'|'~/'*) ]]; then - (( expand )) && _p9k_escape $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION || _p9k__ret=$_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION - parts[1]=$_p9k__ret - [[ $_p9k__ret == *%* ]] && parts[1]+=$style - elif [[ $_POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == 1 && $fake_first == 0 && $#parts > 1 && -z $parts[1] && -n $parts[2] ]]; then - parts[1]=() - fi - - local last_style= - _p9k_param $state PATH_HIGHLIGHT_BOLD '' - [[ $_p9k__ret == true ]] && last_style+=%B - if (( $+parameters[_POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND] || - $+parameters[_POWERLEVEL9K_${state_u}_PATH_HIGHLIGHT_FOREGROUND] )); then - _p9k_color $state PATH_HIGHLIGHT_FOREGROUND '' - _p9k_foreground $_p9k__ret - last_style+=$_p9k__ret - fi - if [[ -n $last_style ]]; then - (( expand )) && _p9k_escape_style $last_style || _p9k__ret=$last_style - parts[-1]=$_p9k__ret${parts[-1]//$'\1'/$'\1'$_p9k__ret}$style - fi - - local anchor_style= - _p9k_param $state ANCHOR_BOLD '' - [[ $_p9k__ret == true ]] && anchor_style+=%B - if (( $+parameters[_POWERLEVEL9K_DIR_ANCHOR_FOREGROUND] || - $+parameters[_POWERLEVEL9K_${state_u}_ANCHOR_FOREGROUND] )); then - _p9k_color $state ANCHOR_FOREGROUND '' - _p9k_foreground $_p9k__ret - anchor_style+=$_p9k__ret - fi - if [[ -n $anchor_style ]]; then - (( expand )) && _p9k_escape_style $anchor_style || _p9k__ret=$anchor_style - if [[ -z $last_style ]]; then - parts=("${(@)parts/%(#b)(*)$'\2'/$_p9k__ret$match[1]$style}") - else - (( $#parts > 1 )) && parts[1,-2]=("${(@)parts[1,-2]/%(#b)(*)$'\2'/$_p9k__ret$match[1]$style}") - parts[-1]=${parts[-1]/$'\2'} - fi - else - parts=("${(@)parts/$'\2'}") - fi - - if (( $+parameters[_POWERLEVEL9K_DIR_SHORTENED_FOREGROUND] || - $+parameters[_POWERLEVEL9K_${state_u}_SHORTENED_FOREGROUND] )); then - _p9k_color $state SHORTENED_FOREGROUND '' - _p9k_foreground $_p9k__ret - (( expand )) && _p9k_escape_style $_p9k__ret - local shortened_fg=$_p9k__ret - (( expand )) && _p9k_escape $delim || _p9k__ret=$delim - [[ $_p9k__ret == *%* ]] && _p9k__ret+=$style$shortened_fg - parts=("${(@)parts/(#b)$'\3'(*)$'\1'(*)$'\3'/$shortened_fg$match[1]$_p9k__ret$match[2]$style}") - parts=("${(@)parts/(#b)(*)$'\1'(*)/$shortened_fg$match[1]$_p9k__ret$match[2]$style}") - else - (( expand )) && _p9k_escape $delim || _p9k__ret=$delim - [[ $_p9k__ret == *%* ]] && _p9k__ret+=$style - parts=("${(@)parts/$'\1'/$_p9k__ret}") - parts=("${(@)parts//$'\3'}") - fi - - if [[ $_p9k__cwd == / && $_POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == 1 ]]; then - local sep='/' - else - local sep='' - if (( $+parameters[_POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND] || - $+parameters[_POWERLEVEL9K_${state_u}_PATH_SEPARATOR_FOREGROUND] )); then - _p9k_color $state PATH_SEPARATOR_FOREGROUND '' - _p9k_foreground $_p9k__ret - (( expand )) && _p9k_escape_style $_p9k__ret - sep=$_p9k__ret - fi - _p9k_param $state PATH_SEPARATOR / - _p9k__ret=${(g::)_p9k__ret} - (( expand )) && _p9k_escape $_p9k__ret - sep+=$_p9k__ret - [[ $sep == *%* ]] && sep+=$style - fi - - local content="${(pj.$sep.)parts}" - if (( _POWERLEVEL9K_DIR_HYPERLINK && _p9k_term_has_href )) && [[ $_p9k__cwd == /* ]]; then - _p9k_url_escape $_p9k__cwd - local header=$'%{\e]8;;file://'$_p9k__ret$'\a%}' - local footer=$'%{\e]8;;\a%}' - if (( expand )); then - _p9k_escape $header - header=$_p9k__ret - _p9k_escape $footer - footer=$_p9k__ret - fi - content=$header$content$footer - fi - - (( expand )) && _p9k_prompt_length "${(e):-"\${\${_p9k__d::=0}+}$content"}" || _p9k__ret= - _p9k_cache_ephemeral_set "$state" "$icon" "$expand" "$content" $_p9k__ret - fi - - if (( _p9k__cache_val[3] )); then - if (( $+_p9k__dir )); then - _p9k__cache_val[4]='${${_p9k__d::=-1024}+}'$_p9k__cache_val[4] - else - _p9k__dir=$_p9k__cache_val[4] - _p9k__dir_len=$_p9k__cache_val[5] - _p9k__cache_val[4]='%{d%}'$_p9k__cache_val[4]'%{d%}' - fi - fi - _p9k_prompt_segment "$_p9k__cache_val[1]" "blue" "$_p9k_color1" "$_p9k__cache_val[2]" "$_p9k__cache_val[3]" "" "$_p9k__cache_val[4]" -} - -instant_prompt_dir() { prompt_dir; } - -################################################################ -# Docker machine -prompt_docker_machine() { - _p9k_prompt_segment "$0" "magenta" "$_p9k_color1" 'SERVER_ICON' 0 '' "${DOCKER_MACHINE_NAME//\%/%%}" -} - -_p9k_prompt_docker_machine_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$DOCKER_MACHINE_NAME' -} - -################################################################ -# GO prompt -prompt_go_version() { - _p9k_cached_cmd 0 '' go version || return - [[ $_p9k__ret == (#b)*go([[:digit:].]##)* ]] || return - local v=$match[1] - if (( _POWERLEVEL9K_GO_VERSION_PROJECT_ONLY )); then - local p=$GOPATH - if [[ -z $p ]]; then - if [[ -d $HOME/go ]]; then - p=$HOME/go - else - p="$(go env GOPATH 2>/dev/null)" && [[ -n $p ]] || return - fi - fi - if [[ $_p9k__cwd/ != $p/* && $_p9k__cwd_a/ != $p/* ]]; then - _p9k_upglob go.mod -. && return - fi - fi - _p9k_prompt_segment "$0" "green" "grey93" "GO_ICON" 0 '' "${v//\%/%%}" -} - -_p9k_prompt_go_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[go]' -} - -################################################################ -# Command number (in local history) -prompt_history() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment "$0" "grey50" "$_p9k_color1" '' 0 '' '%h' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -prompt_package() { - unset P9K_PACKAGE_NAME P9K_PACKAGE_VERSION - _p9k_upglob package.json -. && return - - local file=$_p9k__parent_dirs[$?]/package.json - if ! _p9k_cache_stat_get $0 $file; then - () { - local data field - local -A found - # Redneck json parsing. Yields correct results for any well-formed json document. - # Produces random garbage for invalid json. - { data="$(<$file)" || return } 2>/dev/null - data=${${data//$'\r'}##[[:space:]]#} - [[ $data == '{'* ]] || return - data[1]= - local -i depth=1 - while true; do - data=${data##[[:space:]]#} - [[ -n $data ]] || return - case $data[1] in - '{'|'[') data[1]=; (( ++depth ));; - '}'|']') data[1]=; (( --depth > 0 )) || return;; - ':') data[1]=;; - ',') data[1]=; field=;; - [[:alnum:].]) data=${data##[[:alnum:].]#};; - '"') - local tail=${data##\"([^\"\\]|\\?)#} - [[ $tail == '"'* ]] || return - local s=${data:1:-$#tail} - data=${tail:1} - (( depth == 1 )) || continue - if [[ -z $field ]]; then - field=${s:-x} - elif [[ $field == (name|version) ]]; then - (( ! $+found[$field] )) || return - [[ -n $s ]] || return - [[ $s != *($'\n'|'\')* ]] || return - found[$field]=$s - (( $#found == 2 )) && break - fi - ;; - *) return 1;; - esac - done - _p9k_cache_stat_set 1 $found[name] $found[version] - return 0 - } || _p9k_cache_stat_set 0 - fi - (( _p9k__cache_val[1] )) || return - - P9K_PACKAGE_NAME=$_p9k__cache_val[2] - P9K_PACKAGE_VERSION=$_p9k__cache_val[3] - _p9k_prompt_segment "$0" "cyan" "$_p9k_color1" PACKAGE_ICON 0 '' ${P9K_PACKAGE_VERSION//\%/%%} -} - -################################################################ -# Detection for virtualization (systemd based systems only) -prompt_detect_virt() { - local virt="$(systemd-detect-virt 2>/dev/null)" - if [[ "$virt" == "none" ]]; then - local -a inode - if zstat -A inode +inode / 2>/dev/null && [[ $inode[1] != 2 ]]; then - virt="chroot" - fi - fi - if [[ -n "${virt}" ]]; then - _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" '' 0 '' "${virt//\%/%%}" - fi -} - -_p9k_prompt_detect_virt_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[systemd-detect-virt]' -} - -################################################################ -# Segment to display the current IP address -prompt_ip() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment "$0" "cyan" "$_p9k_color1" 'NETWORK_ICON' 1 '$P9K_IP_IP' '$P9K_IP_IP' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -################################################################ -# Segment to display if VPN is active -prompt_vpn_ip() { - typeset -ga _p9k__vpn_ip_segments - _p9k__vpn_ip_segments+=($_p9k__prompt_side $_p9k__line_index $_p9k__segment_index) - local p='${(e)_p9k__vpn_ip_'$_p9k__prompt_side$_p9k__segment_index'}' - _p9k__prompt+=$p - typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$p -} - -_p9k_vpn_ip_render() { - local _p9k__segment_name=vpn_ip _p9k__prompt_side ip - local -i _p9k__has_upglob _p9k__segment_index - for _p9k__prompt_side _p9k__line_index _p9k__segment_index in $_p9k__vpn_ip_segments; do - local _p9k__prompt= - for ip in $_p9k__vpn_ip_ips; do - _p9k_prompt_segment prompt_vpn_ip "cyan" "$_p9k_color1" 'VPN_ICON' 0 '' $ip - done - typeset -g _p9k__vpn_ip_$_p9k__prompt_side$_p9k__segment_index=$_p9k__prompt - done -} - -################################################################ -# Segment to display laravel version -prompt_laravel_version() { - # TODO: add a '-/' or '-.' here depending on whether artisan is a directory or a file. - _p9k_upglob artisan && return - local dir=$_p9k__parent_dirs[$?] - local app=$dir/vendor/laravel/framework/src/Illuminate/Foundation/Application.php - [[ -r $app ]] || return - if ! _p9k_cache_stat_get $0 $dir/artisan $app; then - local v="$(php $dir/artisan --version 2> /dev/null)" - _p9k_cache_stat_set "${${(M)v:#Laravel Framework *}#Laravel Framework }" - fi - [[ -n $_p9k__cache_val[1] ]] || return - _p9k_prompt_segment "$0" "maroon" "white" 'LARAVEL_ICON' 0 '' "${_p9k__cache_val[1]//\%/%%}" -} - -_p9k_prompt_laravel_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[php]' -} - -################################################################ -# Segment to display load -prompt_load() { - if [[ $_p9k_os == (OSX|BSD) ]]; then - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0_CRITICAL red "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_critical' '$_p9k__load_value' - _p9k_prompt_segment $0_WARNING yellow "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_warning' '$_p9k__load_value' - _p9k_prompt_segment $0_NORMAL green "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_normal' '$_p9k__load_value' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] - return - fi - - [[ -r /proc/loadavg ]] || return - _p9k_read_file /proc/loadavg || return - local load=${${(A)=_p9k__ret}[_POWERLEVEL9K_LOAD_WHICH]//,/.} - local -F pct='100. * load / _p9k_num_cpus' - if (( pct > _POWERLEVEL9K_LOAD_CRITICAL_PCT )); then - _p9k_prompt_segment $0_CRITICAL red "$_p9k_color1" LOAD_ICON 0 '' $load - elif (( pct > _POWERLEVEL9K_LOAD_WARNING_PCT )); then - _p9k_prompt_segment $0_WARNING yellow "$_p9k_color1" LOAD_ICON 0 '' $load - else - _p9k_prompt_segment $0_NORMAL green "$_p9k_color1" LOAD_ICON 0 '' $load - fi -} - -_p9k_prompt_load_init() { - if [[ $_p9k_os == (OSX|BSD) ]]; then - typeset -g _p9k__load_value= - typeset -g _p9k__load_normal= - typeset -g _p9k__load_warning= - typeset -g _p9k__load_critical= - _p9k__async_segments_compute+='_p9k_worker_invoke load _p9k_prompt_load_compute' - elif [[ ! -r /proc/loadavg ]]; then - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - fi -} - -_p9k_prompt_load_compute() { - (( $+commands[sysctl] )) || return - _p9k_worker_async _p9k_prompt_load_async _p9k_prompt_load_sync -} - -_p9k_prompt_load_async() { - local load="$(sysctl -n vm.loadavg 2>/dev/null)" || return - load=${${(A)=load}[_POWERLEVEL9K_LOAD_WHICH+1]//,/.} - [[ $load == <->(|.<->) && $load != $_p9k__load_value ]] || return - _p9k__load_value=$load - _p9k__load_normal= - _p9k__load_warning= - _p9k__load_critical= - local -F pct='100. * _p9k__load_value / _p9k_num_cpus' - if (( pct > _POWERLEVEL9K_LOAD_CRITICAL_PCT )); then - _p9k__load_critical=1 - elif (( pct > _POWERLEVEL9K_LOAD_WARNING_PCT )); then - _p9k__load_warning=1 - else - _p9k__load_normal=1 - fi - _p9k_print_params \ - _p9k__load_value \ - _p9k__load_normal \ - _p9k__load_warning \ - _p9k__load_critical - echo -E - 'reset=1' -} - -_p9k_prompt_load_sync() { - eval $REPLY - _p9k_worker_reply $REPLY -} - -# Usage: _p9k_cached_cmd <0|1> [args...] -# -# The first argument says whether to capture stderr (1) or ignore it (0). -# The second argument can be empty or a file. If it's a file, the -# output of the command is presumed to potentially depend on it. -function _p9k_cached_cmd() { - local cmd=$commands[$3] - [[ -n $cmd ]] || return - if ! _p9k_cache_stat_get $0" ${(q)*}" $2 $cmd; then - local out - if (( $1 )); then - out="$($cmd "${@:4}" 2>&1)" - else - out="$($cmd "${@:4}" 2>/dev/null)" - fi - _p9k_cache_stat_set $(( ! $? )) "$out" - fi - (( $_p9k__cache_val[1] )) || return - _p9k__ret=$_p9k__cache_val[2] -} - -################################################################ -# Segment to diplay Node version -prompt_node_version() { - _p9k_upglob package.json -. - local -i idx=$? - (( idx || ! _POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY )) || return - - local node=$commands[node] - local -a file_deps env_deps - if [[ $node == ${NODENV_ROOT:-$HOME/.nodenv}/shims/node ]]; then - env_deps+=("$NODENV_VERSION") - file_deps+=(${NODENV_ROOT:-$HOME/.nodenv}/version) - if [[ $NODENV_DIR != (|.) ]]; then - [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$_p9k__cwd_a/$NODENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if [[ -e $dir/.node-version ]]; then - file_deps+=($dir/.node-version) - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - _p9k_upglob .node-version -. || file_deps+=($_p9k__parent_dirs[idx]/.node-version) - elif (( idx )); then - file_deps+=($_p9k__parent_dirs[idx]/package.json) - fi - - if ! _p9k_cache_stat_get "$0 $#env_deps ${(j: :)${(@q)env_deps}} ${(j: :)${(@q)file_deps}}" $file_deps $node; then - local out - out=$($node --version 2>/dev/null) - _p9k_cache_stat_set $(( ! $? )) "$out" - fi - (( $_p9k__cache_val[1] )) || return - local v=$_p9k__cache_val[2] - [[ $v == v?* ]] || return - _p9k_prompt_segment "$0" "green" "white" 'NODE_ICON' 0 '' "${${v#v}//\%/%%}" -} - -_p9k_prompt_node_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[node]' -} - -# Almost the same as `nvm_version default` but faster. The differences shouldn't affect -# the observable behavior of Powerlevel10k. -function _p9k_nvm_ls_default() { - local v=default - local -a seen=($v) - while [[ -r $NVM_DIR/alias/$v ]]; do - local target= - IFS='' read -r target <$NVM_DIR/alias/$v - target=${target%$'\r'} - [[ -z $target ]] && break - (( $seen[(I)$target] )) && return - seen+=$target - v=$target - done - - case $v in - default|N/A) - return 1 - ;; - system|v) - _p9k__ret=system - return 0 - ;; - iojs-[0-9]*) - v=iojs-v${v#iojs-} - ;; - [0-9]*) - v=v$v - ;; - esac - - if [[ $v == v*.*.* ]]; then - if [[ -x $NVM_DIR/versions/node/$v/bin/node || -x $NVM_DIR/$v/bin/node ]]; then - _p9k__ret=$v - return 0 - elif [[ -x $NVM_DIR/versions/io.js/$v/bin/node ]]; then - _p9k__ret=iojs-$v - return 0 - else - return 1 - fi - fi - - local -a dirs=() - case $v in - node|node-|stable) - dirs=($NVM_DIR/versions/node $NVM_DIR) - v='(v[1-9]*|v0.*[02468].*)' - ;; - unstable) - dirs=($NVM_DIR/versions/node $NVM_DIR) - v='v0.*[13579].*' - ;; - iojs*) - dirs=($NVM_DIR/versions/io.js) - v=v${${${v#iojs}#-}#v}'*' - ;; - *) - dirs=($NVM_DIR/versions/node $NVM_DIR $NVM_DIR/versions/io.js) - v=v${v#v}'*' - ;; - esac - - local -a matches=(${^dirs}/${~v}(/N)) - (( $#matches )) || return - - local max path - for path in ${(Oa)matches}; do - [[ ${path:t} == (#b)v(*).(*).(*) ]] || continue - v=${(j::)${(@l:6::0:)match}} - [[ $v > $max ]] || continue - max=$v - _p9k__ret=${path:t} - [[ ${path:h:t} != io.js ]] || _p9k__ret=iojs-$_p9k__ret - done - - [[ -n $max ]] -} - -# The same as `nvm_version current` but faster. -_p9k_nvm_ls_current() { - local node_path=${commands[node]:A} - [[ -n $node_path ]] || return - - local nvm_dir=${NVM_DIR:A} - if [[ -n $nvm_dir && $node_path == $nvm_dir/versions/io.js/* ]]; then - _p9k_cached_cmd 0 '' iojs --version || return - _p9k__ret=iojs-v${_p9k__ret#v} - elif [[ -n $nvm_dir && $node_path == $nvm_dir/* ]]; then - _p9k_cached_cmd 0 '' node --version || return - _p9k__ret=v${_p9k__ret#v} - else - _p9k__ret=system - fi -} - -################################################################ -# Segment to display Node version from NVM -# Only prints the segment if different than the default value -prompt_nvm() { - [[ -n $NVM_DIR ]] && _p9k_nvm_ls_current || return - local current=$_p9k__ret - ! _p9k_nvm_ls_default || [[ $_p9k__ret != $current ]] || return - _p9k_prompt_segment "$0" "magenta" "black" 'NODE_ICON' 0 '' "${${current#v}//\%/%%}" -} - -_p9k_prompt_nvm_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[nvm]:-${${+functions[nvm]}:#0}}' -} - -################################################################ -# Segment to display NodeEnv -prompt_nodeenv() { - local msg - if (( _POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION )) && _p9k_cached_cmd 0 '' node --version; then - msg="${_p9k__ret//\%/%%} " - fi - msg+="$_POWERLEVEL9K_NODEENV_LEFT_DELIMITER${${NODE_VIRTUAL_ENV:t}//\%/%%}$_POWERLEVEL9K_NODEENV_RIGHT_DELIMITER" - _p9k_prompt_segment "$0" "black" "green" 'NODE_ICON' 0 '' "$msg" -} - -_p9k_prompt_nodeenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$NODE_VIRTUAL_ENV' -} - -function _p9k_nodeenv_version_transform() { - local dir=${NODENV_ROOT:-$HOME/.nodenv}/versions - [[ -z $1 || $1 == system ]] && _p9k__ret=$1 && return - [[ -d $dir/$1 ]] && _p9k__ret=$1 && return - [[ -d $dir/${1/v} ]] && _p9k__ret=${1/v} && return - [[ -d $dir/${1#node-} ]] && _p9k__ret=${1#node-} && return - [[ -d $dir/${1#node-v} ]] && _p9k__ret=${1#node-v} && return - return 1 -} - -function _p9k_nodenv_global_version() { - _p9k_read_word ${NODENV_ROOT:-$HOME/.nodenv}/version || _p9k__ret=system -} - -################################################################ -# Segment to display nodenv information -# https://github.com/nodenv/nodenv -prompt_nodenv() { - if [[ -n $NODENV_VERSION ]]; then - (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)shell]} )) || return - local v=$NODENV_VERSION - else - (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $NODENV_DIR != (|.) ]]; then - [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$_p9k__cwd_a/$NODENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_word $dir/.node-version; then - (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .node-version -. - local -i idx=$? - if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.node-version; then - (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)global]} )) || return - _p9k_nodenv_global_version - fi - - _p9k_nodeenv_version_transform $_p9k__ret || return - local v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )); then - _p9k_nodenv_global_version - _p9k_nodeenv_version_transform $_p9k__ret && [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_NODENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" "black" "green" 'NODE_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_nodenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[nodenv]:-${${+functions[nodenv]}:#0}}' -} - -prompt_dotnet_version() { - if (( _POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY )); then - _p9k_upglob 'project.json|global.json|packet.dependencies|*.csproj|*.fsproj|*.xproj|*.sln' -. && return - fi - - local cfg - _p9k_upglob global.json -. || cfg=$_p9k__parent_dirs[$?]/global.json - _p9k_cached_cmd 0 "$cfg" dotnet --version || return - _p9k_prompt_segment "$0" "magenta" "white" 'DOTNET_ICON' 0 '' "$_p9k__ret" -} - -_p9k_prompt_dotnet_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[dotnet]' -} - -################################################################ -# Segment to print a little OS icon -prompt_os_icon() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment "$0" "black" "white" '' 0 '' "$_p9k_os_icon" - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -instant_prompt_os_icon() { prompt_os_icon; } - -################################################################ -# Segment to display PHP version number -prompt_php_version() { - if (( _POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY )); then - _p9k_upglob 'composer.json|*.php' -. && return - fi - _p9k_cached_cmd 0 '' php --version || return - [[ $_p9k__ret == (#b)(*$'\n')#'PHP '([[:digit:].]##)* ]] || return - local v=$match[2] - _p9k_prompt_segment "$0" "fuchsia" "grey93" 'PHP_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_php_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[php]' -} - -################################################################ -# Segment to display free RAM and used Swap -prompt_ram() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0 yellow "$_p9k_color1" RAM_ICON 1 '$_p9k__ram_free' '$_p9k__ram_free' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -function _p9k_prompt_ram_init() { - if [[ $_p9k_os == OSX && $+commands[vm_stat] == 0 || - $_p9k_os == BSD && ! -r /var/run/dmesg.boot || - $_p9k_os != (OSX|BSD) && ! -r /proc/meminfo ]]; then - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - return - fi - typeset -g _p9k__ram_free= - _p9k__async_segments_compute+='_p9k_worker_invoke ram _p9k_prompt_ram_compute' -} - -_p9k_prompt_ram_compute() { - _p9k_worker_async _p9k_prompt_ram_async _p9k_prompt_ram_sync -} - -_p9k_prompt_ram_async() { - local -F free_bytes - - case $_p9k_os in - OSX) - (( $+commands[vm_stat] )) || return - local stat && stat="$(vm_stat 2>/dev/null)" || return - [[ $stat =~ 'Pages free:[[:space:]]+([0-9]+)' ]] || return - (( free_bytes += match[1] )) - [[ $stat =~ 'Pages inactive:[[:space:]]+([0-9]+)' ]] || return - (( free_bytes += match[1] )) - if (( ! $+_p9k__ram_pagesize )); then - local p - (( $+commands[pagesize] )) && p=$(pagesize 2>/dev/null) && [[ $p == <1-> ]] || p=4096 - typeset -gi _p9k__ram_pagesize=p - _p9k_print_params _p9k__ram_pagesize - fi - (( free_bytes *= _p9k__ram_pagesize )) - ;; - BSD) - local stat && stat="$(grep -F 'avail memory' /var/run/dmesg.boot 2>/dev/null)" || return - free_bytes=${${(A)=stat}[4]} - ;; - *) - [[ -r /proc/meminfo ]] || return - local stat && stat="$()* ]] || return - free_bytes=$(( $match[2] * 1024 )) - ;; - esac - - _p9k_human_readable_bytes $free_bytes - [[ $_p9k__ret != $_p9k__ram_free ]] || return - _p9k__ram_free=$_p9k__ret - _p9k_print_params _p9k__ram_free - echo -E - 'reset=1' -} - -_p9k_prompt_ram_sync() { - eval $REPLY - _p9k_worker_reply $REPLY -} - -function _p9k_rbenv_global_version() { - _p9k_read_word ${RBENV_ROOT:-$HOME/.rbenv}/version || _p9k__ret=system -} - -################################################################ -# Segment to display rbenv information -# https://github.com/rbenv/rbenv#choosing-the-ruby-version -prompt_rbenv() { - if [[ -n $RBENV_VERSION ]]; then - (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)shell]} )) || return - local v=$RBENV_VERSION - else - (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $RBENV_DIR != (|.) ]]; then - [[ $RBENV_DIR == /* ]] && local dir=$RBENV_DIR || local dir="$_p9k__cwd_a/$RBENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_word $dir/.ruby-version; then - (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .ruby-version -. - local -i idx=$? - if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.ruby-version; then - (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)global]} )) || return - _p9k_rbenv_global_version - fi - local v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )); then - _p9k_rbenv_global_version - [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_RBENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_rbenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[rbenv]:-${${+functions[rbenv]}:#0}}' -} - -function _p9k_phpenv_global_version() { - _p9k_read_word ${PHPENV_ROOT:-$HOME/.phpenv}/version || _p9k__ret=system -} - -function _p9k_scalaenv_global_version() { - _p9k_read_word ${SCALAENV_ROOT:-$HOME/.scalaenv}/version || _p9k__ret=system -} - -# https://github.com/scalaenv/scalaenv -prompt_scalaenv() { - if [[ -n $SCALAENV_VERSION ]]; then - (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)shell]} )) || return - local v=$SCALAENV_VERSION - else - (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $SCALAENV_DIR != (|.) ]]; then - [[ $SCALAENV_DIR == /* ]] && local dir=$SCALAENV_DIR || local dir="$_p9k__cwd_a/$SCALAENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_word $dir/.scala-version; then - (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .scala-version -. - local -i idx=$? - if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.scala-version; then - (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)global]} )) || return - _p9k_scalaenv_global_version - fi - local v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW )); then - _p9k_scalaenv_global_version - [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_SCALAENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'SCALA_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_scalaenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[scalaenv]:-${${+functions[scalaenv]}:#0}}' -} - -function _p9k_phpenv_global_version() { - _p9k_read_word ${PHPENV_ROOT:-$HOME/.phpenv}/version || _p9k__ret=system -} - -prompt_phpenv() { - if [[ -n $PHPENV_VERSION ]]; then - (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)shell]} )) || return - local v=$PHPENV_VERSION - else - (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $PHPENV_DIR != (|.) ]]; then - [[ $PHPENV_DIR == /* ]] && local dir=$PHPENV_DIR || local dir="$_p9k__cwd_a/$PHPENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_word $dir/.php-version; then - (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .php-version -. - local -i idx=$? - if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.php-version; then - (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)global]} )) || return - _p9k_phpenv_global_version - fi - local v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW )); then - _p9k_phpenv_global_version - [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_PHPENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" "magenta" "$_p9k_color1" 'PHP_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_phpenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[phpenv]:-${${+functions[phpenv]}:#0}}' -} - -function _p9k_luaenv_global_version() { - _p9k_read_word ${LUAENV_ROOT:-$HOME/.luaenv}/version || _p9k__ret=system -} - -################################################################ -# Segment to display luaenv information -# https://github.com/cehoffman/luaenv -prompt_luaenv() { - if [[ -n $LUAENV_VERSION ]]; then - (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)shell]} )) || return - local v=$LUAENV_VERSION - else - (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $LUAENV_DIR != (|.) ]]; then - [[ $LUAENV_DIR == /* ]] && local dir=$LUAENV_DIR || local dir="$_p9k__cwd_a/$LUAENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_word $dir/.lua-version; then - (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .lua-version -. - local -i idx=$? - if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.lua-version; then - (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)global]} )) || return - _p9k_luaenv_global_version - fi - local v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW )); then - _p9k_luaenv_global_version - [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_LUAENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" blue "$_p9k_color1" 'LUA_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_luaenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[luaenv]:-${${+functions[luaenv]}:#0}}' -} - -function _p9k_jenv_global_version() { - _p9k_read_word ${JENV_ROOT:-$HOME/.jenv}/version || _p9k__ret=system -} - -################################################################ -# Segment to display jenv information -# https://github.com/jenv/jenv -prompt_jenv() { - if [[ -n $JENV_VERSION ]]; then - (( ${_POWERLEVEL9K_JENV_SOURCES[(I)shell]} )) || return - local v=$JENV_VERSION - else - (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $JENV_DIR != (|.) ]]; then - [[ $JENV_DIR == /* ]] && local dir=$JENV_DIR || local dir="$_p9k__cwd_a/$JENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_word $dir/.java-version; then - (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .java-version -. - local -i idx=$? - if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.java-version; then - (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_JENV_SOURCES[(I)global]} )) || return - _p9k_jenv_global_version - fi - local v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW )); then - _p9k_jenv_global_version - [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_JENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" white red 'JAVA_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_jenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[jenv]:-${${+functions[jenv]}:#0}}' -} - -function _p9k_plenv_global_version() { - _p9k_read_word ${PLENV_ROOT:-$HOME/.plenv}/version || _p9k__ret=system -} - -################################################################ -# Segment to display plenv information -# https://github.com/plenv/plenv#choosing-the-perl-version -prompt_plenv() { - if [[ -n $PLENV_VERSION ]]; then - (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)shell]} )) || return - local v=$PLENV_VERSION - else - (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $PLENV_DIR != (|.) ]]; then - [[ $PLENV_DIR == /* ]] && local dir=$PLENV_DIR || local dir="$_p9k__cwd_a/$PLENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_word $dir/.perl-version; then - (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .perl-version -. - local -i idx=$? - if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.perl-version; then - (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)global]} )) || return - _p9k_plenv_global_version - fi - local v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW )); then - _p9k_plenv_global_version - [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_PLENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PERL_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_plenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[plenv]:-${${+functions[plenv]}:#0}}' -} - -################################################################ -# Segment to display perlbrew information -# https://github.com/gugod/App-perlbrew - -prompt_perlbrew() { - if (( _POWERLEVEL9K_PERLBREW_PROJECT_ONLY )); then - _p9k_upglob 'cpanfile|.perltidyrc|(|MY)META.(yml|json)|(Makefile|Build).PL|*.(pl|pm|t|pod)' -. && return - fi - - local v=$PERLBREW_PERL - (( _POWERLEVEL9K_PERLBREW_SHOW_PREFIX )) || v=${v#*-} - [[ -n $v ]] || return - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PERL_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_perlbrew_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$PERLBREW_PERL' -} - -################################################################ -# Segment to display chruby information -# see https://github.com/postmodern/chruby/issues/245 for chruby_auto issue with ZSH -prompt_chruby() { - local v=${(M)RUBY_ENGINE:#$~_POWERLEVEL9K_CHRUBY_SHOW_ENGINE_PATTERN} - [[ $_POWERLEVEL9K_CHRUBY_SHOW_VERSION == 1 && -n $RUBY_VERSION ]] && v+=${v:+ }$RUBY_VERSION - _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_chruby_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$RUBY_ENGINE' -} - -################################################################ -# Segment to print an icon if user is root. -prompt_root_indicator() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" 'ROOT_ICON' 0 '${${(%):-%#}:#\%}' '' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -instant_prompt_root_indicator() { prompt_root_indicator; } - -################################################################ -# Segment to display Rust version number -prompt_rust_version() { - unset P9K_RUST_VERSION - if (( _POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY )); then - _p9k_upglob Cargo.toml -. && return - fi - local rustc=$commands[rustc] toolchain deps=() - if (( $+commands[ldd] )); then - if ! _p9k_cache_stat_get $0_so $rustc; then - local line so - for line in "${(@f)$(ldd $rustc 2>/dev/null)}"; do - [[ $line == (#b)[[:space:]]#librustc_driver[^[:space:]]#.so' => '(*)' (0x'[[:xdigit:]]#')' ]] || continue - so=$match[1] - break - done - _p9k_cache_stat_set "$so" - fi - deps+=$_p9k__cache_val[1] - fi - if (( $+commands[rustup] )); then - local rustup=$commands[rustup] - local rustup_home=${RUSTUP_HOME:-~/.rustup} - local cfg=($rustup_home/settings.toml(.N)) - deps+=($cfg $rustup_home/update-hashes/*(.N)) - if [[ -z ${toolchain::=$RUSTUP_TOOLCHAIN} ]]; then - if ! _p9k_cache_stat_get $0_overrides $rustup $cfg; then - local lines=(${(f)"$(rustup override list 2>/dev/null)"}) - if [[ $lines[1] == "no overrides" ]]; then - _p9k_cache_stat_set - else - local MATCH - local keys=(${(@)${lines%%[[:space:]]#[^[:space:]]#}/(#m)*/${(b)MATCH}/}) - local vals=(${(@)lines/(#m)*/$MATCH[(I)/] ${MATCH##*[[:space:]]}}) - _p9k_cache_stat_set ${keys:^vals} - fi - fi - local -A overrides=($_p9k__cache_val) - _p9k_upglob rust-toolchain -. - local dir=$_p9k__parent_dirs[$?] - local -i n m=${dir[(I)/]} - local pair - for pair in ${overrides[(K)$_p9k__cwd/]}; do - n=${pair%% *} - (( n <= m )) && continue - m=n - toolchain=${pair#* } - done - if [[ -z $toolchain && -n $dir ]]; then - _p9k_read_word $dir/rust-toolchain - toolchain=$_p9k__ret - fi - fi - fi - if ! _p9k_cache_stat_get $0_v$toolchain $rustc $deps; then - _p9k_cache_stat_set "$($rustc --version 2>/dev/null)" - fi - local v=${${_p9k__cache_val[1]#rustc }%% *} - [[ -n $v ]] || return - typeset -g P9K_RUST_VERSION=$_p9k__cache_val[1] - _p9k_prompt_segment "$0" "darkorange" "$_p9k_color1" 'RUST_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_rust_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[rustc]' -} - -# RSpec test ratio -prompt_rspec_stats() { - if [[ -d app && -d spec ]]; then - local -a code=(app/**/*.rb(N)) - (( $#code )) || return - local tests=(spec/**/*.rb(N)) - _p9k_build_test_stats "$0" "$#code" "$#tests" "RSpec" 'TEST_ICON' - fi -} - -################################################################ -# Segment to display Ruby Version Manager information -prompt_rvm() { - [[ $GEM_HOME == *rvm* && $ruby_string != $rvm_path/bin/ruby ]] || return - local v=${GEM_HOME:t} - (( _POWERLEVEL9K_RVM_SHOW_GEMSET )) || v=${v%%${rvm_gemset_separator:-@}*} - (( _POWERLEVEL9K_RVM_SHOW_PREFIX )) || v=${v#*-} - [[ -n $v ]] || return - _p9k_prompt_segment "$0" "240" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_rvm_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[rvm-prompt]:-${${+functions[rvm-prompt]}:#0}}' -} - -################################################################ -# Segment to display SSH icon when connected -prompt_ssh() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" 'SSH_ICON' 0 '' '' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_ssh_init() { - if (( ! P9K_SSH )); then - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - fi -} - -instant_prompt_ssh() { - if (( ! P9K_SSH )); then - return - fi - prompt_ssh -} - -################################################################ -# Status: When an error occur, return the error code, or a cross icon if option is set -# Display an ok icon when no error occur, or hide the segment if option is set to false -prompt_status() { - if ! _p9k_cache_get $0 $_p9k__status $_p9k__pipestatus; then - (( _p9k__status )) && local state=ERROR || local state=OK - if (( _POWERLEVEL9K_STATUS_EXTENDED_STATES )); then - if (( _p9k__status )); then - if (( $#_p9k__pipestatus > 1 )); then - state+=_PIPE - elif (( _p9k__status > 128 )); then - state+=_SIGNAL - fi - elif [[ "$_p9k__pipestatus" == *[1-9]* ]]; then - state+=_PIPE - fi - fi - _p9k__cache_val=(:) - if (( _POWERLEVEL9K_STATUS_$state )); then - if (( _POWERLEVEL9K_STATUS_SHOW_PIPESTATUS )); then - local text=${(j:|:)${(@)_p9k__pipestatus:/(#b)(*)/$_p9k_exitcode2str[$match[1]+1]}} - else - local text=$_p9k_exitcode2str[_p9k__status+1] - fi - if (( _p9k__status )); then - if (( !_POWERLEVEL9K_STATUS_CROSS && _POWERLEVEL9K_STATUS_VERBOSE )); then - _p9k__cache_val=($0_$state red yellow1 CARRIAGE_RETURN_ICON 0 '' "$text") - else - _p9k__cache_val=($0_$state $_p9k_color1 red FAIL_ICON 0 '' '') - fi - elif (( _POWERLEVEL9K_STATUS_VERBOSE || _POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE )); then - [[ $state == OK ]] && text='' - _p9k__cache_val=($0_$state "$_p9k_color1" green OK_ICON 0 '' "$text") - fi - fi - if (( $#_p9k__pipestatus < 3 )); then - _p9k_cache_set "${(@)_p9k__cache_val}" - fi - fi - _p9k_prompt_segment "${(@)_p9k__cache_val}" -} - -instant_prompt_status() { - if (( _POWERLEVEL9K_STATUS_OK )); then - _p9k_prompt_segment prompt_status_OK "$_p9k_color1" green OK_ICON 0 '' '' - fi -} - -prompt_prompt_char() { - local saved=$_p9k__prompt_char_saved[$_p9k__prompt_side$_p9k__segment_index$((!_p9k__status))] - if [[ -n $saved ]]; then - _p9k__prompt+=$saved - return - fi - local -i len=$#_p9k__prompt _p9k__has_upglob - if (( __p9k_sh_glob )); then - if (( _p9k__status )); then - if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then - _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' '❯' - _p9k_prompt_segment $0_ERROR_VIOWR "$_p9k_color1" 196 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' '▶' - else - _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' '❯' - fi - _p9k_prompt_segment $0_ERROR_VICMD "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' - _p9k_prompt_segment $0_ERROR_VIVIS "$_p9k_color1" 196 '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' 'Ⅴ' - else - if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then - _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' '❯' - _p9k_prompt_segment $0_OK_VIOWR "$_p9k_color1" 76 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' '▶' - else - _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' '❯' - fi - _p9k_prompt_segment $0_OK_VICMD "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' - _p9k_prompt_segment $0_OK_VIVIS "$_p9k_color1" 76 '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' 'Ⅴ' - fi - else - if (( _p9k__status )); then - if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then - _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' '❯' - _p9k_prompt_segment $0_ERROR_VIOWR "$_p9k_color1" 196 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' '▶' - else - _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' '❯' - fi - _p9k_prompt_segment $0_ERROR_VICMD "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' - _p9k_prompt_segment $0_ERROR_VIVIS "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' 'Ⅴ' - else - if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )); then - _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' '❯' - _p9k_prompt_segment $0_OK_VIOWR "$_p9k_color1" 76 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' '▶' - else - _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' '❯' - fi - _p9k_prompt_segment $0_OK_VICMD "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' - _p9k_prompt_segment $0_OK_VIVIS "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' 'Ⅴ' - fi - fi - (( _p9k__has_upglob )) || _p9k__prompt_char_saved[$_p9k__prompt_side$_p9k__segment_index$((!_p9k__status))]=$_p9k__prompt[len+1,-1] -} - -instant_prompt_prompt_char() { - _p9k_prompt_segment prompt_prompt_char_OK_VIINS "$_p9k_color1" 76 '' 0 '' '❯' -} - -################################################################ -# Segment to display Swap information -prompt_swap() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0 yellow "$_p9k_color1" SWAP_ICON 1 '$_p9k__swap_used' '$_p9k__swap_used' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -function _p9k_prompt_swap_init() { - if [[ $_p9k_os == OSX && $+commands[sysctl] == 0 || $_p9k_os != OSX && ! -r /proc/meminfo ]]; then - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - return - fi - typeset -g _p9k__swap_used= - _p9k__async_segments_compute+='_p9k_worker_invoke swap _p9k_prompt_swap_compute' -} - -_p9k_prompt_swap_compute() { - _p9k_worker_async _p9k_prompt_swap_async _p9k_prompt_swap_sync -} - -_p9k_prompt_swap_async() { - local -F used_bytes - - if [[ "$_p9k_os" == "OSX" ]]; then - (( $+commands[sysctl] )) || return - [[ "$(sysctl vm.swapusage 2>/dev/null)" =~ "used = ([0-9,.]+)([A-Z]+)" ]] || return - used_bytes=${match[1]//,/.} - case ${match[2]} in - 'K') (( used_bytes *= 1024 ));; - 'M') (( used_bytes *= 1048576 ));; - 'G') (( used_bytes *= 1073741824 ));; - 'T') (( used_bytes *= 1099511627776 ));; - *) return 0;; - esac - else - local meminfo && meminfo="$(grep -F 'Swap' /proc/meminfo 2>/dev/null)" || return - [[ $meminfo =~ 'SwapTotal:[[:space:]]+([0-9]+)' ]] || return - (( used_bytes+=match[1] )) - [[ $meminfo =~ 'SwapFree:[[:space:]]+([0-9]+)' ]] || return - (( used_bytes-=match[1] )) - (( used_bytes *= 1024 )) - fi - - (( used_bytes >= 0 || (used_bytes = 0) )) - - _p9k_human_readable_bytes $used_bytes - [[ $_p9k__ret != $_p9k__swap_used ]] || return - _p9k__swap_used=$_p9k__ret - _p9k_print_params _p9k__swap_used - echo -E - 'reset=1' -} - -_p9k_prompt_swap_sync() { - eval $REPLY - _p9k_worker_reply $REPLY -} - -################################################################ -# Symfony2-PHPUnit test ratio -prompt_symfony2_tests() { - if [[ -d src && -d app && -f app/AppKernel.php ]]; then - local -a all=(src/**/*.php(N)) - local -a code=(${(@)all##*Tests*}) - (( $#code )) || return - _p9k_build_test_stats "$0" "$#code" "$(($#all - $#code))" "SF2" 'TEST_ICON' - fi -} - -################################################################ -# Segment to display Symfony2-Version -prompt_symfony2_version() { - if [[ -r app/bootstrap.php.cache ]]; then - local v="${$(grep -F " VERSION " app/bootstrap.php.cache 2>/dev/null)//[![:digit:].]}" - _p9k_prompt_segment "$0" "grey35" "$_p9k_color1" 'SYMFONY_ICON' 0 '' "${v//\%/%%}" - fi -} - -################################################################ -# Show a ratio of tests vs code -_p9k_build_test_stats() { - local code_amount="$2" - local tests_amount="$3" - local headline="$4" - - (( code_amount > 0 )) || return - local -F 2 ratio=$(( 100. * tests_amount / code_amount )) - - (( ratio >= 75 )) && _p9k_prompt_segment "${1}_GOOD" "cyan" "$_p9k_color1" "$5" 0 '' "$headline: $ratio%%" - (( ratio >= 50 && ratio < 75 )) && _p9k_prompt_segment "$1_AVG" "yellow" "$_p9k_color1" "$5" 0 '' "$headline: $ratio%%" - (( ratio < 50 )) && _p9k_prompt_segment "$1_BAD" "red" "$_p9k_color1" "$5" 0 '' "$headline: $ratio%%" -} - -################################################################ -# System time -prompt_time() { - if (( _POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME )); then - _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' "$_POWERLEVEL9K_TIME_FORMAT" - else - if [[ $_p9k__refresh_reason == precmd ]]; then - if [[ $+__p9k_instant_prompt_active == 1 && $__p9k_instant_prompt_time_format == $_POWERLEVEL9K_TIME_FORMAT ]]; then - _p9k__time=${__p9k_instant_prompt_time//\%/%%} - else - _p9k__time=${${(%)_POWERLEVEL9K_TIME_FORMAT}//\%/%%} - fi - fi - if (( _POWERLEVEL9K_TIME_UPDATE_ON_COMMAND )); then - _p9k_escape $_p9k__time - local t=$_p9k__ret - _p9k_escape $_POWERLEVEL9K_TIME_FORMAT - _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 1 '' \ - "\${_p9k__line_finished-$t}\${_p9k__line_finished+$_p9k__ret}" - else - _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' $_p9k__time - fi - fi -} - -instant_prompt_time() { - _p9k_escape $_POWERLEVEL9K_TIME_FORMAT - local stash='${${__p9k_instant_prompt_time::=${(%)${__p9k_instant_prompt_time_format::='$_p9k__ret'}}}+}' - _p9k_escape $_POWERLEVEL9K_TIME_FORMAT - _p9k_prompt_segment prompt_time "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 1 '' $stash$_p9k__ret -} - -_p9k_prompt_time_init() { - (( _POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME )) || return - _p9k__async_segments_compute+='_p9k_worker_invoke time _p9k_prompt_time_compute' -} - -_p9k_prompt_time_compute() { - _p9k_worker_async _p9k_prompt_time_async _p9k_prompt_time_sync -} - -_p9k_prompt_time_async() { - sleep 1 || true -} - -_p9k_prompt_time_sync() { - _p9k_worker_reply '_p9k_worker_invoke _p9k_prompt_time_compute _p9k_prompt_time_compute; reset=1' -} - -################################################################ -# System date -prompt_date() { - if [[ $_p9k__refresh_reason == precmd ]]; then - if [[ $+__p9k_instant_prompt_active == 1 && $__p9k_instant_prompt_date_format == $_POWERLEVEL9K_DATE_FORMAT ]]; then - _p9k__date=${__p9k_instant_prompt_date//\%/%%} - else - _p9k__date=${${(%)_POWERLEVEL9K_DATE_FORMAT}//\%/%%} - fi - fi - _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "DATE_ICON" 0 '' "$_p9k__date" -} - -instant_prompt_date() { - _p9k_escape $_POWERLEVEL9K_DATE_FORMAT - local stash='${${__p9k_instant_prompt_date::=${(%)${__p9k_instant_prompt_date_format::='$_p9k__ret'}}}+}' - _p9k_escape $_POWERLEVEL9K_DATE_FORMAT - _p9k_prompt_segment prompt_date "$_p9k_color2" "$_p9k_color1" "DATE_ICON" 1 '' $stash$_p9k__ret -} - -################################################################ -# todo.sh: shows the number of tasks in your todo.sh file -prompt_todo() { - unset P9K_TODO_TOTAL_TASK_COUNT P9K_TODO_FILTERED_TASK_COUNT - [[ -r $_p9k__todo_file && -x $_p9k__todo_command ]] || return - if ! _p9k_cache_stat_get $0 $_p9k__todo_file; then - local count="$($_p9k__todo_command -p ls | command tail -1)" - if [[ $count == (#b)'TODO: '([[:digit:]]##)' of '([[:digit:]]##)' '* ]]; then - _p9k_cache_stat_set 1 $match[1] $match[2] - else - _p9k_cache_stat_set 0 - fi - fi - (( $_p9k__cache_val[1] )) || return - typeset -gi P9K_TODO_FILTERED_TASK_COUNT=$_p9k__cache_val[2] - typeset -gi P9K_TODO_TOTAL_TASK_COUNT=$_p9k__cache_val[3] - if (( (P9K_TODO_TOTAL_TASK_COUNT || !_POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL) && - (P9K_TODO_FILTERED_TASK_COUNT || !_POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED) )); then - if (( P9K_TODO_TOTAL_TASK_COUNT == P9K_TODO_FILTERED_TASK_COUNT )); then - local text=$P9K_TODO_TOTAL_TASK_COUNT - else - local text="$P9K_TODO_FILTERED_TASK_COUNT/$P9K_TODO_TOTAL_TASK_COUNT" - fi - _p9k_prompt_segment "$0" "grey50" "$_p9k_color1" 'TODO_ICON' 0 '' "$text" - fi -} - -_p9k_prompt_todo_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$_p9k__todo_file' -} - -################################################################ -# VCS segment: shows the state of your repository, if you are in a folder under -# version control - -# The vcs segment can have 4 different states - defaults to 'CLEAN'. -typeset -gA __p9k_vcs_states=( - 'CLEAN' '2' - 'MODIFIED' '3' - 'UNTRACKED' '2' - 'LOADING' '8' - 'CONFLICTED' '3' -) - -function +vi-git-untracked() { - [[ -z "${vcs_comm[gitdir]}" || "${vcs_comm[gitdir]}" == "." ]] && return - - # get the root for the current repo or submodule - local repoTopLevel="$(git rev-parse --show-toplevel 2> /dev/null)" - # dump out if we're outside a git repository (which includes being in the .git folder) - [[ $? != 0 || -z $repoTopLevel ]] && return - - local untrackedFiles="$(git ls-files --others --exclude-standard "${repoTopLevel}" 2> /dev/null)" - - if [[ -z $untrackedFiles && $_POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY == 1 ]]; then - untrackedFiles+="$(git submodule foreach --quiet --recursive 'git ls-files --others --exclude-standard' 2> /dev/null)" - fi - - [[ -z $untrackedFiles ]] && return - - hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')" - VCS_WORKDIR_HALF_DIRTY=true -} - -function +vi-git-aheadbehind() { - local ahead behind - local -a gitstatus - - # for git prior to 1.7 - # ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l) - ahead="$(git rev-list --count "${hook_com[branch]}"@{upstream}..HEAD 2>/dev/null)" - (( ahead )) && gitstatus+=( " $(print_icon 'VCS_OUTGOING_CHANGES_ICON')${ahead// /}" ) - - # for git prior to 1.7 - # behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l) - behind="$(git rev-list --count HEAD.."${hook_com[branch]}"@{upstream} 2>/dev/null)" - (( behind )) && gitstatus+=( " $(print_icon 'VCS_INCOMING_CHANGES_ICON')${behind// /}" ) - - hook_com[misc]+=${(j::)gitstatus} -} - -function +vi-git-remotebranch() { - local remote - local branch_name="${hook_com[branch]}" - - # Are we on a remote-tracking branch? - remote="$(git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)" - remote=${remote/refs\/(remotes|heads)\/} - - if (( $+_POWERLEVEL9K_VCS_SHORTEN_LENGTH && $+_POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH )); then - if (( ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && ${#hook_com[branch]} > _POWERLEVEL9K_VCS_SHORTEN_LENGTH )); then - case $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY in - truncate_middle) - hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}${branch_name: -$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}" - ;; - truncate_from_right) - hook_com[branch]="${branch_name:0:$_POWERLEVEL9K_VCS_SHORTEN_LENGTH}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER}" - ;; - esac - fi - fi - - if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then - hook_com[branch]="${hook_com[branch]}" - else - hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}" - fi - # Always show the remote - #if [[ -n ${remote} ]] ; then - # Only show the remote if it differs from the local - if [[ -n ${remote} ]] && [[ "${remote#*/}" != "${branch_name}" ]] ; then - hook_com[branch]+="$(print_icon 'VCS_REMOTE_BRANCH_ICON')${remote// /}" - fi -} - -function +vi-git-tagname() { - if (( !_POWERLEVEL9K_VCS_HIDE_TAGS )); then - # If we are on a tag, append the tagname to the current branch string. - local tag - tag="$(git describe --tags --exact-match HEAD 2>/dev/null)" - - if [[ -n "${tag}" ]] ; then - # There is a tag that points to our current commit. Need to determine if we - # are also on a branch, or are in a DETACHED_HEAD state. - if [[ -z "$(git symbolic-ref HEAD 2>/dev/null)" ]]; then - # DETACHED_HEAD state. We want to append the tag name to the commit hash - # and print it. Unfortunately, `vcs_info` blows away the hash when a tag - # exists, so we have to manually retrieve it and clobber the branch - # string. - local revision - revision="$(git rev-list -n 1 --abbrev-commit --abbrev=${_POWERLEVEL9K_CHANGESET_HASH_LENGTH} HEAD)" - if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then - hook_com[branch]="${revision} $(print_icon 'VCS_TAG_ICON')${tag}" - else - hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${revision} $(print_icon 'VCS_TAG_ICON')${tag}" - fi - else - # We are on both a tag and a branch; print both by appending the tag name. - hook_com[branch]+=" $(print_icon 'VCS_TAG_ICON')${tag}" - fi - fi - fi -} - -# Show count of stashed changes -# Port from https://github.com/whiteinge/dotfiles/blob/5dfd08d30f7f2749cfc60bc55564c6ea239624d9/.zsh_shouse_prompt#L268 -function +vi-git-stash() { - if [[ -s "${vcs_comm[gitdir]}/logs/refs/stash" ]] ; then - local -a stashes=( "${(@f)"$(<${vcs_comm[gitdir]}/logs/refs/stash)"}" ) - hook_com[misc]+=" $(print_icon 'VCS_STASH_ICON')${#stashes}" - fi -} - -function +vi-hg-bookmarks() { - if [[ -n "${hgbmarks[@]}" ]]; then - hook_com[hg-bookmark-string]=" $(print_icon 'VCS_BOOKMARK_ICON')${hgbmarks[@]}" - - # To signal that we want to use the sting we just generated, set the special - # variable `ret' to something other than the default zero: - ret=1 - return 0 - fi -} - -function +vi-vcs-detect-changes() { - if [[ "${hook_com[vcs]}" == "git" ]]; then - - local remote="$(git ls-remote --get-url 2> /dev/null)" - if [[ "$remote" =~ "github" ]] then - vcs_visual_identifier='VCS_GIT_GITHUB_ICON' - elif [[ "$remote" =~ "bitbucket" ]] then - vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON' - elif [[ "$remote" =~ "stash" ]] then - vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON' - elif [[ "$remote" =~ "gitlab" ]] then - vcs_visual_identifier='VCS_GIT_GITLAB_ICON' - else - vcs_visual_identifier='VCS_GIT_ICON' - fi - - elif [[ "${hook_com[vcs]}" == "hg" ]]; then - vcs_visual_identifier='VCS_HG_ICON' - elif [[ "${hook_com[vcs]}" == "svn" ]]; then - vcs_visual_identifier='VCS_SVN_ICON' - fi - - if [[ -n "${hook_com[staged]}" ]] || [[ -n "${hook_com[unstaged]}" ]]; then - VCS_WORKDIR_DIRTY=true - else - VCS_WORKDIR_DIRTY=false - fi -} - -function +vi-svn-detect-changes() { - local svn_status="$(svn status)" - if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then - hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')" - VCS_WORKDIR_HALF_DIRTY=true - fi - if [[ -n "$(echo "$svn_status" | \grep \^\M)" ]]; then - hook_com[unstaged]+=" $(print_icon 'VCS_UNSTAGED_ICON')" - VCS_WORKDIR_DIRTY=true - fi - if [[ -n "$(echo "$svn_status" | \grep \^\A)" ]]; then - hook_com[staged]+=" $(print_icon 'VCS_STAGED_ICON')" - VCS_WORKDIR_DIRTY=true - fi -} - -_p9k_vcs_info_init() { - autoload -Uz vcs_info - - local prefix='' - if (( _POWERLEVEL9K_SHOW_CHANGESET )); then - _p9k_get_icon '' VCS_COMMIT_ICON - prefix="$_p9k__ret%0.${_POWERLEVEL9K_CHANGESET_HASH_LENGTH}i " - fi - - zstyle ':vcs_info:*' check-for-changes true - - zstyle ':vcs_info:*' formats "$prefix%b%c%u%m" - zstyle ':vcs_info:*' actionformats "%b %F{$_POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}| %a%f" - _p9k_get_icon '' VCS_STAGED_ICON - zstyle ':vcs_info:*' stagedstr " $_p9k__ret" - _p9k_get_icon '' VCS_UNSTAGED_ICON - zstyle ':vcs_info:*' unstagedstr " $_p9k__ret" - zstyle ':vcs_info:git*+set-message:*' hooks $_POWERLEVEL9K_VCS_GIT_HOOKS - zstyle ':vcs_info:hg*+set-message:*' hooks $_POWERLEVEL9K_VCS_HG_HOOKS - zstyle ':vcs_info:svn*+set-message:*' hooks $_POWERLEVEL9K_VCS_SVN_HOOKS - - # For Hg, only show the branch name - if (( _POWERLEVEL9K_HIDE_BRANCH_ICON )); then - zstyle ':vcs_info:hg*:*' branchformat "%b" - else - _p9k_get_icon '' VCS_BRANCH_ICON - zstyle ':vcs_info:hg*:*' branchformat "$_p9k__ret%b" - fi - # The `get-revision` function must be turned on for dirty-check to work for Hg - zstyle ':vcs_info:hg*:*' get-revision true - zstyle ':vcs_info:hg*:*' get-bookmarks true - zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks - - # TODO: fix the %b (branch) format for svn. Using %b breaks color-encoding of the foreground - # for the rest of the powerline. - zstyle ':vcs_info:svn*:*' formats "$prefix%c%u" - zstyle ':vcs_info:svn*:*' actionformats "$prefix%c%u %F{$_POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND}| %a%f" - - if (( _POWERLEVEL9K_SHOW_CHANGESET )); then - zstyle ':vcs_info:*' get-revision true - else - zstyle ':vcs_info:*' get-revision false - fi -} - -function _p9k_vcs_status_save() { - local z=$'\0' - _p9k__gitstatus_last[${${_p9k__git_dir:+GIT_DIR:$_p9k__git_dir}:-$VCS_STATUS_WORKDIR}]=\ -$VCS_STATUS_COMMIT$z$VCS_STATUS_LOCAL_BRANCH$z$VCS_STATUS_REMOTE_BRANCH$z$VCS_STATUS_REMOTE_NAME$z\ -$VCS_STATUS_REMOTE_URL$z$VCS_STATUS_ACTION$z$VCS_STATUS_INDEX_SIZE$z$VCS_STATUS_NUM_STAGED$z\ -$VCS_STATUS_NUM_UNSTAGED$z$VCS_STATUS_NUM_CONFLICTED$z$VCS_STATUS_NUM_UNTRACKED$z\ -$VCS_STATUS_HAS_STAGED$z$VCS_STATUS_HAS_UNSTAGED$z$VCS_STATUS_HAS_CONFLICTED$z\ -$VCS_STATUS_HAS_UNTRACKED$z$VCS_STATUS_COMMITS_AHEAD$z$VCS_STATUS_COMMITS_BEHIND$z\ -$VCS_STATUS_STASHES$z$VCS_STATUS_TAG$z$VCS_STATUS_NUM_UNSTAGED_DELETED$z\ -$VCS_STATUS_NUM_STAGED_NEW$z$VCS_STATUS_NUM_STAGED_DELETED$z$VCS_STATUS_PUSH_REMOTE_NAME$z\ -$VCS_STATUS_PUSH_REMOTE_URL$z$VCS_STATUS_PUSH_COMMITS_AHEAD$z$VCS_STATUS_PUSH_COMMITS_BEHIND$z\ -$VCS_STATUS_NUM_SKIP_WORKTREE$z$VCS_STATUS_NUM_ASSUME_UNCHANGED -} - -function _p9k_vcs_status_restore() { - for VCS_STATUS_COMMIT VCS_STATUS_LOCAL_BRANCH VCS_STATUS_REMOTE_BRANCH VCS_STATUS_REMOTE_NAME \ - VCS_STATUS_REMOTE_URL VCS_STATUS_ACTION VCS_STATUS_INDEX_SIZE VCS_STATUS_NUM_STAGED \ - VCS_STATUS_NUM_UNSTAGED VCS_STATUS_NUM_CONFLICTED VCS_STATUS_NUM_UNTRACKED \ - VCS_STATUS_HAS_STAGED VCS_STATUS_HAS_UNSTAGED VCS_STATUS_HAS_CONFLICTED \ - VCS_STATUS_HAS_UNTRACKED VCS_STATUS_COMMITS_AHEAD VCS_STATUS_COMMITS_BEHIND \ - VCS_STATUS_STASHES VCS_STATUS_TAG VCS_STATUS_NUM_UNSTAGED_DELETED VCS_STATUS_NUM_STAGED_NEW \ - VCS_STATUS_NUM_STAGED_DELETED VCS_STATUS_PUSH_REMOTE_NAME VCS_STATUS_PUSH_REMOTE_URL \ - VCS_STATUS_PUSH_COMMITS_AHEAD VCS_STATUS_PUSH_COMMITS_BEHIND VCS_STATUS_NUM_SKIP_WORKTREE \ - VCS_STATUS_NUM_ASSUME_UNCHANGED - in "${(@0)1}"; do done -} - -function _p9k_vcs_status_for_dir() { - if [[ -n $GIT_DIR ]]; then - _p9k__ret=$_p9k__gitstatus_last[GIT_DIR:$GIT_DIR] - [[ -n $_p9k__ret ]] - else - local dir=$_p9k__cwd_a - while true; do - _p9k__ret=$_p9k__gitstatus_last[$dir] - [[ -n $_p9k__ret ]] && return 0 - [[ $dir == (/|.) ]] && return 1 - dir=${dir:h} - done - fi -} - -function _p9k_vcs_status_purge() { - if [[ -n $_p9k__git_dir ]]; then - _p9k__gitstatus_last[GIT_DIR:$_p9k__git_dir]="" - else - local dir=$1 - while true; do - # unset doesn't work if $dir contains weird shit - _p9k__gitstatus_last[$dir]="" - _p9k_git_slow[$dir]="" - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi -} - -function _p9k_vcs_icon() { - case "$VCS_STATUS_REMOTE_URL" in - *github*) _p9k__ret=VCS_GIT_GITHUB_ICON;; - *bitbucket*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;; - *stash*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;; - *gitlab*) _p9k__ret=VCS_GIT_GITLAB_ICON;; - *) _p9k__ret=VCS_GIT_ICON;; - esac -} - -function _p9k_vcs_render() { - local state - - if (( $+_p9k__gitstatus_next_dir )); then - if _p9k_vcs_status_for_dir; then - _p9k_vcs_status_restore $_p9k__ret - state=LOADING - else - _p9k_prompt_segment prompt_vcs_LOADING "${__p9k_vcs_states[LOADING]}" "$_p9k_color1" VCS_LOADING_ICON 0 '' "$_POWERLEVEL9K_VCS_LOADING_TEXT" - return 0 - fi - elif [[ $VCS_STATUS_RESULT != ok-* ]]; then - return 1 - fi - - if (( _POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING )); then - if [[ -z $state ]]; then - if [[ $VCS_STATUS_HAS_CONFLICTED == 1 && $_POWERLEVEL9K_VCS_CONFLICTED_STATE == 1 ]]; then - state=CONFLICTED - elif [[ $VCS_STATUS_HAS_STAGED != 0 || $VCS_STATUS_HAS_UNSTAGED != 0 ]]; then - state=MODIFIED - elif [[ $VCS_STATUS_HAS_UNTRACKED != 0 ]]; then - state=UNTRACKED - else - state=CLEAN - fi - fi - _p9k_vcs_icon - _p9k_prompt_segment prompt_vcs_$state "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$_p9k__ret" 0 '' "" - return 0 - fi - - (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-untracked]} )) || VCS_STATUS_HAS_UNTRACKED=0 - (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-aheadbehind]} )) || { VCS_STATUS_COMMITS_AHEAD=0 && VCS_STATUS_COMMITS_BEHIND=0 } - (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-stash]} )) || VCS_STATUS_STASHES=0 - (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-remotebranch]} )) || VCS_STATUS_REMOTE_BRANCH="" - (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)git-tagname]} )) || VCS_STATUS_TAG="" - - (( _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM >= 0 && VCS_STATUS_COMMITS_AHEAD > _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM )) && - VCS_STATUS_COMMITS_AHEAD=$_POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM - - (( _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM >= 0 && VCS_STATUS_COMMITS_BEHIND > _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM )) && - VCS_STATUS_COMMITS_BEHIND=$_POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM - - local -a cache_key=( - "$VCS_STATUS_LOCAL_BRANCH" - "$VCS_STATUS_REMOTE_BRANCH" - "$VCS_STATUS_REMOTE_URL" - "$VCS_STATUS_ACTION" - "$VCS_STATUS_NUM_STAGED" - "$VCS_STATUS_NUM_UNSTAGED" - "$VCS_STATUS_NUM_UNTRACKED" - "$VCS_STATUS_HAS_CONFLICTED" - "$VCS_STATUS_HAS_STAGED" - "$VCS_STATUS_HAS_UNSTAGED" - "$VCS_STATUS_HAS_UNTRACKED" - "$VCS_STATUS_COMMITS_AHEAD" - "$VCS_STATUS_COMMITS_BEHIND" - "$VCS_STATUS_STASHES" - "$VCS_STATUS_TAG" - "$VCS_STATUS_NUM_UNSTAGED_DELETED" - ) - if [[ $_POWERLEVEL9K_SHOW_CHANGESET == 1 || -z $VCS_STATUS_LOCAL_BRANCH ]]; then - cache_key+=$VCS_STATUS_COMMIT - fi - - if ! _p9k_cache_ephemeral_get "$state" "${(@)cache_key}"; then - local icon - local content - - if (( ${_POWERLEVEL9K_VCS_GIT_HOOKS[(I)vcs-detect-changes]} )); then - if [[ $VCS_STATUS_HAS_CONFLICTED == 1 && $_POWERLEVEL9K_VCS_CONFLICTED_STATE == 1 ]]; then - : ${state:=CONFLICTED} - elif [[ $VCS_STATUS_HAS_STAGED != 0 || $VCS_STATUS_HAS_UNSTAGED != 0 ]]; then - : ${state:=MODIFIED} - elif [[ $VCS_STATUS_HAS_UNTRACKED != 0 ]]; then - : ${state:=UNTRACKED} - fi - - # It's weird that removing vcs-detect-changes from POWERLEVEL9K_VCS_GIT_HOOKS gets rid - # of the GIT icon. That's what vcs_info does, so we do the same in the name of compatiblity. - _p9k_vcs_icon - icon=$_p9k__ret - fi - - : ${state:=CLEAN} - - function _$0_fmt() { - _p9k_vcs_style $state $1 - content+="$_p9k__ret$2" - } - - local ws - if [[ $_POWERLEVEL9K_SHOW_CHANGESET == 1 || -z $VCS_STATUS_LOCAL_BRANCH ]]; then - _p9k_get_icon prompt_vcs_$state VCS_COMMIT_ICON - _$0_fmt COMMIT "$_p9k__ret${${VCS_STATUS_COMMIT:0:$_POWERLEVEL9K_CHANGESET_HASH_LENGTH}:-HEAD}" - ws=' ' - fi - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=$ws - if (( !_POWERLEVEL9K_HIDE_BRANCH_ICON )); then - _p9k_get_icon prompt_vcs_$state VCS_BRANCH_ICON - branch+=$_p9k__ret - fi - if (( $+_POWERLEVEL9K_VCS_SHORTEN_LENGTH && $+_POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && - $#VCS_STATUS_LOCAL_BRANCH > _POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH && - $#VCS_STATUS_LOCAL_BRANCH > _POWERLEVEL9K_VCS_SHORTEN_LENGTH )) && - [[ $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY == (truncate_middle|truncate_from_right) ]]; then - branch+=${VCS_STATUS_LOCAL_BRANCH[1,_POWERLEVEL9K_VCS_SHORTEN_LENGTH]//\%/%%}${_POWERLEVEL9K_VCS_SHORTEN_DELIMITER} - if [[ $_POWERLEVEL9K_VCS_SHORTEN_STRATEGY == truncate_middle ]]; then - _p9k_vcs_style $state BRANCH - branch+=${_p9k__ret}${VCS_STATUS_LOCAL_BRANCH[-_POWERLEVEL9K_VCS_SHORTEN_LENGTH,-1]//\%/%%} - fi - else - branch+=${VCS_STATUS_LOCAL_BRANCH//\%/%%} - fi - _$0_fmt BRANCH $branch - fi - - if [[ $_POWERLEVEL9K_VCS_HIDE_TAGS == 0 && -n $VCS_STATUS_TAG ]]; then - _p9k_get_icon prompt_vcs_$state VCS_TAG_ICON - _$0_fmt TAG " $_p9k__ret${VCS_STATUS_TAG//\%/%%}" - fi - - if [[ -n $VCS_STATUS_ACTION ]]; then - _$0_fmt ACTION " | ${VCS_STATUS_ACTION//\%/%%}" - else - if [[ -n $VCS_STATUS_REMOTE_BRANCH && - $VCS_STATUS_LOCAL_BRANCH != $VCS_STATUS_REMOTE_BRANCH ]]; then - _p9k_get_icon prompt_vcs_$state VCS_REMOTE_BRANCH_ICON - _$0_fmt REMOTE_BRANCH " $_p9k__ret${VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - if [[ $VCS_STATUS_HAS_STAGED == 1 || $VCS_STATUS_HAS_UNSTAGED == 1 || $VCS_STATUS_HAS_UNTRACKED == 1 ]]; then - _p9k_get_icon prompt_vcs_$state VCS_DIRTY_ICON - _$0_fmt DIRTY "$_p9k__ret" - if [[ $VCS_STATUS_HAS_STAGED == 1 ]]; then - _p9k_get_icon prompt_vcs_$state VCS_STAGED_ICON - (( _POWERLEVEL9K_VCS_STAGED_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_NUM_STAGED - _$0_fmt STAGED " $_p9k__ret" - fi - if [[ $VCS_STATUS_HAS_UNSTAGED == 1 ]]; then - _p9k_get_icon prompt_vcs_$state VCS_UNSTAGED_ICON - (( _POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_NUM_UNSTAGED - _$0_fmt UNSTAGED " $_p9k__ret" - fi - if [[ $VCS_STATUS_HAS_UNTRACKED == 1 ]]; then - _p9k_get_icon prompt_vcs_$state VCS_UNTRACKED_ICON - (( _POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_NUM_UNTRACKED - _$0_fmt UNTRACKED " $_p9k__ret" - fi - fi - if [[ $VCS_STATUS_COMMITS_BEHIND -gt 0 ]]; then - _p9k_get_icon prompt_vcs_$state VCS_INCOMING_CHANGES_ICON - (( _POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_COMMITS_BEHIND - _$0_fmt INCOMING_CHANGES " $_p9k__ret" - fi - if [[ $VCS_STATUS_COMMITS_AHEAD -gt 0 ]]; then - _p9k_get_icon prompt_vcs_$state VCS_OUTGOING_CHANGES_ICON - (( _POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM != 1 )) && _p9k__ret+=$VCS_STATUS_COMMITS_AHEAD - _$0_fmt OUTGOING_CHANGES " $_p9k__ret" - fi - if [[ $VCS_STATUS_STASHES -gt 0 ]]; then - _p9k_get_icon prompt_vcs_$state VCS_STASH_ICON - _$0_fmt STASH " $_p9k__ret$VCS_STATUS_STASHES" - fi - fi - - _p9k_cache_ephemeral_set "prompt_vcs_$state" "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$icon" 0 '' "$content" - fi - - _p9k_prompt_segment "$_p9k__cache_val[@]" - return 0 -} - -function _p9k_maybe_ignore_git_repo() { - if [[ $VCS_STATUS_RESULT == ok-* && $VCS_STATUS_WORKDIR == $~_POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN ]]; then - VCS_STATUS_RESULT=norepo${VCS_STATUS_RESULT#ok} - fi -} - -function _p9k_vcs_resume() { - eval "$__p9k_intro" - - _p9k_maybe_ignore_git_repo - - if [[ $VCS_STATUS_RESULT == ok-async ]]; then - local latency=$((EPOCHREALTIME - _p9k__gitstatus_start_time)) - if (( latency > _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then - _p9k_git_slow[${${_p9k__git_dir:+GIT_DIR:$_p9k__git_dir}:-$VCS_STATUS_WORKDIR}]=1 - elif (( $1 && latency < 0.8 * _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS )); then # 0.8 to avoid flip-flopping - _p9k_git_slow[${${_p9k__git_dir:+GIT_DIR:$_p9k__git_dir}:-$VCS_STATUS_WORKDIR}]=0 - fi - _p9k_vcs_status_save - fi - - if [[ -z $_p9k__gitstatus_next_dir ]]; then - unset _p9k__gitstatus_next_dir - case $VCS_STATUS_RESULT in - norepo-async) (( $1 )) && _p9k_vcs_status_purge $_p9k__cwd_a;; - ok-async) (( $1 )) || _p9k__gitstatus_next_dir=$_p9k__cwd_a;; - esac - fi - - if [[ -n $_p9k__gitstatus_next_dir ]]; then - _p9k__git_dir=$GIT_DIR - if ! gitstatus_query_p9k_ -d $_p9k__gitstatus_next_dir -t 0 -c '_p9k_vcs_resume 1' POWERLEVEL9K; then - unset _p9k__gitstatus_next_dir - unset VCS_STATUS_RESULT - else - _p9k_maybe_ignore_git_repo - case $VCS_STATUS_RESULT in - tout) _p9k__gitstatus_next_dir=''; _p9k__gitstatus_start_time=$EPOCHREALTIME;; - norepo-sync) _p9k_vcs_status_purge $_p9k__gitstatus_next_dir; unset _p9k__gitstatus_next_dir;; - ok-sync) _p9k_vcs_status_save; unset _p9k__gitstatus_next_dir;; - esac - fi - fi - - if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then - local _p9k__prompt _p9k__prompt_side=$_p9k_vcs_side _p9k__segment_name=vcs - local -i _p9k__has_upglob _p9k__segment_index=_p9k_vcs_index _p9k__line_index=_p9k_vcs_line_index - _p9k_vcs_render - typeset -g _p9k__vcs=$_p9k__prompt - else - _p9k__refresh_reason=gitstatus - _p9k_set_prompt - _p9k__refresh_reason='' - fi - _p9k_reset_prompt -} - -function _p9k_vcs_gitstatus() { - if [[ $_p9k__refresh_reason == precmd ]] && (( !_p9k__vcs_called )); then - typeset -gi _p9k__vcs_called=1 - if (( $+_p9k__gitstatus_next_dir )); then - _p9k__gitstatus_next_dir=$_p9k__cwd_a - else - local -F timeout=_POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS - if ! _p9k_vcs_status_for_dir; then - _p9k__git_dir=$GIT_DIR - gitstatus_query_p9k_ -d $_p9k__cwd_a -t $timeout -p -c '_p9k_vcs_resume 0' POWERLEVEL9K || return 1 - _p9k_maybe_ignore_git_repo - case $VCS_STATUS_RESULT in - tout) _p9k__gitstatus_next_dir=''; _p9k__gitstatus_start_time=$EPOCHREALTIME; return 0;; - norepo-sync) return 0;; - ok-sync) _p9k_vcs_status_save;; - esac - else - if [[ -n $GIT_DIR ]]; then - [[ $_p9k_git_slow[GIT_DIR:$GIT_DIR] == 1 ]] && timeout=0 - else - local dir=$_p9k__cwd_a - while true; do - case $_p9k_git_slow[$dir] in - "") [[ $dir == (/|.) ]] && break; dir=${dir:h};; - 0) break;; - 1) timeout=0; break;; - esac - done - fi - fi - (( _p9k__prompt_idx == 1 )) && timeout=0 - _p9k__git_dir=$GIT_DIR - if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then - if ! gitstatus_query_p9k_ -d $_p9k__cwd_a -t 0 -c '_p9k_vcs_resume 1' POWERLEVEL9K; then - unset VCS_STATUS_RESULT - return 1 - fi - typeset -gF _p9k__vcs_timeout=timeout - _p9k__gitstatus_next_dir='' - _p9k__gitstatus_start_time=$EPOCHREALTIME - return 0 - fi - if ! gitstatus_query_p9k_ -d $_p9k__cwd_a -t $timeout -c '_p9k_vcs_resume 1' POWERLEVEL9K; then - unset VCS_STATUS_RESULT - return 1 - fi - _p9k_maybe_ignore_git_repo - case $VCS_STATUS_RESULT in - tout) _p9k__gitstatus_next_dir=''; _p9k__gitstatus_start_time=$EPOCHREALTIME;; - norepo-sync) _p9k_vcs_status_purge $_p9k__cwd_a;; - ok-sync) _p9k_vcs_status_save;; - esac - fi - fi - return 0 -} - -################################################################ -# Segment to show VCS information - -prompt_vcs() { - if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then - _p9k__prompt+='${(e)_p9k__vcs}' - return - fi - - local -a backends=($_POWERLEVEL9K_VCS_BACKENDS) - if (( ${backends[(I)git]} && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) && _p9k_vcs_gitstatus; then - _p9k_vcs_render && return - backends=(${backends:#git}) - fi - if (( $#backends )); then - VCS_WORKDIR_DIRTY=false - VCS_WORKDIR_HALF_DIRTY=false - local current_state="" - # Actually invoke vcs_info manually to gather all information. - zstyle ':vcs_info:*' enable ${backends} - vcs_info - local vcs_prompt="${vcs_info_msg_0_}" - if [[ -n "$vcs_prompt" ]]; then - if [[ "$VCS_WORKDIR_DIRTY" == true ]]; then - # $vcs_visual_identifier gets set in +vi-vcs-detect-changes in functions/vcs.zsh, - # as we have there access to vcs_info internal hooks. - current_state='MODIFIED' - else - if [[ "$VCS_WORKDIR_HALF_DIRTY" == true ]]; then - current_state='UNTRACKED' - else - current_state='CLEAN' - fi - fi - _p9k_prompt_segment "${0}_${${(U)current_state}//İ/I}" "${__p9k_vcs_states[$current_state]}" "$_p9k_color1" "$vcs_visual_identifier" 0 '' "$vcs_prompt" - fi - fi -} - -################################################################ -# Vi Mode: show editing mode (NORMAL|INSERT|VISUAL) -prompt_vi_mode() { - local -i len=$#_p9k__prompt _p9k__has_upglob - if (( __p9k_sh_glob )); then - if (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )); then - if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then - _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" - fi - _p9k_prompt_segment $0_OVERWRITE "$_p9k_color1" blue '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' "$_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING" - else - if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then - _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" - fi - fi - - if (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )); then - _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" - _p9k_prompt_segment $0_VISUAL "$_p9k_color1" white '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' "$_POWERLEVEL9K_VI_VISUAL_MODE_STRING" - else - _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${$((! ${#${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}})):#0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" - fi - else - if (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )); then - if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then - _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" - fi - _p9k_prompt_segment $0_OVERWRITE "$_p9k_color1" blue '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' "$_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING" - else - if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then - _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" - fi - fi - - if (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )); then - _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" - _p9k_prompt_segment $0_VISUAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' "$_POWERLEVEL9K_VI_VISUAL_MODE_STRING" - else - _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)_p9k__keymap:#(vicmd|vivis|vivli)}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" - fi - fi - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -instant_prompt_vi_mode() { - if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]]; then - _p9k_prompt_segment prompt_vi_mode_INSERT "$_p9k_color1" blue '' 0 '' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" - fi -} - -################################################################ -# Virtualenv: current working virtualenv -# More information on virtualenv (Python): -# https://virtualenv.pypa.io/en/latest/ -prompt_virtualenv() { - local msg='' - if (( _POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION )) && _p9k_python_version; then - msg="${_p9k__ret//\%/%%} " - fi - local v=${VIRTUAL_ENV:t} - if [[ $VIRTUAL_ENV_PROMPT == '('?*') ' && $VIRTUAL_ENV_PROMPT != "($v) " ]]; then - v=$VIRTUAL_ENV_PROMPT[2,-3] - elif [[ $v == $~_POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES ]]; then - v=${VIRTUAL_ENV:h:t} - fi - msg+="$_POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER${v//\%/%%}$_POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER" - case $_POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV in - false) - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '${(M)${#P9K_PYENV_PYTHON_VERSION}:#0}' "$msg" - ;; - if-different) - _p9k_escape $v - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '${${:-'$_p9k__ret'}:#$_p9k__pyenv_version}' "$msg" - ;; - *) - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg" - ;; - esac -} - -_p9k_prompt_virtualenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$VIRTUAL_ENV' -} - -# _p9k_read_pyenv_like_version_file [prefix] -function _p9k_read_pyenv_like_version_file() { - local -a stat - zstat -A stat +mtime -- $1 2>/dev/null || stat=(-1) - local cached=$_p9k__read_pyenv_like_version_file_cache[$1:$2] - if [[ $cached == $stat[1]:* ]]; then - _p9k__ret=${cached#*:} - else - local fd content - { - { sysopen -r -u fd -- $1 && sysread -i $fd -s 1024 content } 2>/dev/null - } always { - [[ -n $fd ]] && exec {fd}>&- - } - local MATCH - local versions=(${${${${(f)content}/(#m)*/${MATCH[(w)1]}}##\#*}#$2}) - _p9k__ret=${(j.:.)versions} - _p9k__read_pyenv_like_version_file_cache[$1:$2]=$stat[1]:$_p9k__ret - fi - [[ -n $_p9k__ret ]] -} - -function _p9k_pyenv_global_version() { - _p9k_read_pyenv_like_version_file ${PYENV_ROOT:-$HOME/.pyenv}/version python- || _p9k__ret=system -} - -function _p9k_pyenv_compute() { - unset P9K_PYENV_PYTHON_VERSION _p9k__pyenv_version - - local v=${(j.:.)${(@)${(s.:.)PYENV_VERSION}#python-}} - if [[ -n $v ]]; then - (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)shell]} )) || return - else - (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $PYENV_DIR != (|.) ]]; then - [[ $PYENV_DIR == /* ]] && local dir=$PYENV_DIR || local dir="$_p9k__cwd_a/$PYENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_pyenv_like_version_file $dir/.python-version python-; then - (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .python-version -. - local -i idx=$? - if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.python-version python-; then - (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)global]} )) || return - _p9k_pyenv_global_version - fi - v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW )); then - _p9k_pyenv_global_version - [[ $v == $_p9k__ret ]] && return 1 - fi - - if (( !_POWERLEVEL9K_PYENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return 1 - fi - - local versions=${PYENV_ROOT:-$HOME/.pyenv}/versions - versions=${versions:A} - local name version - for name in ${(s.:.)v}; do - version=$versions/$name - version=${version:A} - if [[ $version(#qN/) == (#b)$versions/([^/]##)* ]]; then - typeset -g P9K_PYENV_PYTHON_VERSION=$match[1] - break - fi - done - - typeset -g _p9k__pyenv_version=$v -} - -################################################################ -# Segment to display pyenv information -# https://github.com/pyenv/pyenv#choosing-the-python-version -prompt_pyenv() { - _p9k_pyenv_compute || return - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "${_p9k__pyenv_version//\%/%%}" -} - -_p9k_prompt_pyenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[pyenv]:-${${+functions[pyenv]}:#0}}' -} - -function _p9k_goenv_global_version() { - _p9k_read_pyenv_like_version_file ${GOENV_ROOT:-$HOME/.goenv}/version go- || _p9k__ret=system -} - -################################################################ -# Segment to display goenv information: https://github.com/syndbg/goenv -prompt_goenv() { - local v=${(j.:.)${(@)${(s.:.)GOENV_VERSION}#go-}} - if [[ -n $v ]]; then - (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)shell]} )) || return - else - (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local|global]} )) || return - _p9k__ret= - if [[ $GOENV_DIR != (|.) ]]; then - [[ $GOENV_DIR == /* ]] && local dir=$GOENV_DIR || local dir="$_p9k__cwd_a/$GOENV_DIR" - dir=${dir:A} - if [[ $dir != $_p9k__cwd_a ]]; then - while true; do - if _p9k_read_pyenv_like_version_file $dir/.go-version go-; then - (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return - break - fi - [[ $dir == (/|.) ]] && break - dir=${dir:h} - done - fi - fi - if [[ -z $_p9k__ret ]]; then - _p9k_upglob .go-version -. - local -i idx=$? - if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.go-version go-; then - (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return - else - _p9k__ret= - fi - fi - if [[ -z $_p9k__ret ]]; then - (( _POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)global]} )) || return - _p9k_goenv_global_version - fi - v=$_p9k__ret - fi - - if (( !_POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW )); then - _p9k_goenv_global_version - [[ $v == $_p9k__ret ]] && return - fi - - if (( !_POWERLEVEL9K_GOENV_SHOW_SYSTEM )); then - [[ $v == system ]] && return - fi - - _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'GO_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_goenv_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[goenv]:-${${+functions[goenv]}:#0}}' -} - -################################################################ -# Display openfoam information -prompt_openfoam() { - if [[ -z "$WM_FORK" ]] ; then - _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" '' 0 '' "OF: ${${WM_PROJECT_VERSION:t}//\%/%%}" - else - _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" '' 0 '' "F-X: ${${WM_PROJECT_VERSION:t}//\%/%%}" - fi -} - -_p9k_prompt_openfoam_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$WM_PROJECT_VERSION' -} - -################################################################ -# Segment to display Swift version -prompt_swift_version() { - _p9k_cached_cmd 0 '' swift --version || return - [[ $_p9k__ret == (#b)[^[:digit:]]#([[:digit:].]##)* ]] || return - _p9k_prompt_segment "$0" "magenta" "white" 'SWIFT_ICON' 0 '' "${match[1]//\%/%%}" -} - -_p9k_prompt_swift_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[swift]' -} - -################################################################ -# dir_writable: Display information about the user's permission to write in the current directory -prompt_dir_writable() { - if [[ ! -w "$_p9k__cwd_a" ]]; then - _p9k_prompt_segment "$0_FORBIDDEN" "red" "yellow1" 'LOCK_ICON' 0 '' '' - fi -} - -instant_prompt_dir_writable() { prompt_dir_writable; } - -################################################################ -# Kubernetes Current Context/Namespace -prompt_kubecontext() { - if ! _p9k_cache_stat_get $0 ${(s.:.)${KUBECONFIG:-$HOME/.kube/config}}; then - local name namespace cluster user cloud_name cloud_account cloud_zone cloud_cluster text state - () { - local cfg && cfg=(${(f)"$(kubectl config view -o=yaml 2>/dev/null)"}) || return - local qstr='"*"' - local str='([^"'\''|>]*|'$qstr')' - local ctx=(${(@M)cfg:#current-context: $~str}) - (( $#ctx == 1 )) || return - name=${ctx[1]#current-context: } - local -i pos=${cfg[(i)contexts:]} - { - (( pos <= $#cfg )) || return - shift $pos cfg - pos=${cfg[(i) name: ${(b)name}]} - (( pos <= $#cfg )) || return - (( --pos )) - for ((; pos > 0; --pos)); do - local line=$cfg[pos] - if [[ $line == '- context:' ]]; then - return 0 - elif [[ $line == (#b)' cluster: '($~str) ]]; then - cluster=$match[1] - [[ $cluster == $~qstr ]] && cluster=$cluster[2,-2] - elif [[ $line == (#b)' namespace: '($~str) ]]; then - namespace=$match[1] - [[ $namespace == $~qstr ]] && namespace=$namespace[2,-2] - elif [[ $line == (#b)' user: '($~str) ]]; then - user=$match[1] - [[ $user == $~qstr ]] && user=$user[2,-2] - fi - done - } always { - [[ $name == $~qstr ]] && name=$name[2,-2] - } - } - if [[ -n $name ]]; then - : ${namespace:=default} - # gke_my-account_us-east1-a_cluster-01 - # gke_my-account_us-east1_cluster-01 - if [[ $cluster == (#b)gke_(?*)_(asia|australia|europe|northamerica|southamerica|us)-([a-z]##<->)(-[a-z]|)_(?*) ]]; then - cloud_name=gke - cloud_account=$match[1] - cloud_zone=$match[2]-$match[3]$match[4] - cloud_cluster=$match[5] - if (( ${_POWERLEVEL9K_KUBECONTEXT_SHORTEN[(I)gke]} )); then - text=$cloud_cluster - fi - # arn:aws:eks:us-east-1:123456789012:cluster/cluster-01 - elif [[ $cluster == (#b)arn:aws[[:alnum:]-]#:eks:([[:alnum:]-]##):([[:digit:]]##):cluster/(?*) ]]; then - cloud_name=eks - cloud_zone=$match[1] - cloud_account=$match[2] - cloud_cluster=$match[3] - if (( ${_POWERLEVEL9K_KUBECONTEXT_SHORTEN[(I)eks]} )); then - text=$cloud_cluster - fi - fi - if [[ -z $text ]]; then - text=$name - if [[ $_POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE == 1 || $namespace != (default|$name) ]]; then - text+="/$namespace" - fi - fi - local pat class - for pat class in "${_POWERLEVEL9K_KUBECONTEXT_CLASSES[@]}"; do - if [[ $text == ${~pat} ]]; then - [[ -n $class ]] && state=_${${(U)class}//İ/I} - break - fi - done - fi - _p9k_cache_stat_set "${(g::)name}" "${(g::)namespace}" "${(g::)cluster}" "${(g::)user}" "${(g::)cloud_name}" "${(g::)cloud_account}" "${(g::)cloud_zone}" "${(g::)cloud_cluster}" "${(g::)text}" "$state" - fi - - typeset -g P9K_KUBECONTEXT_NAME=$_p9k__cache_val[1] - typeset -g P9K_KUBECONTEXT_NAMESPACE=$_p9k__cache_val[2] - typeset -g P9K_KUBECONTEXT_CLUSTER=$_p9k__cache_val[3] - typeset -g P9K_KUBECONTEXT_USER=$_p9k__cache_val[4] - typeset -g P9K_KUBECONTEXT_CLOUD_NAME=$_p9k__cache_val[5] - typeset -g P9K_KUBECONTEXT_CLOUD_ACCOUNT=$_p9k__cache_val[6] - typeset -g P9K_KUBECONTEXT_CLOUD_ZONE=$_p9k__cache_val[7] - typeset -g P9K_KUBECONTEXT_CLOUD_CLUSTER=$_p9k__cache_val[8] - [[ -n $_p9k__cache_val[9] ]] || return - _p9k_prompt_segment $0$_p9k__cache_val[10] magenta white KUBERNETES_ICON 0 '' "${_p9k__cache_val[9]//\%/%%}" -} - -_p9k_prompt_kubecontext_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[kubectl]' -} - -################################################################ -# Dropbox status -prompt_dropbox() { - # The first column is just the directory, so cut it - local dropbox_status="$(dropbox-cli filestatus . | cut -d\ -f2-)" - - # Only show if the folder is tracked and dropbox is running - if [[ "$dropbox_status" != 'unwatched' && "$dropbox_status" != "isn't running!" ]]; then - # If "up to date", only show the icon - if [[ "$dropbox_status" =~ 'up to date' ]]; then - dropbox_status="" - fi - - _p9k_prompt_segment "$0" "white" "blue" "DROPBOX_ICON" 0 '' "${dropbox_status//\%/%%}" - fi -} - -_p9k_prompt_dropbox_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[dropbox-cli]' -} - -# print Java version number -prompt_java_version() { - if (( _POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY )); then - _p9k_upglob 'pom.xml|build.gradle.kts|build.sbt|deps.edn|project.clj|build.boot|*.(java|class|jar|gradle|clj|cljc)' -. && return - fi - - local java=$commands[java] - if ! _p9k_cache_stat_get $0 $java ${JAVA_HOME:+$JAVA_HOME/release}; then - local v - v="$(java -fullversion 2>&1)" || v= - v=${${v#*\"}%\"*} - (( _POWERLEVEL9K_JAVA_VERSION_FULL )) || v=${v%%-*} - _p9k_cache_stat_set "${v//\%/%%}" - fi - - [[ -n $_p9k__cache_val[1] ]] || return - _p9k_prompt_segment "$0" "red" "white" "JAVA_ICON" 0 '' $_p9k__cache_val[1] -} - -_p9k_prompt_java_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[java]' -} - -prompt_azure() { - local cfg=${AZURE_CONFIG_DIR:-$HOME/.azure}/azureProfile.json - if ! _p9k_cache_stat_get $0 $cfg; then - local name - if (( $+commands[jq] )) && name="$(jq -r '[.subscriptions[]|select(.isDefault==true)|.name][]|strings' $cfg 2>/dev/null)"; then - name=${name%%$'\n'*} - elif ! name="$(az account show --query name --output tsv 2>/dev/null)"; then - name= - fi - _p9k_cache_stat_set "$name" - fi - local pat class state - for pat class in "${_POWERLEVEL9K_AZURE_CLASSES[@]}"; do - if [[ $name == ${~pat} ]]; then - [[ -n $class ]] && state=_${${(U)class}//İ/I} - break - fi - done - [[ -n $_p9k__cache_val[1] ]] || return - _p9k_prompt_segment "$0$state" "blue" "white" "AZURE_ICON" 0 '' "${_p9k__cache_val[1]//\%/%%}" -} - -_p9k_prompt_azure_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[az]' -} - -prompt_gcloud() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment \ - $0_PARTIAL blue white GCLOUD_ICON 1 \ - '${${(M)${#P9K_GCLOUD_PROJECT_NAME}:#0}:+$P9K_GCLOUD_ACCOUNT$P9K_GCLOUD_PROJECT_ID}' \ - '${P9K_GCLOUD_ACCOUNT//\%/%%}:${P9K_GCLOUD_PROJECT_ID//\%/%%}' - _p9k_prompt_segment \ - $0_COMPLETE blue white GCLOUD_ICON 1 \ - '$P9K_GCLOUD_PROJECT_NAME' \ - '${P9K_GCLOUD_ACCOUNT//\%/%%}:${P9K_GCLOUD_PROJECT_ID//\%/%%}' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_gcloud_prefetch() { - # P9K_GCLOUD_PROJECT is deprecated; it's always equal to P9K_GCLOUD_PROJECT_ID - unset P9K_GCLOUD_CONFIGURATION P9K_GCLOUD_ACCOUNT P9K_GCLOUD_PROJECT P9K_GCLOUD_PROJECT_ID P9K_GCLOUD_PROJECT_NAME - (( $+commands[gcloud] )) || return - _p9k_read_word ${CLOUDSDK_CONFIG:-~/.config/gcloud}/active_config || return - P9K_GCLOUD_CONFIGURATION=$_p9k__ret - if ! _p9k_cache_stat_get $0 ${CLOUDSDK_CONFIG:-~/.config/gcloud}/configurations/config_$P9K_GCLOUD_CONFIGURATION; then - local pair account project_id - pair="$(gcloud config configurations describe $P9K_GCLOUD_CONFIGURATION \ - --format=$'value[separator="\1"](properties.core.account,properties.core.project)')" - (( ! $? )) && IFS=$'\1' read account project_id <<<$pair - _p9k_cache_stat_set "$account" "$project_id" - fi - if [[ -n $_p9k__cache_val[1] ]]; then - P9K_GCLOUD_ACCOUNT=$_p9k__cache_val[1] - fi - if [[ -n $_p9k__cache_val[2] ]]; then - P9K_GCLOUD_PROJECT_ID=$_p9k__cache_val[2] - P9K_GCLOUD_PROJECT=$P9K_GCLOUD_PROJECT_ID # deprecated parameter; set for backward compatibility - fi - if [[ $P9K_GCLOUD_CONFIGURATION == $_p9k_gcloud_configuration && - $P9K_GCLOUD_ACCOUNT == $_p9k_gcloud_account && - $P9K_GCLOUD_PROJECT_ID == $_p9k_gcloud_project_id ]]; then - [[ -n $_p9k_gcloud_project_name ]] && P9K_GCLOUD_PROJECT_NAME=$_p9k_gcloud_project_name - if (( _POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS < 0 || - _p9k__gcloud_last_fetch_ts + _POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS > EPOCHREALTIME )); then - return - fi - else - _p9k_gcloud_configuration=$P9K_GCLOUD_CONFIGURATION - _p9k_gcloud_account=$P9K_GCLOUD_ACCOUNT - _p9k_gcloud_project_id=$P9K_GCLOUD_PROJECT_ID - _p9k_gcloud_project_name= - _p9k__state_dump_scheduled=1 - fi - [[ -n $P9K_GCLOUD_CONFIGURATION && -n $P9K_GCLOUD_ACCOUNT && -n $P9K_GCLOUD_PROJECT_ID ]] || return - _p9k__gcloud_last_fetch_ts=EPOCHREALTIME - _p9k_worker_invoke gcloud "_p9k_prompt_gcloud_compute ${(q)commands[gcloud]} ${(q)P9K_GCLOUD_CONFIGURATION} ${(q)P9K_GCLOUD_ACCOUNT} ${(q)P9K_GCLOUD_PROJECT_ID}" -} - -_p9k_prompt_gcloud_init() { - _p9k__async_segments_compute+=_p9k_gcloud_prefetch - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[gcloud]' -} - -_p9k_prompt_gcloud_compute() { - local gcloud=$1 - P9K_GCLOUD_CONFIGURATION=$2 - P9K_GCLOUD_ACCOUNT=$3 - P9K_GCLOUD_PROJECT_ID=$4 - _p9k_worker_async "_p9k_prompt_gcloud_async ${(q)gcloud}" _p9k_prompt_gcloud_sync -} - -_p9k_prompt_gcloud_async() { - local gcloud=$1 - $gcloud projects describe $P9K_GCLOUD_PROJECT_ID --configuration=$P9K_GCLOUD_CONFIGURATION \ - --account=$P9K_GCLOUD_ACCOUNT --format='value(name)' -} - -_p9k_prompt_gcloud_sync() { - _p9k_worker_reply "_p9k_prompt_gcloud_update ${(q)P9K_GCLOUD_CONFIGURATION} ${(q)P9K_GCLOUD_ACCOUNT} ${(q)P9K_GCLOUD_PROJECT_ID} ${(q)REPLY%$'\n'}" -} - -_p9k_prompt_gcloud_update() { - [[ $1 == $P9K_GCLOUD_CONFIGURATION && - $2 == $P9K_GCLOUD_ACCOUNT && - $3 == $P9K_GCLOUD_PROJECT_ID && - $4 != $P9K_GCLOUD_PROJECT_NAME ]] || return - [[ -n $4 ]] && P9K_GCLOUD_PROJECT_NAME=$4 || unset P9K_GCLOUD_PROJECT_NAME - _p9k_gcloud_project_name=$P9K_GCLOUD_PROJECT_NAME - _p9k__state_dump_scheduled=1 - reset=1 -} - -prompt_google_app_cred() { - unset P9K_GOOGLE_APP_CRED_{TYPE,PROJECT_ID,CLIENT_EMAIL} - - if ! _p9k_cache_stat_get $0 $GOOGLE_APPLICATION_CREDENTIALS; then - local -a lines - local q='[.type//"", .project_id//"", .client_email//"", 0][]' - if lines=("${(@f)$(jq -r $q <$GOOGLE_APPLICATION_CREDENTIALS 2>/dev/null)}") && (( $#lines == 4 )); then - local text="${(j.:.)lines[1,-2]}" - local pat class state - for pat class in "${_POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES[@]}"; do - if [[ $text == ${~pat} ]]; then - [[ -n $class ]] && state=_${${(U)class}//İ/I} - break - fi - done - _p9k_cache_stat_set 1 "${(@)lines[1,-2]}" "$text" "$state" - else - _p9k_cache_stat_set 0 - fi - fi - - (( _p9k__cache_val[1] )) || return - P9K_GOOGLE_APP_CRED_TYPE=$_p9k__cache_val[2] - P9K_GOOGLE_APP_CRED_PROJECT_ID=$_p9k__cache_val[3] - P9K_GOOGLE_APP_CRED_CLIENT_EMAIL=$_p9k__cache_val[4] - _p9k_prompt_segment "$0$_p9k__cache_val[6]" "blue" "white" "GCLOUD_ICON" 0 '' "$_p9k__cache_val[5]" -} - -_p9k_prompt_google_app_cred_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${GOOGLE_APPLICATION_CREDENTIALS:+$commands[jq]}' -} - -typeset -gra __p9k_nordvpn_tag=( - P9K_NORDVPN_STATUS - P9K_NORDVPN_TECHNOLOGY - P9K_NORDVPN_PROTOCOL - P9K_NORDVPN_IP_ADDRESS - P9K_NORDVPN_SERVER - P9K_NORDVPN_COUNTRY - P9K_NORDVPN_CITY -) - -function _p9k_fetch_nordvpn_status() { - setopt err_return no_multi_byte - local REPLY - zsocket /run/nordvpn/nordvpnd.sock - local -i fd=REPLY - { - print -nu $fd 'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n\0\0\0\4\1\0\0\0\0\0\0;\1\4\0\0\0\1\203\206E\213b\270\327\2762\322z\230\326j\246A\206\240\344\35\23\235\t_\213\35u\320b\r&=LMedz\212\232\312\310\264\307`+\262\332\340@\2te\206M\2035\5\261\37\0\0\5\0\1\0\0\0\1\0\0\0\0\0\0\0\25\1\4\0\0\0\3\203\206E\215b\270\327\2762\322z\230\334\221\246\324\177\302\301\300\277\0\0\5\0\1\0\0\0\3\0\0\0\0\0' - local val - local -i len n wire tag - { - IFS='' read -t 0.25 -r val - val=$'\n' - while true; do - tag=$((#val)) - wire='tag & 7' - (( (tag >>= 3) && tag <= $#__p9k_nordvpn_tag )) || break - if (( wire == 0 )); then - # varint - sysread -s 1 -t 0.25 val - n=$((#val)) - (( n < 128 )) || break # bail on multi-byte varints - if (( tag == 2 )); then - # P9K_NORDVPN_TECHNOLOGY - case $n in - 1) typeset -g P9K_NORDVPN_TECHNOLOGY=OPENVPN;; - 2) typeset -g P9K_NORDVPN_TECHNOLOGY=NORDLYNX;; - 3) typeset -g P9K_NORDVPN_TECHNOLOGY=SKYLARK;; - *) typeset -g P9K_NORDVPN_TECHNOLOGY=UNKNOWN;; - esac - elif (( tag == 3 )); then - # P9K_NORDVPN_PROTOCOL - case $n in - 1) typeset -g P9K_NORDVPN_PROTOCOL=UDP;; - 2) typeset -g P9K_NORDVPN_PROTOCOL=TCP;; - *) typeset -g P9K_NORDVPN_PROTOCOL=UNKNOWN;; - esac - else - break - fi - else - # length-delimited - (( wire == 2 )) || break - (( tag != 2 && tag != 3 )) || break - [[ -t $fd ]] || true # https://www.zsh.org/mla/workers/2020/msg00207.html - sysread -s 1 -t 0.25 val - len=$((#val)) - val= - while (( $#val < len )); do - [[ -t $fd ]] || true # https://www.zsh.org/mla/workers/2020/msg00207.html - sysread -s $(( len - $#val )) -t 0.25 'val[$#val+1]' - done - typeset -g $__p9k_nordvpn_tag[tag]=$val - fi - [[ -t $fd ]] || true # https://www.zsh.org/mla/workers/2020/msg00207.html - sysread -s 1 -t 0.25 val - done - } <&$fd - } always { - exec {fd}>&- - } -} - -# Shows the state of NordVPN connection. Works only on Linux. Can be in the following 5 states. -# -# CONNECTED: NordVPN is connected. By default shows NORDVPN_ICON as icon and country code as -# content. In addition, the following variables are set for the use by -# POWERLEVEL9K_NORDVPN_CONNECTED_VISUAL_IDENTIFIER_EXPANSION and -# POWERLEVEL9K_NORDVPN_CONNECTED_CONTENT_EXPANSION: -# -# - P9K_NORDVPN_STATUS -# - P9K_NORDVPN_PROTOCOL -# - P9K_NORDVPN_TECHNOLOGY -# - P9K_NORDVPN_IP_ADDRESS -# - P9K_NORDVPN_SERVER -# - P9K_NORDVPN_COUNTRY -# - P9K_NORDVPN_CITY -# - P9K_NORDVPN_COUNTRY_CODE -# -# The last variable is trivially derived from P9K_NORDVPN_SERVER. The rest correspond to the output -# lines of `nordvpn status` command. Example of using these variables: -# -# # Display the name of the city where VPN servers are located when connected to NordVPN. -# POWERLEVEL9K_NORDVPN_CONNECTED_CONTENT_EXPANSION='${P9K_NORDVPN_CITY}' -# -# DISCONNECTED, CONNECTING, DISCONNECTING: NordVPN is disconnected/connecting/disconnecting. By -# default shows NORDVPN_ICON as icon and FAIL_ICON as content. In state CONNECTING the same -# P9K_NORDVPN_* variables are set as in CONNECTED. In states DISCONNECTED and DISCONNECTING only -# P9K_NORDVPN_STATUS is set. Example customizations: -# -# # Hide NordVPN segment when disconnected (segments with no icon and no content are not shown). -# POWERLEVEL9K_NORDVPN_DISCONNECTED_CONTENT_EXPANSION= -# POWERLEVEL9K_NORDVPN_DISCONNECTED_VISUAL_IDENTIFIER_EXPANSION= -# -# # When NordVPN is connecting, show country code on cyan background. -# POWERLEVEL9K_NORDVPN_CONNECTING_CONTENT_EXPANSION='${P9K_NORDVPN_COUNTRY_CODE}' -# POWERLEVEL9K_NORDVPN_CONNECTING_BACKGROUND=cyan -function prompt_nordvpn() { - unset $__p9k_nordvpn_tag P9K_NORDVPN_COUNTRY_CODE - [[ -e /run/nordvpn/nordvpnd.sock ]] || return - _p9k_fetch_nordvpn_status 2>/dev/null || return - if [[ $P9K_NORDVPN_SERVER == (#b)([[:alpha:]]##)[[:digit:]]##.nordvpn.com ]]; then - typeset -g P9K_NORDVPN_COUNTRY_CODE=${${(U)match[1]}//İ/I} - fi - case $P9K_NORDVPN_STATUS in - Connected) - _p9k_prompt_segment $0_CONNECTED blue white NORDVPN_ICON 0 '' "$P9K_NORDVPN_COUNTRY_CODE" - ;; - Disconnected|Connecting|Disconnecting) - local state=${${(U)P9K_NORDVPN_STATUS}//İ/I} - _p9k_get_icon $0_$state FAIL_ICON - _p9k_prompt_segment $0_$state yellow white NORDVPN_ICON 0 '' "$_p9k__ret" - ;; - *) - return - ;; - esac -} - -_p9k_prompt_nordvpn_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[nordvpn]' -} - -function prompt_ranger() { - _p9k_prompt_segment $0 $_p9k_color1 yellow RANGER_ICON 0 '' $RANGER_LEVEL -} - -_p9k_prompt_ranger_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$RANGER_LEVEL' -} - -function instant_prompt_ranger() { - _p9k_prompt_segment prompt_ranger $_p9k_color1 yellow RANGER_ICON 1 '$RANGER_LEVEL' '$RANGER_LEVEL' -} - -function prompt_midnight_commander() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0 $_p9k_color1 yellow MIDNIGHT_COMMANDER_ICON 0 '' '' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_midnight_commander_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$MC_TMPDIR' -} - -function instant_prompt_midnight_commander() { - _p9k_prompt_segment prompt_midnight_commander $_p9k_color1 yellow MIDNIGHT_COMMANDER_ICON 0 '$MC_TMPDIR' '' -} - -function prompt_nnn() { - _p9k_prompt_segment $0 6 $_p9k_color1 NNN_ICON 0 '' $NNNLVL -} - -_p9k_prompt_nnn_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${NNNLVL:#0}' -} - -function instant_prompt_nnn() { - _p9k_prompt_segment prompt_nnn 6 $_p9k_color1 NNN_ICON 1 '${NNNLVL:#0}' '$NNNLVL' -} - -function prompt_lf() { - _p9k_prompt_segment $0 6 $_p9k_color1 LF_ICON 0 '' $LF_LEVEL -} - -_p9k_prompt_lf_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${LF_LEVEL:#0}' -} - -function instant_prompt_lf() { - _p9k_prompt_segment prompt_lf 6 $_p9k_color1 LF_ICON 1 '${LF_LEVEL:#0}' '$LF_LEVEL' -} - -function prompt_xplr() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0 6 $_p9k_color1 XPLR_ICON 0 '' '' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_xplr_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$XPLR_PID' -} - -function instant_prompt_xplr() { - _p9k_prompt_segment prompt_xplr 6 $_p9k_color1 XPLR_ICON 0 '$XPLR_PID' '' -} - -function prompt_vim_shell() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0 green $_p9k_color1 VIM_ICON 0 '' '' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_vim_shell_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$VIMRUNTIME' -} - -function instant_prompt_vim_shell() { - _p9k_prompt_segment prompt_vim_shell green $_p9k_color1 VIM_ICON 0 '$VIMRUNTIME' '' -} - -function prompt_nix_shell() { - _p9k_prompt_segment $0 4 $_p9k_color1 NIX_SHELL_ICON 0 '' "${(M)IN_NIX_SHELL:#(pure|impure)}" -} - -_p9k_prompt_nix_shell_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k_nix_shell_cond -} - -function instant_prompt_nix_shell() { - _p9k_prompt_segment prompt_nix_shell 4 $_p9k_color1 NIX_SHELL_ICON 1 "$_p9k_nix_shell_cond" '${(M)IN_NIX_SHELL:#(pure|impure)}' -} - -function prompt_terraform() { - local ws=$TF_WORKSPACE - if [[ -z $TF_WORKSPACE ]]; then - _p9k_read_word ${${TF_DATA_DIR:-.terraform}:A}/environment && ws=$_p9k__ret - fi - [[ -z $ws || $ws == default && $_POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT == 0 ]] && return - local pat class state - for pat class in "${_POWERLEVEL9K_TERRAFORM_CLASSES[@]}"; do - if [[ $ws == ${~pat} ]]; then - [[ -n $class ]] && state=_${${(U)class}//İ/I} - break - fi - done - _p9k_prompt_segment "$0$state" $_p9k_color1 blue TERRAFORM_ICON 0 '' $ws -} - -_p9k_prompt_terraform_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[terraform]' -} - -function prompt_terraform_version() { - _p9k_cached_cmd 0 '' terraform --version || return - local v=${_p9k__ret#Terraform v} - (( $#v < $#_p9k__ret )) || return - v=${v%%$'\n'*} - [[ -n $v ]] || return - _p9k_prompt_segment $0 $_p9k_color1 blue TERRAFORM_ICON 0 '' $v -} - -_p9k_prompt_terraform_version_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[terraform]' -} - -function prompt_proxy() { - local -U p=( - $all_proxy $http_proxy $https_proxy $ftp_proxy - $ALL_PROXY $HTTP_PROXY $HTTPS_PROXY $FTP_PROXY) - p=(${(@)${(@)${(@)p#*://}##*@}%%/*}) - (( $#p == 1 )) || p=("") - _p9k_prompt_segment $0 $_p9k_color1 blue PROXY_ICON 0 '' "$p[1]" -} - -_p9k_prompt_proxy_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$all_proxy$http_proxy$https_proxy$ftp_proxy$ALL_PROXY$HTTP_PROXY$HTTPS_PROXY$FTP_PROXY' -} - -function prompt_direnv() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0 $_p9k_color1 yellow DIRENV_ICON 0 '${DIRENV_DIR-}' '' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_direnv_init() { - # DIRENV_DIR is set in a precmd hook. If our hook isn't the last, DIRENV_DIR might - # still get set before prompt is expanded. - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${DIRENV_DIR-${precmd_functions[-1]:#_p9k_precmd}}' -} - -function instant_prompt_direnv() { - if [[ -n ${DIRENV_DIR:-} && $precmd_functions[-1] == _p9k_precmd ]]; then - _p9k_prompt_segment prompt_direnv $_p9k_color1 yellow DIRENV_ICON 0 '' '' - fi -} - -function _p9k_timewarrior_clear() { - [[ -z $_p9k_timewarrior_dir ]] && return - _p9k_timewarrior_dir= - _p9k_timewarrior_dir_mtime=0 - _p9k_timewarrior_file_mtime=0 - _p9k_timewarrior_file_name= - unset _p9k_timewarrior_tags - _p9k__state_dump_scheduled=1 -} - -function prompt_timewarrior() { - local -a stat - local dir=${TIMEWARRIORDB:-~/.timewarrior}/data - [[ $dir == $_p9k_timewarrior_dir ]] || _p9k_timewarrior_clear - if [[ -n $_p9k_timewarrior_file_name ]]; then - zstat -A stat +mtime -- $dir $_p9k_timewarrior_file_name 2>/dev/null || stat=() - if [[ $stat[1] == $_p9k_timewarrior_dir_mtime && $stat[2] == $_p9k_timewarrior_file_mtime ]]; then - if (( $+_p9k_timewarrior_tags )); then - _p9k_prompt_segment $0 grey 255 TIMEWARRIOR_ICON 0 '' "${_p9k_timewarrior_tags//\%/%%}" - fi - return - fi - fi - if [[ ! -d $dir ]]; then - _p9k_timewarrior_clear - return - fi - _p9k_timewarrior_dir=$dir - if [[ $stat[1] != $_p9k_timewarrior_dir_mtime ]]; then - local -a files=($dir/<->-<->.data(.N)) - if (( ! $#files )); then - if (( $#stat )) || zstat -A stat +mtime -- $dir 2>/dev/null; then - _p9k_timewarrior_dir_mtime=$stat[1] - _p9k_timewarrior_file_mtime=$stat[1] - _p9k_timewarrior_file_name=$dir # sic - unset _p9k_timewarrior_tags - _p9k__state_dump_scheduled=1 - else - _p9k_timewarrior_clear - fi - return - fi - _p9k_timewarrior_file_name=${${(AO)files}[1]} - fi - if ! zstat -A stat +mtime -- $dir $_p9k_timewarrior_file_name 2>/dev/null; then - _p9k_timewarrior_clear - return - fi - _p9k_timewarrior_dir_mtime=$stat[1] - _p9k_timewarrior_file_mtime=$stat[2] - { local tail=${${(Af)"$(<$_p9k_timewarrior_file_name)"}[-1]} } 2>/dev/null - if [[ $tail == (#b)'inc '[^\ ]##(|\ #\#(*)) ]]; then - _p9k_timewarrior_tags=${${match[2]## #}%% #} - _p9k_prompt_segment $0 grey 255 TIMEWARRIOR_ICON 0 '' "${_p9k_timewarrior_tags//\%/%%}" - else - unset _p9k_timewarrior_tags - fi - _p9k__state_dump_scheduled=1 -} - -function _p9k_prompt_timewarrior_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[timew]' -} - -function _p9k_taskwarrior_check_meta() { - [[ -n $_p9k_taskwarrior_meta_sig ]] || return - [[ -z $^_p9k_taskwarrior_meta_non_files(#qN) ]] || return - local -a stat - if (( $#_p9k_taskwarrior_meta_files )); then - zstat -A stat +mtime -- $_p9k_taskwarrior_meta_files 2>/dev/null || return - fi - [[ $_p9k_taskwarrior_meta_sig == ${(pj:\0:)stat}$'\0'$TASKRC$'\0'$TASKDATA ]] || return -} - -function _p9k_taskwarrior_init_meta() { - local last_sig=$_p9k_taskwarrior_meta_sig - { - local cfg - cfg="$(command task show data.location rc.color=0 rc._forcecolor=0 /dev/null)" || return - local lines=(${(@M)${(f)cfg}:#data.location[[:space:]]##[^[:space:]]*}) - (( $#lines == 1 )) || return - local dir=${lines[1]##data.location[[:space:]]#} - : ${dir::=$~dir} # `task` can give us path with `~`` in it; expand it - - local -a stat files=(${TASKRC:-~/.taskrc}) - _p9k_taskwarrior_meta_files=($^files(N)) - _p9k_taskwarrior_meta_non_files=(${files:|_p9k_taskwarrior_meta_files}) - if (( $#_p9k_taskwarrior_meta_files )); then - zstat -A stat +mtime -- $_p9k_taskwarrior_meta_files 2>/dev/null || stat=(-1) - fi - _p9k_taskwarrior_meta_sig=${(pj:\0:)stat}$'\0'$TASKRC$'\0'$TASKDATA - _p9k_taskwarrior_data_dir=$dir - } always { - if (( $? == 0 )); then - _p9k__state_dump_scheduled=1 - return - fi - [[ -n $last_sig ]] && _p9k__state_dump_scheduled=1 - _p9k_taskwarrior_meta_files=() - _p9k_taskwarrior_meta_non_files=() - _p9k_taskwarrior_meta_sig= - _p9k_taskwarrior_data_dir= - _p9k__taskwarrior_functional= - } -} - -function _p9k_taskwarrior_check_data() { - [[ -n $_p9k_taskwarrior_data_sig ]] || return - [[ -z $^_p9k_taskwarrior_data_non_files(#qN) ]] || return - local -a stat - if (( $#_p9k_taskwarrior_data_files )); then - zstat -A stat +mtime -- $_p9k_taskwarrior_data_files 2>/dev/null || return - fi - [[ $_p9k_taskwarrior_data_sig == ${(pj:\0:)stat}$'\0'$TASKRC$'\0'$TASKDATA ]] || return - (( _p9k_taskwarrior_next_due == 0 || _p9k_taskwarrior_next_due > EPOCHSECONDS )) || return -} - -function _p9k_taskwarrior_init_data() { - local -a stat files=($_p9k_taskwarrior_data_dir/{pending,completed}.data) - _p9k_taskwarrior_data_files=($^files(N)) - _p9k_taskwarrior_data_non_files=(${files:|_p9k_taskwarrior_data_files}) - if (( $#_p9k_taskwarrior_data_files )); then - zstat -A stat +mtime -- $_p9k_taskwarrior_data_files 2>/dev/null || stat=(-1) - _p9k_taskwarrior_data_sig=${(pj:\0:)stat}$'\0' - else - _p9k_taskwarrior_data_sig= - fi - - _p9k_taskwarrior_data_files+=($_p9k_taskwarrior_meta_files) - _p9k_taskwarrior_data_non_files+=($_p9k_taskwarrior_meta_non_files) - _p9k_taskwarrior_data_sig+=$_p9k_taskwarrior_meta_sig - - local name val - for name in PENDING OVERDUE; do - val="$(command task +$name count rc.color=0 rc._forcecolor=0 /dev/null)" || continue - [[ $val == <1-> ]] || continue - _p9k_taskwarrior_counters[$name]=$val - done - - _p9k_taskwarrior_next_due=0 - - if (( _p9k_taskwarrior_counters[PENDING] > _p9k_taskwarrior_counters[OVERDUE] )); then - local -a ts - ts=($(command task +PENDING -OVERDUE list rc.verbose=nothing rc.color=0 rc._forcecolor=0 \ - rc.report.list.labels= rc.report.list.columns=due.epoch /dev/null)) || ts=() - if (( $#ts )); then - _p9k_taskwarrior_next_due=${${(on)ts}[1]} - (( _p9k_taskwarrior_next_due > EPOCHSECONDS )) || _p9k_taskwarrior_next_due=$((EPOCHSECONDS+60)) - fi - fi - - _p9k__state_dump_scheduled=1 -} - -function prompt_taskwarrior() { - unset P9K_TASKWARRIOR_PENDING_COUNT P9K_TASKWARRIOR_OVERDUE_COUNT - if ! _p9k_taskwarrior_check_data; then - _p9k_taskwarrior_data_files=() - _p9k_taskwarrior_data_non_files=() - _p9k_taskwarrior_data_sig= - _p9k_taskwarrior_counters=() - _p9k_taskwarrior_next_due=0 - _p9k_taskwarrior_check_meta || _p9k_taskwarrior_init_meta || return - _p9k_taskwarrior_init_data - fi - (( $#_p9k_taskwarrior_counters )) || return - local text c=$_p9k_taskwarrior_counters[OVERDUE] - if [[ -n $c ]]; then - typeset -g P9K_TASKWARRIOR_OVERDUE_COUNT=$c - text+="!$c" - fi - c=$_p9k_taskwarrior_counters[PENDING] - if [[ -n $c ]]; then - typeset -g P9K_TASKWARRIOR_PENDING_COUNT=$c - [[ -n $text ]] && text+='/' - text+=$c - fi - [[ -n $text ]] || return - _p9k_prompt_segment $0 6 $_p9k_color1 TASKWARRIOR_ICON 0 '' $text -} - -function _p9k_prompt_taskwarrior_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[task]:+$_p9k__taskwarrior_functional}' -} - -prompt_wifi() { - local -i len=$#_p9k__prompt _p9k__has_upglob - _p9k_prompt_segment $0 green $_p9k_color1 WIFI_ICON 1 '$_p9k__wifi_on' '$P9K_WIFI_LAST_TX_RATE Mbps' - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_wifi_init() { - if [[ -x /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport || - -r /proc/net/wireless && -n $commands[iw] ]]; then - typeset -g _p9k__wifi_on= - typeset -g P9K_WIFI_LAST_TX_RATE= - typeset -g P9K_WIFI_SSID= - typeset -g P9K_WIFI_LINK_AUTH= - typeset -g P9K_WIFI_RSSI= - typeset -g P9K_WIFI_NOISE= - typeset -g P9K_WIFI_BARS= - _p9k__async_segments_compute+='_p9k_worker_invoke wifi _p9k_prompt_wifi_compute' - else - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${:-}' - fi -} - -_p9k_prompt_wifi_compute() { - _p9k_worker_async _p9k_prompt_wifi_async _p9k_prompt_wifi_sync -} - -_p9k_prompt_wifi_async() { - local airport=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport - local last_tx_rate ssid link_auth rssi noise bars on out line v state iface - { - if [[ -x $airport ]]; then - out="$($airport -I)" || return 0 - for line in ${${${(f)out}##[[:space:]]#}%%[[:space:]]#}; do - v=${line#*: } - case $line[1,-$#v-3] in - agrCtlRSSI) rssi=$v;; - agrCtlNoise) noise=$v;; - state) state=$v;; - lastTxRate) last_tx_rate=$v;; - link\ auth) link_auth=$v;; - SSID) ssid=$v;; - esac - done - [[ $state == running && $rssi == (0|-<->) && $noise == (0|-<->) ]] || return 0 - elif [[ -r /proc/net/wireless && -n $commands[iw] ]]; then - # Content example (https://github.com/romkatv/powerlevel10k/pull/973#issuecomment-680251804): - # - # Inter-| sta-| Quality | Discarded packets | Missed | WE - # face | tus | link level noise | nwid crypt frag retry misc | beacon | 22 - # wlp3s0: 0000 58. -52. -256 0 0 0 0 76 0 - local -a lines - lines=(${${(f)"$() && $noise == (0|-<->) ]] || return 0 - # Output example (https://github.com/romkatv/powerlevel10k/pull/973#issuecomment-680251804): - # - # Connected to 74:83:c2:be:76:da (on wlp3s0) - # SSID: DailyGrindGuest1 - # freq: 5745 - # RX: 35192066 bytes (27041 packets) - # TX: 4090471 bytes (24287 packets) - # signal: -52 dBm - # rx bitrate: 243.0 MBit/s VHT-MCS 6 40MHz VHT-NSS 2 - # tx bitrate: 240.0 MBit/s VHT-MCS 5 40MHz short GI VHT-NSS 2 - # - # bss flags: short-slot-time - # dtim period: 1 - # beacon int: 100 - lines=(${(f)"$(command iw dev $iface link)"}) || return 0 - local -a match mbegin mend - for line in $lines; do - if [[ $line == (#b)[[:space:]]#SSID:[[:space:]]##(*) ]]; then - ssid=$match[1] - elif [[ $line == (#b)[[:space:]]#'tx bitrate:'[[:space:]]##([^[:space:]]##)' MBit/s'* ]]; then - last_tx_rate=$match[1] - [[ $last_tx_rate == <->.<-> ]] && last_tx_rate=${${last_tx_rate%%0#}%.} - fi - done - [[ -n $ssid && -n $last_tx_rate ]] || return 0 - else - return 0 - fi - # https://www.speedguide.net/faq/how-to-read-rssisignal-and-snrnoise-ratings-440 - # http://www.wireless-nets.com/resources/tutorials/define_SNR_values.html - local -i snr_margin='rssi - noise' - if (( snr_margin >= 40 )); then - bars=4 - elif (( snr_margin >= 25 )); then - bars=3 - elif (( snr_margin >= 15 )); then - bars=2 - elif (( snr_margin >= 10 )); then - bars=1 - else - bars=0 - fi - on=1 - } always { - if (( ! on )); then - rssi= - noise= - ssid= - last_tx_rate= - bars= - link_auth= - fi - if [[ $_p9k__wifi_on != $on || - $P9K_WIFI_LAST_TX_RATE != $last_tx_rate || - $P9K_WIFI_SSID != $ssid || - $P9K_WIFI_LINK_AUTH != $link_auth || - $P9K_WIFI_RSSI != $rssi || - $P9K_WIFI_NOISE != $noise || - $P9K_WIFI_BARS != $bars ]]; then - _p9k__wifi_on=$on - P9K_WIFI_LAST_TX_RATE=$last_tx_rate - P9K_WIFI_SSID=$ssid - P9K_WIFI_LINK_AUTH=$link_auth - P9K_WIFI_RSSI=$rssi - P9K_WIFI_NOISE=$noise - P9K_WIFI_BARS=$bars - _p9k_print_params \ - _p9k__wifi_on \ - P9K_WIFI_LAST_TX_RATE \ - P9K_WIFI_SSID \ - P9K_WIFI_LINK_AUTH \ - P9K_WIFI_RSSI \ - P9K_WIFI_NOISE \ - P9K_WIFI_BARS - echo -E - 'reset=1' - fi - } -} - -_p9k_prompt_wifi_sync() { - if [[ -n $REPLY ]]; then - eval $REPLY - _p9k_worker_reply $REPLY - fi -} - -function _p9k_asdf_check_meta() { - [[ -n $_p9k_asdf_meta_sig ]] || return - [[ -z $^_p9k_asdf_meta_non_files(#qN) ]] || return - local -a stat - if (( $#_p9k_asdf_meta_files )); then - zstat -A stat +mtime -- $_p9k_asdf_meta_files 2>/dev/null || return - fi - [[ $_p9k_asdf_meta_sig == $ASDF_CONFIG_FILE$'\0'$ASDF_DATA_DIR$'\0'${(pj:\0:)stat} ]] || return -} - -function _p9k_asdf_init_meta() { - local last_sig=$_p9k_asdf_meta_sig - { - local -a files - local -i legacy_enabled - - _p9k_asdf_plugins=() - _p9k_asdf_file_info=() - - local cfg=${ASDF_CONFIG_FILE:-~/.asdfrc} - files+=$cfg - if [[ -f $cfg && -r $cfg ]]; then - # Config parser in adsf is very strange. - # - # This gives "yes": - # - # legacy_version_file = yes = no - # - # This gives "no": - # - # legacy_version_file = yes - # legacy_version_file = yes - # - # We do the same. - local lines=(${(@M)${(@)${(f)"$(<$cfg)"}%$'\r'}:#[[:space:]]#legacy_version_file[[:space:]]#=*}) - if [[ $#lines == 1 && ${${(s:=:)lines[1]}[2]} == [[:space:]]#yes[[:space:]]# ]]; then - legacy_enabled=1 - fi - fi - - local root=${ASDF_DATA_DIR:-~/.asdf} - files+=$root/plugins - if [[ -d $root/plugins ]]; then - local plugin - for plugin in $root/plugins/[^[:space:]]##(/N); do - files+=$root/installs/${plugin:t} - local -aU installed=($root/installs/${plugin:t}/[^[:space:]]##(/N:t) system) - _p9k_asdf_plugins[${plugin:t}]=${(j:|:)${(@b)installed}} - (( legacy_enabled )) || continue - if [[ ! -e $plugin/bin ]]; then - files+=$plugin/bin - else - local list_names=$plugin/bin/list-legacy-filenames - files+=$list_names - if [[ -x $list_names ]]; then - local parse=$plugin/bin/parse-legacy-file - local -i has_parse=0 - files+=$parse - [[ -x $parse ]] && has_parse=1 - local name - for name in ${$($list_names 2>/dev/null)%$'\r'}; do - [[ $name == (*/*|.tool-versions) ]] && continue - _p9k_asdf_file_info[$name]+="${plugin:t} $has_parse " - done - fi - fi - done - fi - - _p9k_asdf_meta_files=($^files(N)) - _p9k_asdf_meta_non_files=(${files:|_p9k_asdf_meta_files}) - - local -a stat - if (( $#_p9k_asdf_meta_files )); then - zstat -A stat +mtime -- $_p9k_asdf_meta_files 2>/dev/null || return - fi - _p9k_asdf_meta_sig=$ASDF_CONFIG_FILE$'\0'$ASDF_DATA_DIR$'\0'${(pj:\0:)stat} - _p9k__asdf_dir2files=() - _p9k_asdf_file2versions=() - } always { - if (( $? == 0 )); then - _p9k__state_dump_scheduled=1 - return - fi - [[ -n $last_sig ]] && _p9k__state_dump_scheduled=1 - _p9k_asdf_meta_files=() - _p9k_asdf_meta_non_files=() - _p9k_asdf_meta_sig= - _p9k_asdf_plugins=() - _p9k_asdf_file_info=() - _p9k__asdf_dir2files=() - _p9k_asdf_file2versions=() - } -} - -# Usage: _p9k_asdf_parse_version_file -# -# Mutates `versions` on success. -function _p9k_asdf_parse_version_file() { - local file=$1 - local is_legacy=$2 - local -a stat - zstat -A stat +mtime $file 2>/dev/null || return - if (( is_legacy )); then - local plugin has_parse - for plugin has_parse in $=_p9k_asdf_file_info[$file:t]; do - local cached=$_p9k_asdf_file2versions[$plugin:$file] - if [[ $cached == $stat[1]:* ]]; then - local v=${cached#*:} - else - if (( has_parse )); then - local v=($(${ASDF_DATA_DIR:-~/.asdf}/plugins/$plugin/bin/parse-legacy-file $file 2>/dev/null)) - else - { local v=($(<$file)) } 2>/dev/null - fi - v=(${v%$'\r'}) - v=${v[(r)$_p9k_asdf_plugins[$plugin]]:-$v[1]} - _p9k_asdf_file2versions[$plugin:$file]=$stat[1]:"$v" - _p9k__state_dump_scheduled=1 - fi - [[ -n $v ]] && : ${versions[$plugin]="$v"} - done - else - local cached=$_p9k_asdf_file2versions[:$file] - if [[ $cached == $stat[1]:* ]]; then - local file_versions=(${(0)${cached#*:}}) - else - local file_versions=() - { local lines=(${(@)${(@)${(f)"$(<$file)"}%$'\r'}/\#*}) } 2>/dev/null - local line - for line in $lines; do - local words=($=line) - (( $#words > 1 )) || continue - local installed=$_p9k_asdf_plugins[$words[1]] - [[ -n $installed ]] || continue - file_versions+=($words[1] ${${words:1}[(r)$installed]:-$words[2]}) - done - _p9k_asdf_file2versions[:$file]=$stat[1]:${(pj:\0:)file_versions} - _p9k__state_dump_scheduled=1 - fi - local plugin version - for plugin version in $file_versions; do - : ${versions[$plugin]=$version} - done - fi - return 0 -} - -function prompt_asdf() { - _p9k_asdf_check_meta || _p9k_asdf_init_meta || return - - local -A versions - local -a stat - local -i has_global - local dirs=($_p9k__parent_dirs) - local mtimes=($_p9k__parent_mtimes) - if [[ $dirs[-1] != ~ ]]; then - zstat -A stat +mtime ~ 2>/dev/null || return - dirs+=(~) - mtimes+=($stat[1]) - fi - - local elem - for elem in ${(@)${:-{1..$#dirs}}/(#m)*/${${:-$MATCH:$_p9k__asdf_dir2files[$dirs[MATCH]]}#$MATCH:$mtimes[MATCH]:}}; do - if [[ $elem == *:* ]]; then - local dir=$dirs[${elem%%:*}] - zstat -A stat +mtime $dir 2>/dev/null || return - local files=($dir/.tool-versions(N) $dir/${(k)^_p9k_asdf_file_info}(N)) - _p9k__asdf_dir2files[$dir]=$stat[1]:${(pj:\0:)files} - else - local files=(${(0)elem}) - fi - if [[ ${files[1]:h} == ~ ]]; then - has_global=1 - local -A local_versions=(${(kv)versions}) - versions=() - fi - local file - for file in $files; do - [[ $file == */.tool-versions ]] - _p9k_asdf_parse_version_file $file $? || return - done - done - - if (( ! has_global )); then - has_global=1 - local -A local_versions=(${(kv)versions}) - versions=() - fi - - if [[ -r $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME ]]; then - _p9k_asdf_parse_version_file $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME 0 || return - fi - - local plugin - for plugin in ${(k)_p9k_asdf_plugins}; do - local upper=${${(U)plugin//-/_}//İ/I} - if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_SOURCES] )); then - local sources=(${(P)${:-_POWERLEVEL9K_ASDF_${upper}_SOURCES}}) - else - local sources=($_POWERLEVEL9K_ASDF_SOURCES) - fi - - local version="${(P)${:-ASDF_${upper}_VERSION}}" - if [[ -n $version ]]; then - (( $sources[(I)shell] )) || continue - else - version=$local_versions[$plugin] - if [[ -n $version ]]; then - (( $sources[(I)local] )) || continue - else - version=$versions[$plugin] - [[ -n $version ]] || continue - (( $sources[(I)global] )) || continue - fi - fi - - if [[ $version == $versions[$plugin] ]]; then - if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_PROMPT_ALWAYS_SHOW] )); then - (( _POWERLEVEL9K_ASDF_${upper}_PROMPT_ALWAYS_SHOW )) || continue - else - (( _POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW )) || continue - fi - fi - - if [[ $version == system ]]; then - if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_SHOW_SYSTEM] )); then - (( _POWERLEVEL9K_ASDF_${upper}_SHOW_SYSTEM )) || continue - else - (( _POWERLEVEL9K_ASDF_SHOW_SYSTEM )) || continue - fi - fi - - _p9k_get_icon $0_$upper ${upper}_ICON $plugin - _p9k_prompt_segment $0_$upper green $_p9k_color1 $'\1'$_p9k__ret 0 '' ${version//\%/%%} - done -} - -_p9k_prompt_asdf_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='${commands[asdf]:-${${+functions[asdf]}:#0}}' -} - -_p9k_haskell_stack_version() { - if ! _p9k_cache_stat_get $0 $1 ${STACK_ROOT:-~/.stack}/{pantry/pantry.sqlite3,stack.sqlite3}; then - local v - v="$(STACK_YAML=$1 stack \ - --silent \ - --no-install-ghc \ - --skip-ghc-check \ - --no-terminal \ - --color=never \ - --lock-file=read-only \ - query compiler actual)" || v= - _p9k_cache_stat_set "$v" - fi - _p9k__ret=$_p9k__cache_val[1] -} - -prompt_haskell_stack() { - if [[ -n $STACK_YAML ]]; then - (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)shell]} )) || return - _p9k_haskell_stack_version $STACK_YAML - else - (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local|global]} )) || return - if _p9k_upglob stack.yaml -.; then - (( _POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )) || return - (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)global]} )) || return - _p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml - else - local -i idx=$? - (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local]} )) || return - _p9k_haskell_stack_version $_p9k__parent_dirs[idx]/stack.yaml - fi - fi - - [[ -n $_p9k__ret ]] || return - - local v=$_p9k__ret - - if (( !_POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )); then - _p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml - [[ $v == $_p9k__ret ]] && return - fi - - _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" 'HASKELL_ICON' 0 '' "${v//\%/%%}" -} - -_p9k_prompt_haskell_stack_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[stack]' -} - -################################################################ -# CPU Architecture -prompt_cpu_arch() { - local -i len=$#_p9k__prompt _p9k__has_upglob - - local state text - if _p9k_cache_ephemeral_get $0; then - state=$_p9k__cache_val[1] - text=$_p9k__cache_val[2] - else - local cmd - for cmd in machine arch; do - (( $+commands[$cmd] )) || continue - if text=$(command -- $cmd) 2>/dev/null && [[ $text == [a-zA-Z][a-zA-Z0-9_]# ]]; then - break - else - text= - fi - done - state=_${${(U)text}//İ/I} - _p9k_cache_ephemeral_set "$state" "$text" - fi - if [[ -n $text ]]; then - _p9k_prompt_segment "$0$state" "yellow" "$_p9k_color1" 'ARCH_ICON' 0 '' "$text" - fi - - (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] -} - -_p9k_prompt_cpu_arch_init() { - typeset -g "_p9k__segment_cond_${_p9k__prompt_side}[_p9k__segment_index]"='$commands[machine]$commands[arch]' -} - -# Use two preexec hooks to survive https://github.com/MichaelAquilina/zsh-you-should-use with -# YSU_HARDCORE=1. See https://github.com/romkatv/powerlevel10k/issues/427. -_p9k_preexec1() { - _p9k_restore_special_params - unset __p9k_trapint - trap - INT -} - -_p9k_preexec2() { - typeset -g _p9k__preexec_cmd=$2 - _p9k__timer_start=EPOCHREALTIME - P9K_TTY=old - (( ! $+_p9k__iterm_cmd )) || _p9k_iterm2_preexec -} - -function _p9k_prompt_net_iface_init() { - typeset -g _p9k__public_ip_vpn= - typeset -g _p9k__public_ip_not_vpn= - typeset -g P9K_IP_IP= - typeset -g P9K_IP_INTERFACE= - typeset -g P9K_IP_TX_BYTES= - typeset -g P9K_IP_RX_BYTES= - typeset -g P9K_IP_TX_BYTES_DELTA= - typeset -g P9K_IP_RX_BYTES_DELTA= - typeset -g P9K_IP_TX_RATE= - typeset -g P9K_IP_RX_RATE= - typeset -g _p9__ip_timestamp= - typeset -g _p9k__vpn_ip_ips=() - [[ -z $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]] && _p9k__public_ip_not_vpn=1 - _p9k__async_segments_compute+='_p9k_worker_invoke net_iface _p9k_prompt_net_iface_compute' -} - -# reads `iface2ip` and sets `ifaces` and `ips` -function _p9k_prompt_net_iface_match() { - local iface_regex="^($1)\$" iface ip - ips=() - ifaces=() - for iface ip in "${(@)iface2ip}"; do - [[ $iface =~ $iface_regex ]] || continue - ifaces+=$iface - ips+=$ip - done - return $(($#ips == 0)) -} - -function _p9k_prompt_net_iface_compute() { - _p9k_worker_async _p9k_prompt_net_iface_async _p9k_prompt_net_iface_sync -} - -function _p9k_prompt_net_iface_async() { - # netstat -inbI en0 - local iface ip line var - typeset -a iface2ip ips ifaces - if (( $+commands[ip] )) && [[ $+commands[ifconfig] == 0 || $OSTYPE == linux* ]]; then - for line in ${(f)"$(command ip -4 a show 2>/dev/null)"}; do - if [[ $line == (#b)<->:[[:space:]]##([^:]##):[[:space:]]##\<([^\>]#)\>* ]]; then - [[ ,$match[2], == *,UP,* ]] && iface=$match[1] || iface= - elif [[ -n $iface && $line == (#b)[[:space:]]##inet[[:space:]]##([0-9.]##)* ]]; then - iface2ip+=($iface $match[1]) - iface= - fi - done - elif (( $+commands[ifconfig] )); then - for line in ${(f)"$(command ifconfig 2>/dev/null)"}; do - if [[ $line == (#b)([^[:space:]]##):[[:space:]]##flags=([[:xdigit:]]##)'<'* ]]; then - [[ $match[2] == *[13579bdfBDF] ]] && iface=$match[1] || iface= - elif [[ -n $iface && $line == (#b)[[:space:]]##inet[[:space:]]##([0-9.]##)* ]]; then - iface2ip+=($iface $match[1]) - iface= - fi - done - fi - - if _p9k_prompt_net_iface_match $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE; then - local public_ip_vpn=1 - local public_ip_not_vpn= - else - local public_ip_vpn= - local public_ip_not_vpn=1 - fi - if _p9k_prompt_net_iface_match $_POWERLEVEL9K_IP_INTERFACE; then - local ip_ip=$ips[1] ip_interface=$ifaces[1] ip_timestamp=$EPOCHREALTIME - local ip_tx_bytes ip_rx_bytes ip_tx_rate ip_rx_rate - if [[ $_p9k_os == (Linux|Android) ]]; then - if [[ -r /sys/class/net/$ifaces[1]/statistics/tx_bytes && - -r /sys/class/net/$ifaces[1]/statistics/rx_bytes ]]; then - _p9k_read_file /sys/class/net/$ifaces[1]/statistics/tx_bytes && - [[ $_p9k__ret == <-> ]] && ip_tx_bytes=$_p9k__ret && - _p9k_read_file /sys/class/net/$ifaces[1]/statistics/rx_bytes && - [[ $_p9k__ret == <-> ]] && ip_rx_bytes=$_p9k__ret || { ip_tx_bytes=; ip_rx_bytes=; } - fi - elif [[ $_p9k_os == (BSD|OSX) && $+commands[netstat] == 1 ]]; then - local -a lines - if lines=(${(f)"$(netstat -inbI $ifaces[1])"}); then - local header=($=lines[1]) - local -i rx_idx=$header[(Ie)Ibytes] - local -i tx_idx=$header[(Ie)Obytes] - if (( rx_idx && tx_idx )); then - ip_tx_bytes=0 - ip_rx_bytes=0 - for line in ${lines:1}; do - (( ip_rx_bytes += ${line[(w)rx_idx]} )) - (( ip_tx_bytes += ${line[(w)tx_idx]} )) - done - fi - fi - fi - if [[ -n $ip_rx_bytes ]]; then - if [[ $ip_ip == $P9K_IP_IP && $ifaces[1] == $P9K_IP_INTERFACE ]]; then - local -F t='ip_timestamp - _p9__ip_timestamp' - if (( t <= 0 )); then - ip_tx_rate=${P9K_IP_TX_RATE:-0 B/s} - ip_rx_rate=${P9K_IP_RX_RATE:-0 B/s} - else - _p9k_human_readable_bytes $(((ip_tx_bytes - P9K_IP_TX_BYTES) / t)) - [[ $_p9k__ret == *B ]] && ip_tx_rate="$_p9k__ret[1,-2] B/s" || ip_tx_rate="$_p9k__ret[1,-2] $_p9k__ret[-1]iB/s" - _p9k_human_readable_bytes $(((ip_rx_bytes - P9K_IP_RX_BYTES) / t)) - [[ $_p9k__ret == *B ]] && ip_rx_rate="$_p9k__ret[1,-2] B/s" || ip_rx_rate="$_p9k__ret[1,-2] $_p9k__ret[-1]iB/s" - fi - else - ip_tx_rate='0 B/s' - ip_rx_rate='0 B/s' - fi - fi - else - local ip_ip= ip_interface= ip_tx_bytes= ip_rx_bytes= ip_tx_rate= ip_rx_rate= ip_timestamp= - fi - if _p9k_prompt_net_iface_match $_POWERLEVEL9K_VPN_IP_INTERFACE; then - if (( _POWERLEVEL9K_VPN_IP_SHOW_ALL )); then - local vpn_ip_ips=($ips) - else - local vpn_ip_ips=($ips[1]) - fi - else - local vpn_ip_ips=() - fi - [[ $_p9k__public_ip_vpn == $public_ip_vpn && - $_p9k__public_ip_not_vpn == $public_ip_not_vpn && - $P9K_IP_IP == $ip_ip && - $P9K_IP_INTERFACE == $ip_interface && - $P9K_IP_TX_BYTES == $ip_tx_bytes && - $P9K_IP_RX_BYTES == $ip_rx_bytes && - $P9K_IP_TX_RATE == $ip_tx_rate && - $P9K_IP_RX_RATE == $ip_rx_rate && - "$_p9k__vpn_ip_ips" == "$vpn_ip_ips" ]] && return 1 - if [[ "$_p9k__vpn_ip_ips" == "$vpn_ip_ips" ]]; then - echo -n 0 - else - echo -n 1 - fi - _p9k__public_ip_vpn=$public_ip_vpn - _p9k__public_ip_not_vpn=$public_ip_not_vpn - P9K_IP_IP=$ip_ip - P9K_IP_INTERFACE=$ip_interface - if [[ -n $ip_tx_bytes && -n $P9K_IP_TX_BYTES ]]; then - P9K_IP_TX_BYTES_DELTA=$((ip_tx_bytes - P9K_IP_TX_BYTES)) - else - P9K_IP_TX_BYTES_DELTA= - fi - if [[ -n $ip_rx_bytes && -n $P9K_IP_RX_BYTES ]]; then - P9K_IP_RX_BYTES_DELTA=$((ip_rx_bytes - P9K_IP_RX_BYTES)) - else - P9K_IP_RX_BYTES_DELTA= - fi - P9K_IP_TX_BYTES=$ip_tx_bytes - P9K_IP_RX_BYTES=$ip_rx_bytes - P9K_IP_TX_RATE=$ip_tx_rate - P9K_IP_RX_RATE=$ip_rx_rate - _p9__ip_timestamp=$ip_timestamp - _p9k__vpn_ip_ips=($vpn_ip_ips) - _p9k_print_params \ - _p9k__public_ip_vpn \ - _p9k__public_ip_not_vpn \ - P9K_IP_IP \ - P9K_IP_INTERFACE \ - P9K_IP_TX_BYTES \ - P9K_IP_RX_BYTES \ - P9K_IP_TX_BYTES_DELTA \ - P9K_IP_RX_BYTES_DELTA \ - P9K_IP_TX_RATE \ - P9K_IP_RX_RATE \ - _p9__ip_timestamp \ - _p9k__vpn_ip_ips - echo -E - 'reset=1' -} - -_p9k_prompt_net_iface_sync() { - local -i vpn_ip_changed=$REPLY[1] - REPLY[1]="" - eval $REPLY - (( vpn_ip_changed )) && REPLY+='; _p9k_vpn_ip_render' - _p9k_worker_reply $REPLY -} - -function _p9k_set_prompt() { - local -i _p9k__vcs_called - - PROMPT= - RPROMPT= - [[ $1 == instant_ ]] || PROMPT+='${$((_p9k_on_expand()))+}%{${_p9k__raw_msg-}${_p9k__raw_msg::=}%}' - PROMPT+=$_p9k_prompt_prefix_left - - local -i _p9k__has_upglob - - local -i left_idx=1 right_idx=1 num_lines=$#_p9k_line_segments_left - for _p9k__line_index in {1..$num_lines}; do - local right= - if (( !_POWERLEVEL9K_DISABLE_RPROMPT )); then - _p9k__dir= - _p9k__prompt= - _p9k__segment_index=right_idx - _p9k__prompt_side=right - if [[ $1 == instant_ ]]; then - for _p9k__segment_name in ${${(0)_p9k_line_segments_right[_p9k__line_index]}%_joined}; do - if (( $+functions[instant_prompt_$_p9k__segment_name] )); then - local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN - if [[ $_p9k__cwd != ${(P)~disabled} ]]; then - local -i len=$#_p9k__prompt - _p9k__non_hermetic_expansion=0 - instant_prompt_$_p9k__segment_name - if (( _p9k__non_hermetic_expansion )); then - _p9k__prompt[len+1,-1]= - fi - fi - fi - ((++_p9k__segment_index)) - done - else - for _p9k__segment_name in ${${(0)_p9k_line_segments_right[_p9k__line_index]}%_joined}; do - local cond=$_p9k__segment_cond_right[_p9k__segment_index] - if [[ -z $cond || -n ${(e)cond} ]]; then - local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN - if [[ $_p9k__cwd != ${(P)~disabled} ]]; then - local val=$_p9k__segment_val_right[_p9k__segment_index] - if [[ -n $val ]]; then - _p9k__prompt+=$val - else - if [[ $_p9k__segment_name == custom_* ]]; then - _p9k_custom_prompt $_p9k__segment_name[8,-1] - elif (( $+functions[prompt_$_p9k__segment_name] )); then - prompt_$_p9k__segment_name - fi - fi - fi - fi - ((++_p9k__segment_index)) - done - fi - _p9k__prompt=${${_p9k__prompt//$' %{\b'/'%{%G'}//$' \b'} - right_idx=_p9k__segment_index - if [[ -n $_p9k__prompt || $_p9k_line_never_empty_right[_p9k__line_index] == 1 ]]; then - right=$_p9k_line_prefix_right[_p9k__line_index]$_p9k__prompt$_p9k_line_suffix_right[_p9k__line_index] - fi - fi - unset _p9k__dir - _p9k__prompt=$_p9k_line_prefix_left[_p9k__line_index] - _p9k__segment_index=left_idx - _p9k__prompt_side=left - if [[ $1 == instant_ ]]; then - for _p9k__segment_name in ${${(0)_p9k_line_segments_left[_p9k__line_index]}%_joined}; do - if (( $+functions[instant_prompt_$_p9k__segment_name] )); then - local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN - if [[ $_p9k__cwd != ${(P)~disabled} ]]; then - local -i len=$#_p9k__prompt - _p9k__non_hermetic_expansion=0 - instant_prompt_$_p9k__segment_name - if (( _p9k__non_hermetic_expansion )); then - _p9k__prompt[len+1,-1]= - fi - fi - fi - ((++_p9k__segment_index)) - done - else - for _p9k__segment_name in ${${(0)_p9k_line_segments_left[_p9k__line_index]}%_joined}; do - local cond=$_p9k__segment_cond_left[_p9k__segment_index] - if [[ -z $cond || -n ${(e)cond} ]]; then - local disabled=_POWERLEVEL9K_${${(U)_p9k__segment_name}//İ/I}_DISABLED_DIR_PATTERN - if [[ $_p9k__cwd != ${(P)~disabled} ]]; then - local val=$_p9k__segment_val_left[_p9k__segment_index] - if [[ -n $val ]]; then - _p9k__prompt+=$val - else - if [[ $_p9k__segment_name == custom_* ]]; then - _p9k_custom_prompt $_p9k__segment_name[8,-1] - elif (( $+functions[prompt_$_p9k__segment_name] )); then - prompt_$_p9k__segment_name - fi - fi - fi - fi - ((++_p9k__segment_index)) - done - fi - _p9k__prompt=${${_p9k__prompt//$' %{\b'/'%{%G'}//$' \b'} - left_idx=_p9k__segment_index - _p9k__prompt+=$_p9k_line_suffix_left[_p9k__line_index] - if (( $+_p9k__dir || (_p9k__line_index != num_lines && $#right) )); then - _p9k__prompt='${${:-${_p9k__d::=0}${_p9k__rprompt::='$right'}${_p9k__lprompt::='$_p9k__prompt'}}+}' - _p9k__prompt+=$_p9k_gap_pre - if (( $+_p9k__dir )); then - if (( _p9k__line_index == num_lines && (_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS > 0 || _POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT > 0) )); then - local a=$_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS - local f=$((0.01*_POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT))'*_p9k__clm' - _p9k__prompt+="\${\${_p9k__h::=$((($a<$f)*$f+($a>=$f)*$a))}+}" - else - _p9k__prompt+='${${_p9k__h::=0}+}' - fi - if [[ $_POWERLEVEL9K_DIR_MAX_LENGTH == <->('%'|) ]]; then - local lim= - if [[ $_POWERLEVEL9K_DIR_MAX_LENGTH[-1] == '%' ]]; then - lim="$_p9k__dir_len-$((0.01*$_POWERLEVEL9K_DIR_MAX_LENGTH[1,-2]))*_p9k__clm" - else - lim=$((_p9k__dir_len-_POWERLEVEL9K_DIR_MAX_LENGTH)) - ((lim <= 0)) && lim= - fi - if [[ -n $lim ]]; then - _p9k__prompt+='${${${$((_p9k__h<_p9k__m+'$lim')):#1}:-${_p9k__h::=$((_p9k__m+'$lim'))}}+}' - fi - fi - _p9k__prompt+='${${_p9k__d::=$((_p9k__m-_p9k__h))}+}' - _p9k__prompt+='${_p9k__lprompt/\%\{d\%\}*\%\{d\%\}/${_p9k__'$_p9k__line_index'ldir-'$_p9k__dir'}}' - _p9k__prompt+='${${_p9k__m::=$((_p9k__d+_p9k__h))}+}' - else - _p9k__prompt+='${_p9k__lprompt}' - fi - ((_p9k__line_index != num_lines && $#right)) && _p9k__prompt+=$_p9k_line_gap_post[_p9k__line_index] - fi - if (( _p9k__line_index == num_lines )); then - [[ -n $right ]] && RPROMPT=$_p9k_prompt_prefix_right$right$_p9k_prompt_suffix_right - _p9k__prompt='${_p9k__'$_p9k__line_index'-'$_p9k__prompt'}'$_p9k_prompt_suffix_left - [[ $1 == instant_ ]] || PROMPT+=$_p9k__prompt - else - [[ -n $right ]] || _p9k__prompt+=$'\n' - PROMPT+='${_p9k__'$_p9k__line_index'-'$_p9k__prompt'}' - fi - done - - _p9k__prompt_side= - (( $#_p9k_cache < _POWERLEVEL9K_MAX_CACHE_SIZE )) || _p9k_cache=() - (( $#_p9k__cache_ephemeral < _POWERLEVEL9K_MAX_CACHE_SIZE )) || _p9k__cache_ephemeral=() - - [[ -n $RPROMPT ]] || unset RPROMPT -} - -_p9k_set_instant_prompt() { - local saved_prompt=$PROMPT - local saved_rprompt=$RPROMPT - _p9k_set_prompt instant_ - typeset -g _p9k__instant_prompt=$PROMPT$'\x1f'$_p9k__prompt$'\x1f'$RPROMPT - PROMPT=$saved_prompt - RPROMPT=$saved_rprompt - [[ -n $RPROMPT ]] || unset RPROMPT -} - -typeset -gri __p9k_instant_prompt_version=47 - -_p9k_dump_instant_prompt() { - local user=${(%):-%n} - local root_dir=${__p9k_dump_file:h} - local prompt_dir=${root_dir}/p10k-$user - local root_file=$root_dir/p10k-instant-prompt-$user.zsh - local prompt_file=$prompt_dir/prompt-${#_p9k__cwd} - [[ -d $prompt_dir ]] || mkdir -p $prompt_dir || return - [[ -w $root_dir && -w $prompt_dir ]] || return - - if [[ ! -e $root_file ]]; then - local tmp=$root_file.tmp.$$ - local -i fd - sysopen -a -m 600 -o creat,trunc -u fd -- $tmp || return - { - [[ $TERM == (screen*|tmux*) ]] && local screen='-n' || local screen='-z' - local -a display_v=("${_p9k__display_v[@]}") - local -i i - for ((i = 6; i <= $#display_v; i+=2)); do display_v[i]=show; done - display_v[2]=hide - display_v[4]=hide - local gitstatus_dir=${${_POWERLEVEL9K_GITSTATUS_DIR:A}:-${__p9k_root_dir}/gitstatus} - local gitstatus_header - if [[ -r $gitstatus_dir/install.info ]]; then - IFS= read -r gitstatus_header <$gitstatus_dir/install.info || return - fi - >&$fd print -r -- '[[ -t 0 && -t 1 && -t 2 && -o interactive && -o zle && -o no_xtrace ]] && - ! (( ${+__p9k_instant_prompt_disabled} || ZSH_SUBSHELL || ${+ZSH_SCRIPT} || ${+ZSH_EXECUTION_STRING} )) || return 0' - >&$fd print -r -- "() { - $__p9k_intro_no_locale - typeset -gi __p9k_instant_prompt_disabled=1 - [[ \$ZSH_VERSION == ${(q)ZSH_VERSION} && \$ZSH_PATCHLEVEL == ${(q)ZSH_PATCHLEVEL} && - $screen \${(M)TERM:#(screen*|tmux*)} && - \${#\${(M)VTE_VERSION:#(<1-4602>|4801)}} == "${#${(M)VTE_VERSION:#(<1-4602>|4801)}}" && - \$POWERLEVEL9K_DISABLE_INSTANT_PROMPT != 'true' && - \$POWERLEVEL9K_INSTANT_PROMPT != 'off' ]] || return - typeset -g __p9k_instant_prompt_param_sig=${(q+)_p9k__param_sig} - local gitstatus_dir=${(q)gitstatus_dir} - local gitstatus_header=${(q)gitstatus_header} - local -i ZLE_RPROMPT_INDENT=${ZLE_RPROMPT_INDENT:-1} - local PROMPT_EOL_MARK=${(q)PROMPT_EOL_MARK-%B%S%#%s%b} - [[ -n \$SSH_CLIENT || -n \$SSH_TTY || -n \$SSH_CONNECTION ]] && local ssh=1 || local ssh=0 - local cr=\$'\r' lf=\$'\n' esc=\$'\e[' rs=$'\x1e' us=$'\x1f' - local -i height=${_POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES-1} - local prompt_dir=${(q)prompt_dir}" - if (( ! ${+_POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES} )); then - >&$fd print -r -- ' - (( _z4h_can_save_restore_screen == 1 )) && height=0' - fi - >&$fd print -r -- ' - local real_gitstatus_header - if [[ -r $gitstatus_dir/install.info ]]; then - IFS= read -r real_gitstatus_header <$gitstatus_dir/install.info || real_gitstatus_header=borked - fi - [[ $real_gitstatus_header == $gitstatus_header ]] || return - zmodload zsh/langinfo zsh/terminfo zsh/system || return - if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]]; then - local loc_cmd=$commands[locale] - [[ -z $loc_cmd ]] && loc_cmd='${(q)commands[locale]}' - if [[ -x $loc_cmd ]]; then - local -a locs - if locs=(${(@M)$(locale -a 2>/dev/null):#*.(utf|UTF)(-|)8}) && (( $#locs )); then - local loc=${locs[(r)(#i)C.UTF(-|)8]:-${locs[(r)(#i)en_US.UTF(-|)8]:-$locs[1]}} - [[ -n $LC_ALL ]] && local LC_ALL=$loc || local LC_CTYPE=$loc - fi - fi - fi - (( terminfo[colors] == '${terminfo[colors]:-0}' )) || return - (( $+terminfo[cuu] && $+terminfo[cuf] && $+terminfo[ed] && $+terminfo[sc] && $+terminfo[rc] )) || return - local pwd=${(%):-%/} - [[ $pwd == /* ]] || return - local prompt_file=$prompt_dir/prompt-${#pwd} - local key=$pwd:$ssh:${(%):-%#} - local content - if [[ ! -e $prompt_file ]]; then - typeset -gi __p9k_instant_prompt_sourced='$__p9k_instant_prompt_version' - return 1 - fi - { content="$(<$prompt_file)" } 2>/dev/null || return - local tail=${content##*$rs$key$us} - if (( ${#tail} == ${#content} )); then - typeset -gi __p9k_instant_prompt_sourced='$__p9k_instant_prompt_version' - return 1 - fi - local _p9k__ipe - local P9K_PROMPT=instant - if [[ -z $P9K_TTY || $P9K_TTY == old && -n ${_P9K_TTY:#$TTY} ]]; then' - if (( _POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS < 0 )); then - >&$fd print -r -- ' typeset -gx P9K_TTY=new' - else - >&$fd print -r -- ' - typeset -gx P9K_TTY=old - zmodload -F zsh/stat b:zstat || return - zmodload zsh/datetime || return - local -a stat - if zstat -A stat +ctime -- $TTY 2>/dev/null && - (( EPOCHREALTIME - stat[1] < '$_POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS' )); then - P9K_TTY=new - fi' - fi - >&$fd print -r -- ' fi - typeset -gx _P9K_TTY=$TTY - local -i _p9k__empty_line_i=3 _p9k__ruler_i=3 - local -A _p9k_display_k=('${(j: :)${(@q)${(kv)_p9k_display_k}}}') - local -a _p9k__display_v=('${(j: :)${(@q)display_v}}') - function p10k() { - '$__p9k_intro' - [[ $1 == display ]] || return - shift - local -i k dump - local opt prev new pair list name var - while getopts ":ha" opt; do - case $opt in - a) dump=1;; - h) return 0;; - ?) return 1;; - esac - done - if (( dump )); then - reply=() - shift $((OPTIND-1)) - (( ARGC )) || set -- "*" - for opt; do - for k in ${(u@)_p9k_display_k[(I)$opt]:/(#m)*/$_p9k_display_k[$MATCH]}; do - reply+=($_p9k__display_v[k,k+1]) - done - done - return 0 - fi - for opt in "${@:$OPTIND}"; do - pair=(${(s:=:)opt}) - list=(${(s:,:)${pair[2]}}) - if [[ ${(b)pair[1]} == $pair[1] ]]; then - local ks=($_p9k_display_k[$pair[1]]) - else - local ks=(${(u@)_p9k_display_k[(I)$pair[1]]:/(#m)*/$_p9k_display_k[$MATCH]}) - fi - for k in $ks; do - if (( $#list == 1 )); then - [[ $_p9k__display_v[k+1] == $list[1] ]] && continue - new=$list[1] - else - new=${list[list[(I)$_p9k__display_v[k+1]]+1]:-$list[1]} - [[ $_p9k__display_v[k+1] == $new ]] && continue - fi - _p9k__display_v[k+1]=$new - name=$_p9k__display_v[k] - if [[ $name == (empty_line|ruler) ]]; then - var=_p9k__${name}_i - [[ $new == hide ]] && typeset -gi $var=3 || unset $var - elif [[ $name == (#b)(<->)(*) ]]; then - var=_p9k__${match[1]}${${${${match[2]//\/}/#left/l}/#right/r}/#gap/g} - [[ $new == hide ]] && typeset -g $var= || unset $var - fi - done - done - }' - if (( _POWERLEVEL9K_PROMPT_ADD_NEWLINE )); then - >&$fd print -r -- ' [[ $P9K_TTY == old ]] && { unset _p9k__empty_line_i; _p9k__display_v[2]=print }' - fi - if (( _POWERLEVEL9K_SHOW_RULER )); then - >&$fd print -r -- '[[ $P9K_TTY == old ]] && { unset _p9k__ruler_i; _p9k__display_v[4]=print }' - fi - if (( $+functions[p10k-on-init] )); then - >&$fd print -r -- ' - p10k-on-init() { '$functions[p10k-on-init]' }' - fi - if (( $+functions[p10k-on-pre-prompt] )); then - >&$fd print -r -- ' - p10k-on-pre-prompt() { '$functions[p10k-on-pre-prompt]' }' - fi - if (( $+functions[p10k-on-post-prompt] )); then - >&$fd print -r -- ' - p10k-on-post-prompt() { '$functions[p10k-on-post-prompt]' }' - fi - if (( $+functions[p10k-on-post-widget] )); then - >&$fd print -r -- ' - p10k-on-post-widget() { '$functions[p10k-on-post-widget]' }' - fi - if (( $+functions[p10k-on-init] )); then - >&$fd print -r -- ' - p10k-on-init' - fi - local pat idx var - for pat idx var in $_p9k_show_on_command; do - >&$fd print -r -- " - local $var= - _p9k__display_v[$idx]=hide" - done - if (( $+functions[p10k-on-pre-prompt] )); then - >&$fd print -r -- ' - p10k-on-pre-prompt' - fi - if (( $+functions[p10k-on-init] )); then - >&$fd print -r -- ' - unfunction p10k-on-init' - fi - if (( $+functions[p10k-on-pre-prompt] )); then - >&$fd print -r -- ' - unfunction p10k-on-pre-prompt' - fi - if (( $+functions[p10k-on-post-prompt] )); then - >&$fd print -r -- ' - unfunction p10k-on-post-prompt' - fi - if (( $+functions[p10k-on-post-widget] )); then - >&$fd print -r -- ' - unfunction p10k-on-post-widget' - fi - >&$fd print -r -- ' - () { -'$functions[_p9k_init_toolbox]' - } - trap "unset -m _p9k__\*; unfunction p10k" EXIT - local -a _p9k_t=("${(@ps:$us:)${tail%%$rs*}}") - if [[ $+VTE_VERSION == 1 || $TERM_PROGRAM == Hyper ]] && (( $+commands[stty] )); then - if [[ $TERM_PROGRAM == Hyper ]]; then - local bad_lines=40 bad_columns=100 - else - local bad_lines=24 bad_columns=80 - fi - if (( LINES == bad_lines && COLUMNS == bad_columns )); then - zmodload -F zsh/stat b:zstat || return - zmodload zsh/datetime || return - local -a tty_ctime - if ! zstat -A tty_ctime +ctime -- $TTY 2>/dev/null || (( tty_ctime[1] + 2 > EPOCHREALTIME )); then - local -F deadline=$((EPOCHREALTIME+0.025)) - local tty_size - while true; do - if (( EPOCHREALTIME > deadline )) || ! tty_size="$(command stty size 2>/dev/null)" || [[ $tty_size != <->" "<-> ]]; then - (( $+_p9k__ruler_i )) || local -i _p9k__ruler_i=1 - local _p9k__g= _p9k__'$#_p9k_line_segments_right'r= _p9k__'$#_p9k_line_segments_right'r_frame= - break - fi - if [[ $tty_size != "$bad_lines $bad_columns" ]]; then - local lines_columns=(${=tty_size}) - local LINES=$lines_columns[1] - local COLUMNS=$lines_columns[2] - break - fi - done - fi - fi - fi' - (( __p9k_ksh_arrays )) && >&$fd print -r -- ' setopt ksh_arrays' - (( __p9k_sh_glob )) && >&$fd print -r -- ' setopt sh_glob' - >&$fd print -r -- ' typeset -ga __p9k_used_instant_prompt=("${(@e)_p9k_t[-3,-1]}")' - (( __p9k_ksh_arrays )) && >&$fd print -r -- ' unsetopt ksh_arrays' - (( __p9k_sh_glob )) && >&$fd print -r -- ' unsetopt sh_glob' - >&$fd print -r -- ' - local -i prompt_height=${#${__p9k_used_instant_prompt[1]//[^$lf]}} - (( height += prompt_height )) - local _p9k__ret - function _p9k_prompt_length() { - local -i COLUMNS=1024 - local -i x y=${#1} m - if (( y )); then - while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do - x=y - (( y *= 2 )) - done - while (( y > x + 1 )); do - (( m = x + (y - x) / 2 )) - (( ${${(%):-$1%$m(l.x.y)}[-1]} = m )) - done - fi - typeset -g _p9k__ret=$x - } - local out=${(%):-%b%k%f%s%u} - if [[ $P9K_TTY == old && ( $+VTE_VERSION == 0 && $TERM_PROGRAM != Hyper || $+_p9k__g == 0 ) ]]; then - local mark=${(e)PROMPT_EOL_MARK} - [[ $mark == "%B%S%#%s%b" ]] && _p9k__ret=1 || _p9k_prompt_length $mark - local -i fill=$((COLUMNS > _p9k__ret ? COLUMNS - _p9k__ret : 0)) - out+="${(%):-$mark${(pl.$fill.. .)}$cr%b%k%f%s%u%E}" - else - out+="${(%):-$cr%E}" - fi - if (( _z4h_can_save_restore_screen != 1 )); then - (( height )) && out+="${(pl.$height..$lf.)}$esc${height}A" - out+="$terminfo[sc]" - fi - out+=${(%):-"$__p9k_used_instant_prompt[1]$__p9k_used_instant_prompt[2]"} - if [[ -n $__p9k_used_instant_prompt[3] ]]; then - _p9k_prompt_length "$__p9k_used_instant_prompt[2]" - local -i left_len=_p9k__ret - _p9k_prompt_length "$__p9k_used_instant_prompt[3]" - if (( _p9k__ret )); then - local -i gap=$((COLUMNS - left_len - _p9k__ret - ZLE_RPROMPT_INDENT)) - if (( gap >= 40 )); then - out+="${(pl.$gap.. .)}${(%):-${__p9k_used_instant_prompt[3]}%b%k%f%s%u}$cr$esc${left_len}C" - fi - fi - fi - if (( _z4h_can_save_restore_screen == 1 )); then - if (( height )); then - out+="$cr${(pl:$((height-prompt_height))::\n:)}$esc${height}A$terminfo[sc]$out" - else - out+="$cr${(pl:$((height-prompt_height))::\n:)}$terminfo[sc]$out" - fi - fi - if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then - local tmpdir=$TMPDIR - else - local tmpdir=/tmp - fi - typeset -g __p9k_instant_prompt_output=$tmpdir/p10k-instant-prompt-output-${(%):-%n}-$$ - { : > $__p9k_instant_prompt_output } || return - print -rn -- "${out}${esc}?2004h" || return - if (( $+commands[stty] )); then - command stty -icanon 2>/dev/null - fi - local fd_null - sysopen -ru fd_null /dev/null || return - exec {__p9k_fd_0}<&0 {__p9k_fd_1}>&1 {__p9k_fd_2}>&2 0<&$fd_null 1>$__p9k_instant_prompt_output - exec 2>&1 {fd_null}>&- - typeset -gi __p9k_instant_prompt_active=1 - if (( _z4h_can_save_restore_screen == 1 )); then - typeset -g _z4h_saved_screen - -z4h-save-screen - fi - typeset -g __p9k_instant_prompt_dump_file=${XDG_CACHE_HOME:-~/.cache}/p10k-dump-${(%):-%n}.zsh - if builtin source $__p9k_instant_prompt_dump_file 2>/dev/null && (( $+functions[_p9k_preinit] )); then - _p9k_preinit - fi - function _p9k_instant_prompt_cleanup() { - (( ZSH_SUBSHELL == 0 && ${+__p9k_instant_prompt_active} )) || return 0 - '$__p9k_intro_no_locale' - unset __p9k_instant_prompt_active - exec 0<&$__p9k_fd_0 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_0}>&- {__p9k_fd_1}>&- {__p9k_fd_2}>&- - unset __p9k_fd_0 __p9k_fd_1 __p9k_fd_2 - typeset -gi __p9k_instant_prompt_erased=1 - if (( _z4h_can_save_restore_screen == 1 && __p9k_instant_prompt_sourced >= 35 )); then - -z4h-restore-screen - unset _z4h_saved_screen - fi - print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed] - if [[ -s $__p9k_instant_prompt_output ]]; then - command cat $__p9k_instant_prompt_output 2>/dev/null - if (( $1 )); then - local _p9k__ret mark="${(e)${PROMPT_EOL_MARK-%B%S%#%s%b}}" - _p9k_prompt_length $mark - local -i fill=$((COLUMNS > _p9k__ret ? COLUMNS - _p9k__ret : 0)) - echo -nE - "${(%):-%b%k%f%s%u$mark${(pl.$fill.. .)}$cr%b%k%f%s%u%E}" - fi - fi - zshexit_functions=(${zshexit_functions:#_p9k_instant_prompt_cleanup}) - zmodload -F zsh/files b:zf_rm || return - local user=${(%):-%n} - local root_dir=${__p9k_instant_prompt_dump_file:h} - zf_rm -f -- $__p9k_instant_prompt_output $__p9k_instant_prompt_dump_file{,.zwc} $root_dir/p10k-instant-prompt-$user.zsh{,.zwc} $root_dir/p10k-$user/prompt-*(N) 2>/dev/null - } - function _p9k_instant_prompt_precmd_first() { - '$__p9k_intro' - function _p9k_instant_prompt_sched_last() { - (( ${+__p9k_instant_prompt_active} )) || return 0 - _p9k_instant_prompt_cleanup 1 - setopt no_local_options prompt_cr prompt_sp - } - zmodload zsh/sched - sched +0 _p9k_instant_prompt_sched_last - precmd_functions=(${(@)precmd_functions:#_p9k_instant_prompt_precmd_first}) - } - zshexit_functions=(_p9k_instant_prompt_cleanup $zshexit_functions) - precmd_functions=(_p9k_instant_prompt_precmd_first $precmd_functions) - DISABLE_UPDATE_PROMPT=true -} && unsetopt prompt_cr prompt_sp && typeset -gi __p9k_instant_prompt_sourced='$__p9k_instant_prompt_version' || - typeset -gi __p9k_instant_prompt_sourced=${__p9k_instant_prompt_sourced:-0}' - } always { - exec {fd}>&- - } - { - (( ! $? )) || return - # `zf_mv -f src dst` fails on NTFS if `dst` is not writable, hence `zf_rm`. - zf_rm -f -- $root_file.zwc || return - zf_mv -f -- $tmp $root_file || return - zcompile -R -- $tmp.zwc $root_file || return - zf_mv -f -- $tmp.zwc $root_file.zwc || return - } always { - (( $? )) && zf_rm -f -- $tmp $tmp.zwc 2>/dev/null - } - fi - - local tmp=$prompt_file.tmp.$$ - zf_mv -f -- $prompt_file $tmp 2>/dev/null - if [[ "$(<$tmp)" == *$'\x1e'$_p9k__instant_prompt_sig$'\x1f'* ]] 2>/dev/null; then - echo -n >$tmp || return - fi - - local -i fd - sysopen -a -m 600 -o creat -u fd -- $tmp || return - { - { - print -rnu $fd -- $'\x1e'$_p9k__instant_prompt_sig$'\x1f'${(pj:\x1f:)_p9k_t}$'\x1f'$_p9k__instant_prompt || return - } always { - exec {fd}>&- - } - zf_mv -f -- $tmp $prompt_file || return - } always { - (( $? )) && zf_rm -f -- $tmp 2>/dev/null - } -} - -typeset -gi __p9k_sh_glob -typeset -gi __p9k_ksh_arrays -typeset -gi __p9k_new_status -typeset -ga __p9k_new_pipestatus - -_p9k_save_status() { - local -i pipe - if (( !$+_p9k__line_finished )); then - : # SIGINT - elif (( !$+_p9k__preexec_cmd )); then - # Empty line, comment or parse error. - # - # This case is handled incorrectly: - # - # true | false - # | - # - # Here status=1 and pipestatus=(0 1). Ideally we should ignore pipestatus but we won't. - # - # This works though (unless pipefail is set): - # - # false | true - # | - # - # We get status=1 and pipestatus=(1 0) and correctly ignore pipestatus. - (( _p9k__status == __p9k_new_status )) && return - elif (( $__p9k_new_pipestatus[(I)$__p9k_new_status] )); then # just in case - local cmd=(${(z)_p9k__preexec_cmd}) - if [[ $#cmd != 0 && $cmd[1] != '!' && ${(Q)cmd[1]} != coproc ]]; then - local arg - for arg in ${(z)_p9k__preexec_cmd}; do - # '()' is for functions, *';' is for complex commands. - if [[ $arg == ('()'|'&&'|'||'|'&'|'&|'|'&!'|*';') ]]; then - pipe=0 - break - elif [[ $arg == *('|'|'|&')* ]]; then - pipe=1 - fi - done - fi - fi - _p9k__status=$__p9k_new_status - if (( pipe )); then - _p9k__pipestatus=($__p9k_new_pipestatus) - else - _p9k__pipestatus=($_p9k__status) - fi -} - -function _p9k_dump_state() { - local dir=${__p9k_dump_file:h} - [[ -d $dir ]] || mkdir -p -- $dir || return - [[ -w $dir ]] || return - local tmp=$__p9k_dump_file.tmp.$$ - local -i fd - sysopen -a -m 600 -o creat,trunc -u fd -- $tmp || return - { - { - typeset -g __p9k_cached_param_pat=$_p9k__param_pat - typeset -g __p9k_cached_param_sig=$_p9k__param_sig - typeset -pm __p9k_cached_param_pat __p9k_cached_param_sig >&$fd || return - unset __p9k_cached_param_pat __p9k_cached_param_sig - (( $+_p9k_preinit )) && { print -r -- $_p9k_preinit >&$fd || return } - print -r -- '_p9k_restore_state_impl() {' >&$fd || return - typeset -pm '_POWERLEVEL9K_*|_p9k_[^_]*|icons' >&$fd || return - print -r -- '}' >&$fd || return - } always { - exec {fd}>&- - } - # `zf_mv -f src dst` fails on NTFS if `dst` is not writable, hence `zf_rm`. - zf_rm -f -- $__p9k_dump_file.zwc || return - zf_mv -f -- $tmp $__p9k_dump_file || return - zcompile -R -- $tmp.zwc $__p9k_dump_file || return - zf_mv -f -- $tmp.zwc $__p9k_dump_file.zwc || return - } always { - (( $? )) && zf_rm -f -- $tmp $tmp.zwc 2>/dev/null - } -} - -function _p9k_delete_instant_prompt() { - local user=${(%):-%n} - local root_dir=${__p9k_dump_file:h} - zf_rm -f -- $root_dir/p10k-instant-prompt-$user.zsh{,.zwc} ${root_dir}/p10k-$user/prompt-*(N) 2>/dev/null -} - -function _p9k_restore_state() { - { - [[ $__p9k_cached_param_pat == $_p9k__param_pat && $__p9k_cached_param_sig == $_p9k__param_sig ]] || return - (( $+functions[_p9k_restore_state_impl] )) || return - _p9k_restore_state_impl - return 0 - } always { - if (( $? )); then - if (( $+functions[_p9k_preinit] )); then - unfunction _p9k_preinit - (( $+functions[gitstatus_stop_p9k_] )) && gitstatus_stop_p9k_ POWERLEVEL9K - fi - _p9k_delete_instant_prompt - zf_rm -f -- $__p9k_dump_file{,.zwc} 2>/dev/null - elif [[ $__p9k_instant_prompt_param_sig != $_p9k__param_sig ]]; then - _p9k_delete_instant_prompt - _p9k_dumped_instant_prompt_sigs=() - fi - unset __p9k_cached_param_sig - } -} - -function _p9k_clear_instant_prompt() { - if (( $+__p9k_fd_0 )); then - exec 0<&$__p9k_fd_0 {__p9k_fd_0}>&- - unset __p9k_fd_0 - fi - exec 1>&$__p9k_fd_1 2>&$__p9k_fd_2 {__p9k_fd_1}>&- {__p9k_fd_2}>&- - unset __p9k_fd_1 __p9k_fd_2 - zshexit_functions=(${zshexit_functions:#_p9k_instant_prompt_cleanup}) - if (( _p9k__can_hide_cursor )); then - echoti civis - _p9k__cursor_hidden=1 - fi - if [[ -s $__p9k_instant_prompt_output ]]; then - { - local content - [[ $_POWERLEVEL9K_INSTANT_PROMPT == verbose ]] && content="$(<$__p9k_instant_prompt_output)" - local mark="${(e)${PROMPT_EOL_MARK-%B%S%#%s%b}}" - _p9k_prompt_length $mark - local -i fill=$((COLUMNS > _p9k__ret ? COLUMNS - _p9k__ret : 0)) - local cr=$'\r' - local sp="${(%):-%b%k%f%s%u$mark${(pl.$fill.. .)}$cr%b%k%f%s%u%E}" - if (( _z4h_can_save_restore_screen == 1 && __p9k_instant_prompt_sourced >= 35 )); then - -z4h-restore-screen - unset _z4h_saved_screen - fi - print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed] - local unexpected=${(S)${${content//$'\e[?'<->'c'}//$'\e['<->' q'}//$'\e'[^$'\a\e']#($'\a'|$'\e\\')} - # Visual Studio Code prints this garbage. - unexpected=${${unexpected//$'\033[1;32mShell integration activated\033[0m\n'}//$'\r'} - if [[ -n $unexpected ]]; then - local omz1='[Oh My Zsh] Would you like to update? [Y/n]: ' - local omz2='Updating Oh My Zsh' - local omz3='https://shop.planetargon.com/collections/oh-my-zsh' - local omz4='There was an error updating. Try again later?' - if [[ $unexpected != ($omz1|)$omz2*($omz3|$omz4)[^$'\n']#($'\n'|) ]]; then - echo -E - "" - echo -E - "${(%):-[%3FWARNING%f]: Console output during zsh initialization detected.}" - echo -E - "" - echo -E - "${(%):-When using Powerlevel10k with instant prompt, console output during zsh}" - echo -E - "${(%):-initialization may indicate issues.}" - echo -E - "" - echo -E - "${(%):-You can:}" - echo -E - "" - echo -E - "${(%):- - %BRecommended%b: Change %B$__p9k_zshrc_u%b so that it does not perform console I/O}" - echo -E - "${(%):- after the instant prompt preamble. See the link below for details.}" - echo -E - "" - echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - echo -E - "${(%):- * Zsh will start %Bquickly%b and prompt will update %Bsmoothly%b.}" - echo -E - "" - echo -E - "${(%):- - Suppress this warning either by running %Bp10k configure%b or by manually}" - echo -E - "${(%):- defining the following parameter:}" - echo -E - "" - echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=quiet}" - echo -E - "" - echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - echo -E - "${(%):- * Zsh will start %Bquickly%b but prompt will %Bjump down%b after initialization.}" - echo -E - "" - echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}" - echo -E - "${(%):- defining the following parameter:}" - echo -E - "" - echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}" - echo -E - "" - echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - echo -E - "${(%):- * Zsh will start %Bslowly%b.}" - echo -E - "" - echo -E - "${(%):- - Do nothing.}" - echo -E - "" - echo -E - "${(%):- * You %Bwill%b see this error message every time you start zsh.}" - echo -E - "${(%):- * Zsh will start %Bquickly%b but prompt will %Bjump down%b after initialization.}" - echo -E - "" - echo -E - "${(%):-For details, see:}" - if (( _p9k_term_has_href )); then - echo - "${(%):-\e]8;;https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt\ahttps://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt\e]8;;\a}" - else - echo - "${(%):-https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt}" - fi - echo -E - "" - echo - "${(%):-%3F-- console output produced during zsh initialization follows --%f}" - echo -E - "" - fi - fi - command cat -- $__p9k_instant_prompt_output - echo -nE - $sp - zf_rm -f -- $__p9k_instant_prompt_output - } 2>/dev/null - else - zf_rm -f -- $__p9k_instant_prompt_output 2>/dev/null - if (( _z4h_can_save_restore_screen == 1 && __p9k_instant_prompt_sourced >= 35 )); then - -z4h-restore-screen - unset _z4h_saved_screen - fi - print -rn -- $terminfo[rc]${(%):-%b%k%f%s%u}$terminfo[ed] - fi - prompt_opts=(percent subst sp cr) - if [[ $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT == 0 && $__p9k_instant_prompt_active == 2 ]]; then - >&2 echo -E - "" - >&2 echo -E - "${(%):-[%1FERROR%f]: When using Powerlevel10k with instant prompt, %Bprompt_cr%b must be unset.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):-You can:}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- - %BRecommended%b: call %Bp10k finalize%b at the end of %B$__p9k_zshrc_u%b.}" - >&2 echo -E - "${(%):- You can do this by running the following command:}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- %2Fecho%f %3F'(( ! \${+functions[p10k]\} )) || p10k finalize'%f >>! $__p9k_zshrc_u}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- - Find where %Bprompt_cr%b option gets sets in your zsh configs and stop setting it.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b and %Bwithout%b prompt flickering.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}" - >&2 echo -E - "${(%):- defining the following parameter:}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- - Do nothing.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- * You %Bwill%b see this error message every time you start zsh.}" - >&2 echo -E - "${(%):- * Zsh will start %Bquckly%b but %Bwith%b prompt flickering.}" - >&2 echo -E - "" - fi -} - -function _p9k_do_dump() { - eval "$__p9k_intro" - zle -F $1 - exec {1}>&- - (( _p9k__state_dump_fd )) || return - if (( ! _p9k__instant_prompt_disabled )); then - _p9k__instant_prompt_sig=$_p9k__cwd:$P9K_SSH:${(%):-%#} - _p9k_set_instant_prompt - _p9k_dump_instant_prompt - _p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig]=1 - fi - _p9k_dump_state - _p9k__state_dump_scheduled=0 - _p9k__state_dump_fd=0 -} - -function _p9k_should_dump() { - (( __p9k_dumps_enabled && ! _p9k__state_dump_fd )) || return - (( _p9k__state_dump_scheduled || _p9k__prompt_idx == 1 )) && return - _p9k__instant_prompt_sig=$_p9k__cwd:$P9K_SSH:${(%):-%#} - (( ! $+_p9k_dumped_instant_prompt_sigs[$_p9k__instant_prompt_sig] )) -} - -# Must not run under `eval "$__p9k_intro_locale"`. Safe to run with any options. -function _p9k_restore_special_params() { - (( ! ${+_p9k__real_zle_rprompt_indent} )) || { - [[ -n "$_p9k__real_zle_rprompt_indent" ]] && - ZLE_RPROMPT_INDENT="$_p9k__real_zle_rprompt_indent" || - unset ZLE_RPROMPT_INDENT - unset _p9k__real_zle_rprompt_indent - } - (( ! ${+_p9k__real_lc_ctype} )) || { - LC_CTYPE="$_p9k__real_lc_ctype" - unset _p9k__real_lc_ctype - } - (( ! ${+_p9k__real_lc_all} )) || { - LC_ALL="$_p9k__real_lc_all" - unset _p9k__real_lc_all - } -} - -function _p9k_on_expand() { - (( _p9k__expanded && ! ${+__p9k_instant_prompt_active} )) && [[ "${langinfo[CODESET]}" == (utf|UTF)(-|)8 ]] && return - - eval "$__p9k_intro_no_locale" - - if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]]; then - _p9k_restore_special_params - if [[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]] && _p9k_init_locale; then - if [[ -n $LC_ALL ]]; then - _p9k__real_lc_all=$LC_ALL - LC_ALL=$__p9k_locale - else - _p9k__real_lc_ctype=$LC_CTYPE - LC_CTYPE=$__p9k_locale - fi - fi - fi - - (( _p9k__expanded && ! $+__p9k_instant_prompt_active )) && return - - eval "$__p9k_intro_locale" - - if (( ! _p9k__expanded )); then - if _p9k_should_dump; then - sysopen -o cloexec -ru _p9k__state_dump_fd /dev/null - zle -F $_p9k__state_dump_fd _p9k_do_dump - fi - - if [[ -z $P9K_TTY || $P9K_TTY == old && -n ${_P9K_TTY:#$TTY} ]]; then - typeset -gx P9K_TTY=old - if (( _POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS < 0 )); then - P9K_TTY=new - else - local -a stat - if zstat -A stat +ctime -- $TTY 2>/dev/null && - (( EPOCHREALTIME - stat[1] < _POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS )); then - P9K_TTY=new - fi - fi - fi - - typeset -gx _P9K_TTY=$TTY - - __p9k_reset_state=1 - - if (( _POWERLEVEL9K_PROMPT_ADD_NEWLINE )); then - if [[ $P9K_TTY == new ]]; then - _p9k__empty_line_i=3 - _p9k__display_v[2]=hide - elif [[ -z $_p9k_transient_prompt && $+functions[p10k-on-post-prompt] == 0 ]]; then - _p9k__empty_line_i=3 - _p9k__display_v[2]=print - else - unset _p9k__empty_line_i - _p9k__display_v[2]=show - fi - fi - - if (( _POWERLEVEL9K_SHOW_RULER )); then - if [[ $P9K_TTY == new ]]; then - _p9k__ruler_i=3 - _p9k__display_v[4]=hide - elif [[ -z $_p9k_transient_prompt && $+functions[p10k-on-post-prompt] == 0 ]]; then - _p9k__ruler_i=3 - _p9k__display_v[4]=print - else - unset _p9k__ruler_i - _p9k__display_v[4]=show - fi - fi - - (( _p9k__fully_initialized )) || _p9k_wrap_widgets - fi - - if (( $+__p9k_instant_prompt_active )); then - _p9k_clear_instant_prompt - unset __p9k_instant_prompt_active - fi - - if (( ! _p9k__expanded )); then - _p9k__expanded=1 - - (( _p9k__fully_initialized || ! $+functions[p10k-on-init] )) || p10k-on-init - - local pat idx var - for pat idx var in $_p9k_show_on_command; do - _p9k_display_segment $idx $var hide - done - - (( $+functions[p10k-on-pre-prompt] )) && p10k-on-pre-prompt - - if zle; then - local -a P9K_COMMANDS=($_p9k__last_commands) - local pat idx var - for pat idx var in $_p9k_show_on_command; do - if (( $P9K_COMMANDS[(I)$pat] )); then - _p9k_display_segment $idx $var show - else - _p9k_display_segment $idx $var hide - fi - done - if (( $+functions[p10k-on-post-widget] )); then - local -h WIDGET - unset WIDGET - p10k-on-post-widget - fi - else - if [[ $_p9k__display_v[2] == print && -n $_p9k_t[_p9k_empty_line_idx] ]]; then - print -rnP -- '%b%k%f%E'$_p9k_t[_p9k_empty_line_idx] - fi - if [[ $_p9k__display_v[4] == print ]]; then - () { - local ruler=$_p9k_t[_p9k_ruler_idx] - local -i _p9k__clm=COLUMNS _p9k__ind=${ZLE_RPROMPT_INDENT:-1} - (( __p9k_ksh_arrays )) && setopt ksh_arrays - (( __p9k_sh_glob )) && setopt sh_glob - setopt prompt_subst - print -rnP -- '%b%k%f%E'$ruler - } - fi - fi - - __p9k_reset_state=0 - _p9k__fully_initialized=1 - fi -} -functions -M _p9k_on_expand - -_p9k_precmd_impl() { - eval "$__p9k_intro" - - (( __p9k_enabled )) || return - - if ! zle || [[ -z $_p9k__param_sig ]]; then - if zle; then - __p9k_new_status=0 - __p9k_new_pipestatus=(0) - else - _p9k__must_restore_prompt=0 - fi - - if _p9k_must_init; then - local -i instant_prompt_disabled - if (( !__p9k_configured )); then - __p9k_configured=1 - if [[ -z "${parameters[(I)POWERLEVEL9K_*~POWERLEVEL9K_(MODE|CONFIG_FILE|GITSTATUS_DIR)]}" ]]; then - _p9k_can_configure -q - local -i ret=$? - if (( ret == 2 && $+__p9k_instant_prompt_active )); then - _p9k_clear_instant_prompt - unset __p9k_instant_prompt_active - _p9k_delete_instant_prompt - zf_rm -f -- $__p9k_dump_file{,.zwc} 2>/dev/null - () { - local key - while true; do - [[ -t 2 ]] - read -t0 -k key || break - done 2>/dev/null - } - _p9k_can_configure -q - ret=$? - fi - if (( ret == 0 )); then - if (( $+commands[git] )); then - ( - local -i pid - { - { /bin/sh "$__p9k_root_dir"/gitstatus/install /dev/null & } && pid=$! - ( builtin source "$__p9k_root_dir"/internal/wizard.zsh ) - } always { - if (( pid )); then - kill -- $pid 2>/dev/null - wait -- $pid 2>/dev/null - fi - } - ) - else - ( builtin source "$__p9k_root_dir"/internal/wizard.zsh ) - fi - if (( $? )); then - instant_prompt_disabled=1 - else - builtin source "$__p9k_cfg_path" - _p9k__force_must_init=1 - _p9k_must_init - fi - fi - fi - fi - typeset -gi _p9k__instant_prompt_disabled=instant_prompt_disabled - _p9k_init - fi - - if (( _p9k__timer_start )); then - typeset -gF P9K_COMMAND_DURATION_SECONDS=$((EPOCHREALTIME - _p9k__timer_start)) - else - unset P9K_COMMAND_DURATION_SECONDS - fi - _p9k_save_status - - if [[ $_p9k__preexec_cmd == [[:space:]]#(clear([[:space:]]##-(|x)(|T[a-zA-Z0-9-_\'\"]#))#|reset)[[:space:]]# && - $_p9k__status == 0 ]]; then - P9K_TTY=new - elif [[ $P9K_TTY == new && $_p9k__fully_initialized == 1 ]] && ! zle; then - P9K_TTY=old - fi - - _p9k__timer_start=0 - _p9k__region_active=0 - - unset _p9k__line_finished _p9k__preexec_cmd - _p9k__keymap=main - _p9k__zle_state=insert - - (( ++_p9k__prompt_idx )) - - if (( $+_p9k__iterm_cmd )); then - _p9k_iterm2_precmd $__p9k_new_status - fi - fi - - _p9k_fetch_cwd - - _p9k__refresh_reason=precmd - __p9k_reset_state=1 - - local -i fast_vcs - if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then - if [[ $_p9k__cwd != $~_POWERLEVEL9K_VCS_DISABLED_DIR_PATTERN ]]; then - local -F start_time=EPOCHREALTIME - unset _p9k__vcs - unset _p9k__vcs_timeout - local -i _p9k__vcs_called - _p9k_vcs_gitstatus - local -i fast_vcs=1 - fi - fi - - (( $+functions[_p9k_async_segments_compute] )) && _p9k_async_segments_compute - - _p9k__expanded=0 - - _p9k_set_prompt - - _p9k__refresh_reason='' - - if [[ $precmd_functions[1] != _p9k_do_nothing && $precmd_functions[(I)_p9k_do_nothing] != 0 ]]; then - precmd_functions=(_p9k_do_nothing ${(@)precmd_functions:#_p9k_do_nothing}) - fi - if [[ $precmd_functions[-1] != _p9k_precmd && $precmd_functions[(I)_p9k_precmd] != 0 ]]; then - precmd_functions=(${(@)precmd_functions:#_p9k_precmd} _p9k_precmd) - fi - if [[ $preexec_functions[1] != _p9k_preexec1 && $preexec_functions[(I)_p9k_preexec1] != 0 ]]; then - preexec_functions=(_p9k_preexec1 ${(@)preexec_functions:#_p9k_preexec1}) - fi - if [[ $preexec_functions[-1] != _p9k_preexec2 && $preexec_functions[(I)_p9k_preexec2] != 0 ]]; then - preexec_functions=(${(@)preexec_functions:#_p9k_preexec2} _p9k_preexec2) - fi - - if (( fast_vcs && _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then - if (( $+_p9k__vcs_timeout )); then - (( _p9k__vcs_timeout = _POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS + start_time - EPOCHREALTIME )) - (( _p9k__vcs_timeout >= 0 )) || (( _p9k__vcs_timeout = 0 )) - gitstatus_process_results_p9k_ -t $_p9k__vcs_timeout POWERLEVEL9K - fi - if (( ! $+_p9k__vcs )); then - local _p9k__prompt _p9k__prompt_side=$_p9k_vcs_side _p9k__segment_name=vcs - local -i _p9k__has_upglob _p9k__segment_index=_p9k_vcs_index _p9k__line_index=_p9k_vcs_line_index - _p9k_vcs_render - typeset -g _p9k__vcs=$_p9k__prompt - fi - fi - - _p9k_worker_receive - __p9k_reset_state=0 -} - -_p9k_trapint() { - if (( __p9k_enabled )); then - eval "$__p9k_intro" - _p9k_deschedule_redraw - zle && _p9k_on_widget_zle-line-finish int - fi - return 0 -} - -_p9k_precmd() { - __p9k_new_status=$? - __p9k_new_pipestatus=($pipestatus) - - trap ":" INT - - [[ -o ksh_arrays ]] && __p9k_ksh_arrays=1 || __p9k_ksh_arrays=0 - [[ -o sh_glob ]] && __p9k_sh_glob=1 || __p9k_sh_glob=0 - _p9k_restore_special_params - - _p9k_precmd_impl - - [[ ${+__p9k_instant_prompt_active} == 0 || -o no_prompt_cr ]] || __p9k_instant_prompt_active=2 - setopt no_local_options no_prompt_bang prompt_percent prompt_subst prompt_cr prompt_sp - - # See https://www.zsh.org/mla/workers/2020/msg00612.html for the reason behind __p9k_trapint. - typeset -g __p9k_trapint='_p9k_trapint; return 130' - trap "$__p9k_trapint" INT - - : ${(%):-%b%k%s%u} -} - -function _p9k_reset_prompt() { - if (( __p9k_reset_state != 1 )) && zle && [[ -z $_p9k__line_finished ]]; then - __p9k_reset_state=0 - setopt prompt_subst - (( __p9k_ksh_arrays )) && setopt ksh_arrays - (( __p9k_sh_glob )) && setopt sh_glob - { - (( _p9k__can_hide_cursor )) && echoti civis - zle .reset-prompt - (( ${+functions[z4h]} )) || zle -R - } always { - (( _p9k__can_hide_cursor )) && print -rn -- $_p9k__cnorm - _p9k__cursor_hidden=0 - } - fi -} - -# Does ZSH have a certain off-by-one bug that triggers when PROMPT overflows to a new line? -# -# Bug: https://github.com/zsh-users/zsh/commit/d8d9fee137a5aa2cf9bf8314b06895bfc2a05518. -# ZSH_PATCHLEVEL=zsh-5.4.2-159-gd8d9fee13. Released in 5.5. -# -# Fix: https://github.com/zsh-users/zsh/commit/64d13738357c9b9c212adbe17f271716abbcf6ea. -# ZSH_PATCHLEVEL=zsh-5.7.1-50-g64d137383. Released in 5.7.2. -# -# Test: PROMPT="${(pl:$((COLUMNS))::-:)}<%1(l.%2(l.FAIL.PASS).FAIL)> " zsh -dfis <<= 50 )) - [[ $ZSH_VERSION == 5.<5-7>* && $ZSH_VERSION != 5.7.<2->* ]] -} - -typeset -g _p9k__param_pat -typeset -g _p9k__param_sig - -_p9k_init_vars() { - typeset -gF _p9k__gcloud_last_fetch_ts - typeset -g _p9k_gcloud_configuration - typeset -g _p9k_gcloud_account - typeset -g _p9k_gcloud_project_id - typeset -g _p9k_gcloud_project_name - - typeset -gi _p9k_term_has_href - - typeset -gi _p9k_vcs_index - typeset -gi _p9k_vcs_line_index - typeset -g _p9k_vcs_side - - typeset -ga _p9k_taskwarrior_meta_files - typeset -ga _p9k_taskwarrior_meta_non_files - typeset -g _p9k_taskwarrior_meta_sig - typeset -g _p9k_taskwarrior_data_dir - typeset -g _p9k__taskwarrior_functional=1 - typeset -ga _p9k_taskwarrior_data_files - typeset -ga _p9k_taskwarrior_data_non_files - typeset -g _p9k_taskwarrior_data_sig - typeset -gA _p9k_taskwarrior_counters - typeset -gF _p9k_taskwarrior_next_due - - typeset -ga _p9k_asdf_meta_files - typeset -ga _p9k_asdf_meta_non_files - typeset -g _p9k_asdf_meta_sig - - # plugin => installed_version_pattern - # example: (ruby '2.7.0|2.6.3|system' lua 'system' chubaka '1.0.0|system') - typeset -gA _p9k_asdf_plugins - - # example: (.ruby-version "ruby 1 chubaka 0") - # - # - "1" means parse-legacy-file is present - # - "chubaka" is another plugin that claims to be able to parse .ruby-version - typeset -gA _p9k_asdf_file_info - - # dir => mtime ':' ${(pj:\0:)files} - typeset -gA _p9k__asdf_dir2files - - # :file => mtime ':' ${(pj:\0:)tool_versions} - # plugin:file => mtime ':' version - typeset -gA _p9k_asdf_file2versions - - # filepath => mtime ':' word - typeset -gA _p9k__read_word_cache - # filepath:prefix => mtime ':' versions - typeset -gA _p9k__read_pyenv_like_version_file_cache - - # _p9k__parent_dirs and _p9k__parent_mtimes are parallel arrays. They are updated - # together with _p9k__cwd. _p9k__parent_mtimes[i] is mtime for _p9k__parent_dirs[i]. - # - # When _p9k__cwd is / or ~, both arrays are empty. When _p9k__cwd is ~/foo/bar, - # _p9k__parent_dirs is (/home/user/foo/bar /home/user/foo). When _p9k__cwd is - # /foo/bar, it's (/foo/bar /foo). - # - # $_p9k__parent_mtimes_i[i] == "$i:$_p9k__parent_mtimes[i]" - # $_p9k__parent_mtimes_s == "$_p9k__parent_mtimes_i". - typeset -ga _p9k__parent_dirs - typeset -ga _p9k__parent_mtimes - typeset -ga _p9k__parent_mtimes_i - typeset -g _p9k__parent_mtimes_s - - typeset -g _p9k__cwd - typeset -g _p9k__cwd_a - - # dir/pattern => dir mtime ':' num_matches - typeset -gA _p9k__glob_cache - - # dir/pattern => space-separated parent dir mtimes ' :' the first matching parent dir - # Note: ' :' is indeed the delimiter. - typeset -gA _p9k__upsearch_cache - - typeset -g _p9k_timewarrior_dir - typeset -gi _p9k_timewarrior_dir_mtime - typeset -gi _p9k_timewarrior_file_mtime - typeset -g _p9k_timewarrior_file_name - typeset -gA _p9k__prompt_char_saved - typeset -g _p9k__worker_pid - typeset -g _p9k__worker_req_fd - typeset -g _p9k__worker_resp_fd - typeset -g _p9k__worker_shell_pid - typeset -g _p9k__worker_file_prefix - typeset -gA _p9k__worker_request_map - typeset -ga _p9k__segment_cond_left - typeset -ga _p9k__segment_cond_right - typeset -ga _p9k__segment_val_left - typeset -ga _p9k__segment_val_right - typeset -ga _p9k_show_on_command - typeset -g _p9k__last_buffer - typeset -ga _p9k__last_commands - typeset -gi _p9k__fully_initialized - typeset -gi _p9k__must_restore_prompt - typeset -gi _p9k__restore_prompt_fd - typeset -gi _p9k__redraw_fd - typeset -gi _p9k__can_hide_cursor=$(( $+terminfo[civis] && $+terminfo[cnorm] )) - if (( _p9k__can_hide_cursor )); then - # See https://github.com/romkatv/powerlevel10k/issues/1699 - if [[ $terminfo[cnorm] == *$'\e[?25h'(|'\e'*) ]]; then - typeset -g _p9k__cnorm=$'\e[?25h' - else - typeset -g _p9k__cnorm=$terminfo[cnorm] - fi - fi - typeset -gi _p9k__cursor_hidden - typeset -gi _p9k__non_hermetic_expansion - typeset -g _p9k__time - typeset -g _p9k__date - typeset -gA _p9k_dumped_instant_prompt_sigs - typeset -g _p9k__instant_prompt_sig - typeset -g _p9k__instant_prompt - typeset -gi _p9k__state_dump_scheduled - typeset -gi _p9k__state_dump_fd - typeset -gi _p9k__prompt_idx - typeset -gi _p9k_reset_on_line_finish - typeset -gF _p9k__timer_start - typeset -gi _p9k__status - typeset -ga _p9k__pipestatus - typeset -g _p9k__ret - typeset -g _p9k__cache_key - typeset -ga _p9k__cache_val - typeset -g _p9k__cache_stat_meta - typeset -g _p9k__cache_stat_fprint - typeset -g _p9k__cache_fprint_key - typeset -gA _p9k_cache - typeset -gA _p9k__cache_ephemeral - typeset -ga _p9k_t - typeset -g _p9k__n - typeset -gi _p9k__i - typeset -g _p9k__bg - typeset -ga _p9k_left_join - typeset -ga _p9k_right_join - typeset -g _p9k__public_ip - typeset -g _p9k__todo_command - typeset -g _p9k__todo_file - typeset -g _p9k__git_dir - # git workdir => 1 if gitstatus is slow on it, 0 if it's fast. - typeset -gA _p9k_git_slow - # git workdir => the last state we've seen for it - typeset -gA _p9k__gitstatus_last - typeset -gF _p9k__gitstatus_start_time - typeset -g _p9k__prompt - typeset -g _p9k__rprompt - typeset -g _p9k__lprompt - typeset -g _p9k__prompt_side - typeset -g _p9k__segment_name - typeset -gi _p9k__segment_index - typeset -gi _p9k__line_index - typeset -g _p9k__refresh_reason - typeset -gi _p9k__region_active - typeset -ga _p9k_line_segments_left - typeset -ga _p9k_line_segments_right - typeset -ga _p9k_line_prefix_left - typeset -ga _p9k_line_prefix_right - typeset -ga _p9k_line_suffix_left - typeset -ga _p9k_line_suffix_right - typeset -ga _p9k_line_never_empty_right - typeset -ga _p9k_line_gap_post - typeset -g _p9k__xy - typeset -g _p9k__clm - typeset -g _p9k__p - typeset -gi _p9k__x - typeset -gi _p9k__y - typeset -gi _p9k__m - typeset -gi _p9k__d - typeset -gi _p9k__h - typeset -gi _p9k__ind - typeset -g _p9k_gap_pre - typeset -gi _p9k__ruler_i=3 - typeset -gi _p9k_ruler_idx - typeset -gi _p9k__empty_line_i=3 - typeset -gi _p9k_empty_line_idx - typeset -g _p9k_prompt_prefix_left - typeset -g _p9k_prompt_prefix_right - typeset -g _p9k_prompt_suffix_left - typeset -g _p9k_prompt_suffix_right - typeset -gi _p9k_emulate_zero_rprompt_indent - typeset -gA _p9k_battery_states - typeset -g _p9k_os - typeset -g _p9k_os_icon - typeset -g _p9k_color1 - typeset -g _p9k_color2 - typeset -g _p9k__s - typeset -g _p9k__ss - typeset -g _p9k__sss - typeset -g _p9k__v - typeset -g _p9k__c - typeset -g _p9k__e - typeset -g _p9k__w - typeset -gi _p9k__dir_len - typeset -gi _p9k_num_cpus - typeset -g _p9k__keymap - typeset -g _p9k__zle_state - typeset -g _p9k_uname - typeset -g _p9k_uname_o - typeset -g _p9k_uname_m - typeset -g _p9k_transient_prompt - typeset -g _p9k__last_prompt_pwd - typeset -gA _p9k_display_k - typeset -ga _p9k__display_v - - typeset -gA _p9k__dotnet_stat_cache - typeset -gA _p9k__dir_stat_cache - typeset -gi _p9k__expanded - typeset -gi _p9k__force_must_init - - typeset -g P9K_VISUAL_IDENTIFIER - typeset -g P9K_CONTENT - typeset -g P9K_GAP - typeset -g P9K_PROMPT=regular -} - -_p9k_init_params() { - _p9k_declare -F POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS 60 - - # invarint: _POWERLEVEL9K_INSTANT_PROMPT == (verbose|quiet|off) - # invariant: [[ ($_POWERLEVEL9K_INSTANT_PROMPT == off) == $_POWERLEVEL9K_DISABLE_INSTANT_PROMPT ]] - _p9k_declare -s POWERLEVEL9K_INSTANT_PROMPT # verbose, quiet, off - if [[ $_POWERLEVEL9K_INSTANT_PROMPT == off ]]; then - typeset -gi _POWERLEVEL9K_DISABLE_INSTANT_PROMPT=1 - else - _p9k_declare -b POWERLEVEL9K_DISABLE_INSTANT_PROMPT 0 - if (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )); then - _POWERLEVEL9K_INSTANT_PROMPT=off - elif [[ $_POWERLEVEL9K_INSTANT_PROMPT != quiet ]]; then - _POWERLEVEL9K_INSTANT_PROMPT=verbose - fi - fi - - (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )) && _p9k__instant_prompt_disabled=1 - - _p9k_declare -s POWERLEVEL9K_TRANSIENT_PROMPT off - [[ $_POWERLEVEL9K_TRANSIENT_PROMPT == (off|always|same-dir) ]] || _POWERLEVEL9K_TRANSIENT_PROMPT=off - - _p9k_declare -b POWERLEVEL9K_TERM_SHELL_INTEGRATION 0 - if [[ __p9k_force_term_shell_integration -eq 1 || $ITERM_SHELL_INTEGRATION_INSTALLED == Yes ]]; then - _POWERLEVEL9K_TERM_SHELL_INTEGRATION=1 - fi - - _p9k_declare -s POWERLEVEL9K_WORKER_LOG_LEVEL - _p9k_declare -i POWERLEVEL9K_COMMANDS_MAX_TOKEN_COUNT 64 - _p9k_declare -a POWERLEVEL9K_HOOK_WIDGETS -- - _p9k_declare -b POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL 0 - _p9k_declare -b POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED 0 - _p9k_declare -b POWERLEVEL9K_DISABLE_HOT_RELOAD 0 - _p9k_declare -F POWERLEVEL9K_NEW_TTY_MAX_AGE_SECONDS 5 - _p9k_declare -i POWERLEVEL9K_INSTANT_PROMPT_COMMAND_LINES - _p9k_declare -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS -- context dir vcs - _p9k_declare -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS -- status root_indicator background_jobs history time - _p9k_declare -b POWERLEVEL9K_DISABLE_RPROMPT 0 - _p9k_declare -b POWERLEVEL9K_PROMPT_ADD_NEWLINE 0 - _p9k_declare -b POWERLEVEL9K_PROMPT_ON_NEWLINE 0 - _p9k_declare -b POWERLEVEL9K_RPROMPT_ON_NEWLINE 0 - _p9k_declare -b POWERLEVEL9K_SHOW_RULER 0 - _p9k_declare -i POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT 1 - _p9k_declare -s POWERLEVEL9K_COLOR_SCHEME dark - _p9k_declare -s POWERLEVEL9K_GITSTATUS_DIR "" - _p9k_declare -s POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN - _p9k_declare -b POWERLEVEL9K_VCS_SHOW_SUBMODULE_DIRTY 0 - _p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_LENGTH - _p9k_declare -i POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH - _p9k_declare -s POWERLEVEL9K_VCS_SHORTEN_STRATEGY - if [[ $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then - _p9k_declare -e POWERLEVEL9K_VCS_SHORTEN_DELIMITER '\u2026' - else - _p9k_declare -e POWERLEVEL9K_VCS_SHORTEN_DELIMITER '..' - fi - _p9k_declare -b POWERLEVEL9K_VCS_CONFLICTED_STATE 0 - _p9k_declare -b POWERLEVEL9K_HIDE_BRANCH_ICON 0 - _p9k_declare -b POWERLEVEL9K_VCS_HIDE_TAGS 0 - _p9k_declare -i POWERLEVEL9K_CHANGESET_HASH_LENGTH 8 - # Specifies the maximum number of elements in the cache. When the cache grows over this limit, - # it gets cleared. This is meant to avoid memory leaks when a rogue prompt is filling the cache - # with data. - _p9k_declare -i POWERLEVEL9K_MAX_CACHE_SIZE 10000 - _p9k_declare -e POWERLEVEL9K_ANACONDA_LEFT_DELIMITER "(" - _p9k_declare -e POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER ")" - _p9k_declare -b POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION 1 - _p9k_declare -b POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE 1 - _p9k_declare -b POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS 0 - _p9k_declare -b POWERLEVEL9K_DISK_USAGE_ONLY_WARNING 0 - _p9k_declare -i POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL 90 - _p9k_declare -i POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL 95 - _p9k_declare -i POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10 - _p9k_declare -i POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD 999 - _p9k_declare -b POWERLEVEL9K_BATTERY_VERBOSE 1 - _p9k_declare -a POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND -- - _p9k_declare -a POWERLEVEL9K_BATTERY_LEVEL_FOREGROUND -- - case $parameters[POWERLEVEL9K_BATTERY_STAGES] in - scalar*) typeset -ga _POWERLEVEL9K_BATTERY_STAGES=("${(@s::)${(g::)POWERLEVEL9K_BATTERY_STAGES}}");; - array*) typeset -ga _POWERLEVEL9K_BATTERY_STAGES=("${(@g::)POWERLEVEL9K_BATTERY_STAGES}");; - *) typeset -ga _POWERLEVEL9K_BATTERY_STAGES=();; - esac - local state - for state in CHARGED CHARGING LOW DISCONNECTED; do - _p9k_declare -i POWERLEVEL9K_BATTERY_${state}_HIDE_ABOVE_THRESHOLD $_POWERLEVEL9K_BATTERY_HIDE_ABOVE_THRESHOLD - local var=POWERLEVEL9K_BATTERY_${state}_STAGES - case $parameters[$var] in - scalar*) eval "typeset -ga _$var=(${(@qq)${(@s::)${(g::)${(P)var}}}})";; - array*) eval "typeset -ga _$var=(${(@qq)${(@g::)${(@P)var}}})";; - *) eval "typeset -ga _$var=(${(@qq)_POWERLEVEL9K_BATTERY_STAGES})";; - esac - local var=POWERLEVEL9K_BATTERY_${state}_LEVEL_BACKGROUND - case $parameters[$var] in - array*) eval "typeset -ga _$var=(${(@qq)${(@P)var}})";; - *) eval "typeset -ga _$var=(${(@qq)_POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND})";; - esac - local var=POWERLEVEL9K_BATTERY_${state}_LEVEL_FOREGROUND - case $parameters[$var] in - array*) eval "typeset -ga _$var=(${(@qq)${(@P)var}})";; - *) eval "typeset -ga _$var=(${(@qq)_POWERLEVEL9K_BATTERY_LEVEL_FOREGROUND})";; - esac - done - _p9k_declare -F POWERLEVEL9K_PUBLIC_IP_TIMEOUT 300 - _p9k_declare -a POWERLEVEL9K_PUBLIC_IP_METHODS -- dig curl wget - _p9k_declare -e POWERLEVEL9K_PUBLIC_IP_NONE "" - _p9k_declare -s POWERLEVEL9K_PUBLIC_IP_HOST "https://v4.ident.me/" - _p9k_declare -s POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE "" - _p9k_segment_in_use public_ip || _POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE= - _p9k_declare -b POWERLEVEL9K_ALWAYS_SHOW_CONTEXT 0 - _p9k_declare -b POWERLEVEL9K_ALWAYS_SHOW_USER 0 - _p9k_declare -e POWERLEVEL9K_CONTEXT_TEMPLATE "%n@%m" - _p9k_declare -e POWERLEVEL9K_USER_TEMPLATE "%n" - _p9k_declare -e POWERLEVEL9K_HOST_TEMPLATE "%m" - _p9k_declare -F POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD 3 - _p9k_declare -i POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION 2 - # Other options: "d h m s". - _p9k_declare -s POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT "H:M:S" - _p9k_declare -e POWERLEVEL9K_HOME_FOLDER_ABBREVIATION "~" - _p9k_declare -b POWERLEVEL9K_DIR_PATH_ABSOLUTE 0 - _p9k_declare -s POWERLEVEL9K_DIR_SHOW_WRITABLE '' - case $_POWERLEVEL9K_DIR_SHOW_WRITABLE in - true) _POWERLEVEL9K_DIR_SHOW_WRITABLE=1;; - v2) _POWERLEVEL9K_DIR_SHOW_WRITABLE=2;; - v3) _POWERLEVEL9K_DIR_SHOW_WRITABLE=3;; - *) _POWERLEVEL9K_DIR_SHOW_WRITABLE=0;; - esac - typeset -gi _POWERLEVEL9K_DIR_SHOW_WRITABLE - _p9k_declare -b POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER 0 - _p9k_declare -b POWERLEVEL9K_DIR_HYPERLINK 0 - _p9k_declare -s POWERLEVEL9K_SHORTEN_STRATEGY "" - local markers=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .ruby-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - ) - _p9k_declare -s POWERLEVEL9K_SHORTEN_FOLDER_MARKER "(${(j:|:)markers})" - # Shorten directory if it's longer than this even if there is space for it. - # The value can be either absolute (e.g., '80') or a percentage of terminal - # width (e.g, '50%'). If empty, directory will be shortened only when prompt - # doesn't fit. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique. - _p9k_declare -s POWERLEVEL9K_DIR_MAX_LENGTH 0 - # Individual elements are patterns. They are expanded with the options set - # by `emulate zsh && setopt extended_glob`. - _p9k_declare -a POWERLEVEL9K_DIR_PACKAGE_FILES -- package.json composer.json - # When dir is on the last prompt line, try to shorten it enough to leave at least this many - # columns for typing commands. Applies only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique. - _p9k_declare -i POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS 40 - # When dir is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. Applies - # only when POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique. - _p9k_declare -F POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT 50 - # POWERLEVEL9K_DIR_CLASSES allow you to specify custom styling and icons for different - # directories. - # - # POWERLEVEL9K_DIR_CLASSES must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. Icon. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there are no - # matches, there will be no icon and the styling is done according to POWERLEVEL9K_DIR_BACKGROUND, - # POWERLEVEL9K_DIR_FOREGROUND, etc. - # - # Example: - # - # POWERLEVEL9K_DIR_CLASSES=( - # '~/work(/*)#' WORK '(╯°□°)╯︵ ┻━┻' - # '~(/*)#' HOME '⌂' - # '*' DEFAULT '') - # - # POWERLEVEL9K_DIR_WORK_BACKGROUND=red - # POWERLEVEL9K_DIR_HOME_BACKGROUND=blue - # POWERLEVEL9K_DIR_DEFAULT_BACKGROUND=yellow - # - # With these settings, the current directory in the prompt may look like this: - # - # (╯°□°)╯︵ ┻━┻ ~/work/projects/important/urgent - # - # ⌂ ~/best/powerlevel10k - _p9k_declare -a POWERLEVEL9K_DIR_CLASSES - _p9k_declare -i POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH - _p9k_declare -e POWERLEVEL9K_SHORTEN_DELIMITER - _p9k_declare -s POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER '' - case $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER in - first|last) _POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER+=:0;; - (first|last):(|-)<->);; - *) _POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=;; - esac - [[ -z $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER ]] && _POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER= - _p9k_declare -i POWERLEVEL9K_SHORTEN_DIR_LENGTH - _p9k_declare -s POWERLEVEL9K_IP_INTERFACE "" - : ${_POWERLEVEL9K_IP_INTERFACE:='.*'} - _p9k_segment_in_use ip || _POWERLEVEL9K_IP_INTERFACE= - _p9k_declare -s POWERLEVEL9K_VPN_IP_INTERFACE "(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)" - : ${_POWERLEVEL9K_VPN_IP_INTERFACE:='.*'} - _p9k_segment_in_use vpn_ip || _POWERLEVEL9K_VPN_IP_INTERFACE= - _p9k_declare -b POWERLEVEL9K_VPN_IP_SHOW_ALL 0 - _p9k_declare -i POWERLEVEL9K_LOAD_WHICH 5 - case $_POWERLEVEL9K_LOAD_WHICH in - 1) _POWERLEVEL9K_LOAD_WHICH=1;; - 15) _POWERLEVEL9K_LOAD_WHICH=3;; - *) _POWERLEVEL9K_LOAD_WHICH=2;; - esac - _p9k_declare -F POWERLEVEL9K_LOAD_WARNING_PCT 50 - _p9k_declare -F POWERLEVEL9K_LOAD_CRITICAL_PCT 70 - _p9k_declare -b POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY 0 - _p9k_declare -b POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY 0 - _p9k_declare -b POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY 1 - _p9k_declare -b POWERLEVEL9K_GO_VERSION_PROJECT_ONLY 1 - _p9k_declare -b POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY 1 - _p9k_declare -b POWERLEVEL9K_PERLBREW_PROJECT_ONLY 1 - _p9k_declare -b POWERLEVEL9K_PERLBREW_SHOW_PREFIX 0 - _p9k_declare -b POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY 0 - _p9k_declare -b POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_NODENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_NODENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_RBENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_RBENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_SCALAENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_SCALAENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_PHPENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_PHPENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_LUAENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_LUAENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_JENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_JENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_PLENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_PLENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -b POWERLEVEL9K_PYENV_SHOW_SYSTEM 1 - _p9k_declare -a POWERLEVEL9K_PYENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -a POWERLEVEL9K_GOENV_SOURCES -- shell local global - _p9k_declare -b POWERLEVEL9K_GOENV_SHOW_SYSTEM 1 - _p9k_declare -b POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW 0 - _p9k_declare -b POWERLEVEL9K_ASDF_SHOW_SYSTEM 1 - _p9k_declare -a POWERLEVEL9K_ASDF_SOURCES -- shell local global - local var - for var in ${parameters[(I)POWERLEVEL9K_ASDF_*_PROMPT_ALWAYS_SHOW]}; do - _p9k_declare -b $var $_POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW - done - for var in ${parameters[(I)POWERLEVEL9K_ASDF_*_SHOW_SYSTEM]}; do - _p9k_declare -b $var $_POWERLEVEL9K_ASDF_SHOW_SYSTEM - done - for var in ${parameters[(I)POWERLEVEL9K_ASDF_*_SOURCES]}; do - _p9k_declare -a $var -- $_POWERLEVEL9K_ASDF_SOURCES - done - _p9k_declare -b POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW 1 - _p9k_declare -a POWERLEVEL9K_HASKELL_STACK_SOURCES -- shell local - _p9k_declare -b POWERLEVEL9K_RVM_SHOW_GEMSET 0 - _p9k_declare -b POWERLEVEL9K_RVM_SHOW_PREFIX 0 - _p9k_declare -b POWERLEVEL9K_CHRUBY_SHOW_VERSION 1 - _p9k_declare -b POWERLEVEL9K_CHRUBY_SHOW_ENGINE 1 - _p9k_declare -s POWERLEVEL9K_CHRUBY_SHOW_ENGINE_PATTERN - if (( _POWERLEVEL9K_CHRUBY_SHOW_ENGINE )); then - : ${_POWERLEVEL9K_CHRUBY_SHOW_ENGINE_PATTERN=*} - fi - _p9k_declare -b POWERLEVEL9K_STATUS_CROSS 0 - _p9k_declare -b POWERLEVEL9K_STATUS_OK 1 - _p9k_declare -b POWERLEVEL9K_STATUS_OK_PIPE 1 - _p9k_declare -b POWERLEVEL9K_STATUS_ERROR 1 - _p9k_declare -b POWERLEVEL9K_STATUS_ERROR_PIPE 1 - _p9k_declare -b POWERLEVEL9K_STATUS_ERROR_SIGNAL 1 - _p9k_declare -b POWERLEVEL9K_STATUS_SHOW_PIPESTATUS 1 - _p9k_declare -b POWERLEVEL9K_STATUS_HIDE_SIGNAME 0 - _p9k_declare -b POWERLEVEL9K_STATUS_VERBOSE_SIGNAME 1 - _p9k_declare -b POWERLEVEL9K_STATUS_EXTENDED_STATES 0 - _p9k_declare -b POWERLEVEL9K_STATUS_VERBOSE 1 - _p9k_declare -b POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE 0 - _p9k_declare -e POWERLEVEL9K_DATE_FORMAT "%D{%d.%m.%y}" - _p9k_declare -s POWERLEVEL9K_VCS_ACTIONFORMAT_FOREGROUND 1 - _p9k_declare -b POWERLEVEL9K_SHOW_CHANGESET 0 - _p9k_declare -e POWERLEVEL9K_VCS_LOADING_TEXT loading - _p9k_declare -a POWERLEVEL9K_VCS_GIT_HOOKS -- vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname - _p9k_declare -a POWERLEVEL9K_VCS_HG_HOOKS -- vcs-detect-changes - _p9k_declare -a POWERLEVEL9K_VCS_SVN_HOOKS -- vcs-detect-changes svn-detect-changes - # If it takes longer than this to fetch git repo status, display the prompt with a greyed out - # vcs segment and fix it asynchronously when the results come it. - _p9k_declare -F POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS 0.01 - (( POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS >= 0 )) || (( POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS = 0 )) - _p9k_declare -a POWERLEVEL9K_VCS_BACKENDS -- git - (( $+commands[git] )) || _POWERLEVEL9K_VCS_BACKENDS=(${_POWERLEVEL9K_VCS_BACKENDS:#git}) - _p9k_declare -b POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING 0 - _p9k_declare -i POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY -1 - _p9k_declare -i POWERLEVEL9K_VCS_STAGED_MAX_NUM 1 - _p9k_declare -i POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM 1 - _p9k_declare -i POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM 1 - _p9k_declare -i POWERLEVEL9K_VCS_CONFLICTED_MAX_NUM 1 - _p9k_declare -i POWERLEVEL9K_VCS_COMMITS_AHEAD_MAX_NUM -1 - _p9k_declare -i POWERLEVEL9K_VCS_COMMITS_BEHIND_MAX_NUM -1 - _p9k_declare -b POWERLEVEL9K_VCS_RECURSE_UNTRACKED_DIRS 0 - _p9k_declare -b POWERLEVEL9K_DISABLE_GITSTATUS 0 - _p9k_declare -e POWERLEVEL9K_VI_INSERT_MODE_STRING "INSERT" - _p9k_declare -e POWERLEVEL9K_VI_COMMAND_MODE_STRING "NORMAL" - # VISUAL mode is shown as NORMAL unless POWERLEVEL9K_VI_VISUAL_MODE_STRING is explicitly set. - _p9k_declare -e POWERLEVEL9K_VI_VISUAL_MODE_STRING - # OVERWRITE mode is shown as INSERT unless POWERLEVEL9K_VI_OVERWRITE_MODE_STRING is explicitly set. - _p9k_declare -e POWERLEVEL9K_VI_OVERWRITE_MODE_STRING - _p9k_declare -s POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV true - _p9k_declare -b POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION 1 - _p9k_declare -e POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER "(" - _p9k_declare -e POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER ")" - _p9k_declare -a POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES -- virtualenv venv .venv env - _POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES="${(j.|.)_POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES}" - _p9k_declare -b POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION 1 - _p9k_declare -e POWERLEVEL9K_NODEENV_LEFT_DELIMITER "[" - _p9k_declare -e POWERLEVEL9K_NODEENV_RIGHT_DELIMITER "]" - _p9k_declare -b POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE 1 - _p9k_declare -a POWERLEVEL9K_KUBECONTEXT_SHORTEN -- - # Defines context classes for the purpose of applying different styling to different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES must be an array with even number of elements. The first - # element in each pair defines a pattern against which the current context (in the format it is - # displayed in the prompt) gets matched. The second element defines context class. Patterns are - # tried in order. The first match wins. - # - # If a non-empty class is assigned to a context, the segment is styled with - # POWERLEVEL9K_KUBECONTEXT__BACKGROUND and POWERLEVEL9K_KUBECONTEXT__FOREGROUND where is - # uppercased . Otherwise with POWERLEVEL9K_KUBECONTEXT_BACKGROUND and - # POWERLEVEL9K_KUBECONTEXT_FOREGROUND. - # - # Example: Use red background for contexts containing "prod", green for "testing" and yellow for - # everything else. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' prod - # '*testing*' testing - # '*' other) - # - # POWERLEVEL9K_KUBECONTEXT_PROD_BACKGROUND=red - # POWERLEVEL9K_KUBECONTEXT_TESTING_BACKGROUND=green - # POWERLEVEL9K_KUBECONTEXT_OTHER_BACKGROUND=yellow - _p9k_declare -a POWERLEVEL9K_KUBECONTEXT_CLASSES -- - _p9k_declare -a POWERLEVEL9K_AWS_CLASSES -- - _p9k_declare -a POWERLEVEL9K_AZURE_CLASSES -- - _p9k_declare -a POWERLEVEL9K_TERRAFORM_CLASSES -- - _p9k_declare -b POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT 0 - _p9k_declare -a POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES -- 'service_account:*' SERVICE_ACCOUNT - # Specifies the format of java version. - # - # POWERLEVEL9K_JAVA_VERSION_FULL=true => 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03 - # POWERLEVEL9K_JAVA_VERSION_FULL=false => 1.8.0_212 - # - # These correspond to `java -fullversion` and `java -version` respectively. - _p9k_declare -b POWERLEVEL9K_JAVA_VERSION_FULL 1 - _p9k_declare -b POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE 0 - - # Format for the current time: 09:51:02. See `man 3 strftime`. - _p9k_declare -e POWERLEVEL9K_TIME_FORMAT "%D{%H:%M:%S}" - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - _p9k_declare -b POWERLEVEL9K_TIME_UPDATE_ON_COMMAND 0 - # If set to true, time will update every second. - _p9k_declare -b POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME 0 - - _p9k_declare -b POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH 0 - typeset -g _p9k_nix_shell_cond='${IN_NIX_SHELL:#0}' - if (( _POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH )); then - _p9k_nix_shell_cond+='${path[(r)/nix/store/*]}' - fi - - local -i i=1 - while (( i <= $#_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS )); do - local segment=${${(U)_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[i]}//İ/I} - local var=POWERLEVEL9K_${segment}_LEFT_DISABLED - (( $+parameters[$var] )) || var=POWERLEVEL9K_${segment}_DISABLED - if [[ ${(P)var} == true ]]; then - _POWERLEVEL9K_LEFT_PROMPT_ELEMENTS[i,i]=() - else - (( ++i )) - fi - done - - local -i i=1 - while (( i <= $#_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS )); do - local segment=${${(U)_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[i]}//İ/I} - local var=POWERLEVEL9K_${segment}_RIGHT_DISABLED - (( $+parameters[$var] )) || var=POWERLEVEL9K_${segment}_DISABLED - if [[ ${(P)var} == true ]]; then - _POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS[i,i]=() - else - (( ++i )) - fi - done - - local var - for var in ${(@)${parameters[(I)POWERLEVEL9K_*]}/(#m)*/${(M)${parameters[_$MATCH]-$MATCH}:#$MATCH}}; do - case $parameters[$var] in - (scalar|integer|float)*) typeset -g _$var=${(P)var};; - array*) eval 'typeset -ga '_$var'=("${'$var'[@]}")';; - esac - done -} - -function _p9k_on_widget_zle-keymap-select() { _p9k_check_visual_mode; __p9k_reset_state=2; } -function _p9k_on_widget_overwrite-mode() { _p9k_check_visual_mode; __p9k_reset_state=2; } -function _p9k_on_widget_vi-replace() { _p9k_check_visual_mode; __p9k_reset_state=2; } - -if [[ $ZSH_VERSION == (5.<3->*|<6->.*) ]]; then - function _p9k_check_visual_mode() { - [[ ${KEYMAP:-} == vicmd ]] || return 0 - local region=${${REGION_ACTIVE:-0}/2/1} - [[ $region != $_p9k__region_active ]] || return 0 - _p9k__region_active=$region - __p9k_reset_state=2 - } -else - function _p9k_check_visual_mode() {} -fi - -function _p9k_on_widget_visual-mode() { _p9k_check_visual_mode; } -function _p9k_on_widget_visual-line-mode() { _p9k_check_visual_mode; } -function _p9k_on_widget_deactivate-region() { _p9k_check_visual_mode; } - -function _p9k_on_widget_zle-line-init() { - (( _p9k__cursor_hidden )) || return 0 - _p9k__cursor_hidden=0 - print -rn -- $_p9k__cnorm -} - -function _p9k_on_widget_zle-line-finish() { - (( $+_p9k__line_finished )) && return - - local P9K_PROMPT=transient - - _p9k__line_finished= - (( _p9k_reset_on_line_finish )) && __p9k_reset_state=2 - (( $+functions[p10k-on-post-prompt] )) && p10k-on-post-prompt - - local -i optimized - - if [[ -n $_p9k_transient_prompt ]]; then - if [[ $_POWERLEVEL9K_TRANSIENT_PROMPT == always || $_p9k__cwd == $_p9k__last_prompt_pwd ]]; then - optimized=1 - __p9k_reset_state=2 - else - _p9k__last_prompt_pwd=$_p9k__cwd - fi - fi - - if [[ $1 == int ]]; then - _p9k__must_restore_prompt=1 - if (( !_p9k__restore_prompt_fd )); then - sysopen -o cloexec -ru _p9k__restore_prompt_fd /dev/null - zle -F $_p9k__restore_prompt_fd _p9k_restore_prompt - fi - fi - - if (( __p9k_reset_state == 2 )); then - if (( optimized )); then - RPROMPT= PROMPT=$_p9k_transient_prompt _p9k_reset_prompt - else - _p9k_reset_prompt - fi - fi - - _p9k__line_finished='%{%}' -} - -function _p9k_on_widget_send-break() { - _p9k_on_widget_zle-line-finish int -} - -# Usage example: _p9k_display_segment 58 _p9k__1rkubecontext hide -function _p9k_display_segment() { - [[ $_p9k__display_v[$1] == $3 ]] && return - _p9k__display_v[$1]=$3 - [[ $3 == hide ]] && typeset -g $2= || unset $2 - __p9k_reset_state=2 -} - -function _p9k_redraw() { - zle -F $1 - exec {1}>&- - _p9k__redraw_fd=0 - - () { - local -h WIDGET=zle-line-pre-redraw - _p9k_widget_hook '' - } -} - -function _p9k_deschedule_redraw() { - (( _p9k__redraw_fd )) || return - zle -F $_p9k__redraw_fd - exec {_p9k__redraw_fd}>&- - _p9k__redraw_fd=0 -} - -function _p9k_widget_hook() { - _p9k_deschedule_redraw - - if (( ${+functions[p10k-on-post-widget]} || ${#_p9k_show_on_command} )); then - local -a P9K_COMMANDS - if [[ "$_p9k__last_buffer" == "$PREBUFFER$BUFFER" ]]; then - P9K_COMMANDS=(${_p9k__last_commands[@]}) - else - _p9k__last_buffer="$PREBUFFER$BUFFER" - if [[ -n "$_p9k__last_buffer" ]]; then - # this must run with user options - _p9k_parse_buffer "$_p9k__last_buffer" $_POWERLEVEL9K_COMMANDS_MAX_TOKEN_COUNT - fi - _p9k__last_commands=(${P9K_COMMANDS[@]}) - fi - fi - - eval "$__p9k_intro" - (( _p9k__restore_prompt_fd )) && _p9k_restore_prompt $_p9k__restore_prompt_fd - if [[ $1 == (clear-screen|z4h-clear-screen-*-top) ]]; then - P9K_TTY=new - _p9k__expanded=0 - _p9k_reset_prompt - fi - __p9k_reset_state=1 - _p9k_check_visual_mode - local pat idx var - for pat idx var in $_p9k_show_on_command; do - if (( $P9K_COMMANDS[(I)$pat] )); then - _p9k_display_segment $idx $var show - else - _p9k_display_segment $idx $var hide - fi - done - (( $+functions[p10k-on-post-widget] )) && p10k-on-post-widget "${@:2}" - (( $+functions[_p9k_on_widget_$1] )) && _p9k_on_widget_$1 - (( __p9k_reset_state == 2 )) && _p9k_reset_prompt - __p9k_reset_state=0 -} - -function _p9k_widget() { - local f=${widgets[._p9k_orig_$1]:-} - local -i res - [[ -z $f ]] || { - [[ $f == user:-z4h-* ]] && { - "${f#user:}" "${@:2}" - res=$? - } || { - zle ._p9k_orig_$1 -- "${@:2}" - res=$? - } - } - (( ! __p9k_enabled )) || [[ $CONTEXT != start ]] || _p9k_widget_hook "$@" - return res -} - -function _p9k_widget_zle-line-pre-redraw-impl() { - (( __p9k_enabled )) && [[ $CONTEXT == start ]] || return 0 - ! (( ${+functions[p10k-on-post-widget]} || ${#_p9k_show_on_command} || _p9k__restore_prompt_fd || _p9k__redraw_fd )) && - [[ ${KEYMAP:-} != vicmd ]] && - return - (( PENDING || KEYS_QUEUED_COUNT )) && { - (( _p9k__redraw_fd )) || { - sysopen -o cloexec -ru _p9k__redraw_fd /dev/null - zle -F $_p9k__redraw_fd _p9k_redraw - } - return - } - _p9k_widget_hook zle-line-pre-redraw -} - -function _p9k_widget_send-break() { - (( ! __p9k_enabled )) || [[ $CONTEXT != start ]] || { - _p9k_widget_hook send-break "$@" - } - local f=${widgets[._p9k_orig_send-break]:-} - [[ -z $f ]] || zle ._p9k_orig_send-break -- "$@" -} - -typeset -gi __p9k_widgets_wrapped=0 - -function _p9k_wrap_widgets() { - (( __p9k_widgets_wrapped )) && return - - typeset -gir __p9k_widgets_wrapped=1 - local -a widget_list - if [[ $ZSH_VERSION == (5.<3->*|<6->.*) ]]; then - local -aU widget_list=( - zle-line-pre-redraw - zle-line-init - zle-line-finish - zle-keymap-select - overwrite-mode - vi-replace - visual-mode - visual-line-mode - deactivate-region - clear-screen - z4h-clear-screen-soft-top - z4h-clear-screen-hard-top - send-break - $_POWERLEVEL9K_HOOK_WIDGETS - ) - else - # There is no zle-line-pre-redraw in zsh < 5.3, so we have to wrap all widgets - # with key bindings. This costs extra 3ms: 1.5ms to fetch the list of widgets and - # another 1.5ms to wrap them. - if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then - local tmpdir=$TMPDIR - else - local tmpdir=/tmp - fi - local keymap tmp=$tmpdir/p10k.bindings.$sysparams[pid] - { - for keymap in $keymaps; do bindkey -M $keymap; done >$tmp - local -aU widget_list=( - zle-isearch-exit - zle-isearch-update - zle-line-init - zle-line-finish - zle-history-line-set - zle-keymap-select - send-break - $_POWERLEVEL9K_HOOK_WIDGETS - ${${${(f)"$(<$tmp)"}##* }:#(*\"|.*)} - ) - } always { - zf_rm -f -- $tmp - } - fi - - local widget - for widget in $widget_list; do - if (( ! $+functions[_p9k_widget_$widget] )); then - functions[_p9k_widget_$widget]='_p9k_widget '${(q)widget}' "$@"' - fi - if [[ $widget == zle-* && - $widgets[$widget] == user:azhw:* && - $functions[add-zle-hook-widget] ]]; then - add-zle-hook-widget $widget _p9k_widget_$widget - else - # The leading dot is to work around bugs in zsh-syntax-highlighting. - zle -A $widget ._p9k_orig_$widget - zle -N $widget _p9k_widget_$widget - fi - done 2>/dev/null # `zle -A` fails for inexisting widgets and complains to stderr - - case ${widgets[._p9k_orig_zle-line-pre-redraw]:-} in - user:-z4h-zle-line-pre-redraw) - function _p9k_widget_zle-line-pre-redraw() { - -z4h-zle-line-pre-redraw "$@" - _p9k_widget_zle-line-pre-redraw-impl - } - ;; - ?*) - function _p9k_widget_zle-line-pre-redraw() { - zle ._p9k_orig_zle-line-pre-redraw -- "$@" - local -i res=$? - _p9k_widget_zle-line-pre-redraw-impl - return res - } - ;; - '') - function _p9k_widget_zle-line-pre-redraw() { - _p9k_widget_zle-line-pre-redraw-impl - } - ;; - esac -} - -function _p9k_restore_prompt() { - eval "$__p9k_intro" - zle -F $1 - exec {1}>&- - _p9k__restore_prompt_fd=0 - - (( _p9k__must_restore_prompt )) || return 0 - _p9k__must_restore_prompt=0 - - unset _p9k__line_finished - _p9k__refresh_reason=restore - _p9k_set_prompt - _p9k__refresh_reason= - - _p9k__expanded=0 - _p9k_reset_prompt -} - -prompt__p9k_internal_nothing() { _p9k__prompt+='${_p9k__sss::=}'; } -instant_prompt__p9k_internal_nothing() { prompt__p9k_internal_nothing; } - -# _p9k_build_gap_post line_number -_p9k_build_gap_post() { - if [[ $1 == 1 ]]; then - local kind_l=first kind_u=FIRST - else - local kind_l=newline kind_u=NEWLINE - fi - _p9k_get_icon '' MULTILINE_${kind_u}_PROMPT_GAP_CHAR - local char=${_p9k__ret:- } - _p9k_prompt_length $char - if (( _p9k__ret != 1 || $#char != 1 )); then - >&2 print -rP -- "%F{red}WARNING!%f %BMULTILINE_${kind_u}_PROMPT_GAP_CHAR%b is not one character long. Will use ' '." - >&2 print -rP -- "Either change the value of %BPOWERLEVEL9K_MULTILINE_${kind_u}_PROMPT_GAP_CHAR%b or remove it." - char=' ' - fi - local style - _p9k_color prompt_multiline_${kind_l}_prompt_gap BACKGROUND "" - [[ -n $_p9k__ret ]] && _p9k_background $_p9k__ret - style+=$_p9k__ret - _p9k_color prompt_multiline_${kind_l}_prompt_gap FOREGROUND "" - [[ -n $_p9k__ret ]] && _p9k_foreground $_p9k__ret - style+=$_p9k__ret - _p9k_escape_style $style - style=$_p9k__ret - local exp=_POWERLEVEL9K_MULTILINE_${kind_u}_PROMPT_GAP_EXPANSION - (( $+parameters[$exp] )) && exp=${(P)exp} || exp='${P9K_GAP}' - [[ $char == '.' ]] && local s=',' || local s='.' - _p9k__ret=$'${${_p9k__g+\n}:-'$style'${${${_p9k__m:#-*}:+' - _p9k__ret+='${${_p9k__'$1'g+${(pl.$((_p9k__m+1)).. .)}}:-' - if [[ $exp == '${P9K_GAP}' ]]; then - _p9k__ret+='${(pl'$s'$((_p9k__m+1))'$s$s$char$s')}' - else - _p9k__ret+='${${P9K_GAP::=${(pl'$s'$((_p9k__m+1))'$s$s$char$s')}}+}' - _p9k__ret+='${:-"'$exp'"}' - style=1 - fi - _p9k__ret+='}' - if (( __p9k_ksh_arrays )); then - _p9k__ret+=$'$_p9k__rprompt${_p9k_t[$((!_p9k__ind))]}}:-\n}' - else - _p9k__ret+=$'$_p9k__rprompt${_p9k_t[$((1+!_p9k__ind))]}}:-\n}' - fi - [[ -n $style ]] && _p9k__ret+='%b%k%f' - _p9k__ret+='}' -} - -_p9k_init_lines() { - local -a left_segments=($_POWERLEVEL9K_LEFT_PROMPT_ELEMENTS) - local -a right_segments=($_POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS) - - if (( _POWERLEVEL9K_PROMPT_ON_NEWLINE )); then - left_segments+=(newline _p9k_internal_nothing) - fi - - local -i num_left_lines=$((1 + ${#${(@M)left_segments:#newline}})) - local -i num_right_lines=$((1 + ${#${(@M)right_segments:#newline}})) - if (( num_right_lines > num_left_lines )); then - repeat $((num_right_lines - num_left_lines)) left_segments=(newline $left_segments) - local -i num_lines=num_right_lines - else - if (( _POWERLEVEL9K_RPROMPT_ON_NEWLINE )); then - repeat $((num_left_lines - num_right_lines)) right_segments=(newline $right_segments) - else - repeat $((num_left_lines - num_right_lines)) right_segments+=newline - fi - local -i num_lines=num_left_lines - fi - - local -i i - for i in {1..$num_lines}; do - local -i left_end=${left_segments[(i)newline]} - local -i right_end=${right_segments[(i)newline]} - _p9k_line_segments_left+="${(pj:\0:)left_segments[1,left_end-1]}" - _p9k_line_segments_right+="${(pj:\0:)right_segments[1,right_end-1]}" - (( left_end > $#left_segments )) && left_segments=() || shift left_end left_segments - (( right_end > $#right_segments )) && right_segments=() || shift right_end right_segments - - _p9k_get_icon '' LEFT_SEGMENT_SEPARATOR - _p9k_get_icon 'prompt_empty_line' LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL $_p9k__ret - _p9k_escape $_p9k__ret - _p9k_line_prefix_left+='${_p9k__'$i'l-${${:-${_p9k__bg::=NONE}${_p9k__i::=0}${_p9k__sss::=%f'$_p9k__ret'}}+}' - _p9k_line_suffix_left+='%b%k$_p9k__sss%b%k%f' - - _p9k_escape ${(g::)_POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL} - [[ -n $_p9k__ret ]] && _p9k_line_never_empty_right+=1 || _p9k_line_never_empty_right+=0 - _p9k_line_prefix_right+='${_p9k__'$i'r-${${:-${_p9k__bg::=NONE}${_p9k__i::=0}${_p9k__sss::='$_p9k__ret'}}+}' - _p9k_line_suffix_right+='$_p9k__sss%b%k%f}' # gets overridden for _p9k_emulate_zero_rprompt_indent - if (( i == num_lines )); then - # it's safe to use _p9k_prompt_length on the last line because it cannot have prompt connection - _p9k_prompt_length ${(e)_p9k__ret} - (( _p9k__ret )) || _p9k_line_never_empty_right[-1]=0 - fi - done - - _p9k_get_icon '' LEFT_SEGMENT_END_SEPARATOR - if [[ -n $_p9k__ret ]]; then - _p9k__ret+=%b%k%f - # Not escaped for historical reasons. - _p9k__ret='${:-"'$_p9k__ret'"}' - if (( _POWERLEVEL9K_PROMPT_ON_NEWLINE )); then - _p9k_line_suffix_left[-2]+=$_p9k__ret - else - _p9k_line_suffix_left[-1]+=$_p9k__ret - fi - fi - - for i in {1..$num_lines}; do _p9k_line_suffix_left[i]+='}'; done - - if (( num_lines > 1 )); then - for i in {1..$((num_lines-1))}; do - _p9k_build_gap_post $i - _p9k_line_gap_post+=$_p9k__ret - done - - if [[ $+_POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then - _p9k_get_icon '' MULTILINE_FIRST_PROMPT_PREFIX - if [[ -n $_p9k__ret ]]; then - [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f - # Not escaped for historical reasons. - _p9k__ret='${_p9k__1l_frame-"'$_p9k__ret'"}' - _p9k_line_prefix_left[1]=$_p9k__ret$_p9k_line_prefix_left[1] - fi - fi - - if [[ $+_POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then - _p9k_get_icon '' MULTILINE_LAST_PROMPT_PREFIX - if [[ -n $_p9k__ret ]]; then - [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f - # Not escaped for historical reasons. - _p9k__ret='${_p9k__'$num_lines'l_frame-"'$_p9k__ret'"}' - _p9k_line_prefix_left[-1]=$_p9k__ret$_p9k_line_prefix_left[-1] - fi - fi - - _p9k_get_icon '' MULTILINE_FIRST_PROMPT_SUFFIX - if [[ -n $_p9k__ret ]]; then - [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f - _p9k_line_suffix_right[1]+='${_p9k__1r_frame-'${(qqq)_p9k__ret}'}' - _p9k_line_never_empty_right[1]=1 - fi - - _p9k_get_icon '' MULTILINE_LAST_PROMPT_SUFFIX - if [[ -n $_p9k__ret ]]; then - [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f - _p9k_line_suffix_right[-1]+='${_p9k__'$num_lines'r_frame-'${(qqq)_p9k__ret}'}' - # it's safe to use _p9k_prompt_length on the last line because it cannot have prompt connection - _p9k_prompt_length $_p9k__ret - (( _p9k__ret )) && _p9k_line_never_empty_right[-1]=1 - fi - - if (( num_lines > 2 )); then - if [[ $+_POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX == 1 || $_POWERLEVEL9K_PROMPT_ON_NEWLINE == 1 ]]; then - _p9k_get_icon '' MULTILINE_NEWLINE_PROMPT_PREFIX - if [[ -n $_p9k__ret ]]; then - [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f - for i in {2..$((num_lines-1))}; do - # Not escaped for historical reasons. - _p9k_line_prefix_left[i]='${_p9k__'$i'l_frame-"'$_p9k__ret'"}'$_p9k_line_prefix_left[i] - done - fi - fi - - _p9k_get_icon '' MULTILINE_NEWLINE_PROMPT_SUFFIX - if [[ -n $_p9k__ret ]]; then - [[ _p9k__ret == *%* ]] && _p9k__ret+=%b%k%f - for i in {2..$((num_lines-1))}; do - _p9k_line_suffix_right[i]+='${_p9k__'$i'r_frame-'${(qqq)_p9k__ret}'}' - done - _p9k_line_never_empty_right[2,-2]=${(@)_p9k_line_never_empty_right[2,-2]/0/1} - fi - fi - fi -} - -_p9k_all_params_eq() { - local key - for key in ${parameters[(I)${~1}]}; do - [[ ${(P)key} == $2 ]] || return - done -} - -_p9k_init_display() { - _p9k_display_k=(empty_line 1 ruler 3) - local -i n=3 i - local name - for i in {1..$#_p9k_line_segments_left}; do - local -i j=$((-$#_p9k_line_segments_left+i-1)) - _p9k_display_k+=( - $i $((n+=2)) $j $n - $i/left_frame $((n+=2)) $j/left_frame $n - $i/right_frame $((n+=2)) $j/right_frame $n - $i/left $((n+=2)) $j/left $n - $i/right $((n+=2)) $j/right $n - $i/gap $((n+=2)) $j/gap $n) - for name in ${${(@0)_p9k_line_segments_left[i]}%_joined}; do - _p9k_display_k+=($i/left/$name $((n+=2)) $j/left/$name $n) - done - for name in ${${(@0)_p9k_line_segments_right[i]}%_joined}; do - _p9k_display_k+=($i/right/$name $((n+=2)) $j/right/$name $n) - done - done -} - -_p9k_init_prompt() { - _p9k_t=($'\n' $'%{\n%}' '') - _p9k_prompt_overflow_bug && _p9k_t[2]=$'%{%G\n%}' - - _p9k_init_lines - - _p9k_gap_pre='${${:-${_p9k__x::=0}${_p9k__y::=1024}${_p9k__p::=$_p9k__lprompt$_p9k__rprompt}' - repeat 10; do - _p9k_gap_pre+='${_p9k__m::=$(((_p9k__x+_p9k__y)/2))}' - _p9k_gap_pre+='${_p9k__xy::=${${(%):-$_p9k__p%$_p9k__m(l./$_p9k__m;$_p9k__y./$_p9k__x;$_p9k__m)}##*/}}' - _p9k_gap_pre+='${_p9k__x::=${_p9k__xy%;*}}' - _p9k_gap_pre+='${_p9k__y::=${_p9k__xy#*;}}' - done - _p9k_gap_pre+='${_p9k__m::=$((_p9k__clm-_p9k__x-_p9k__ind-1))}' - _p9k_gap_pre+='}+}' - - _p9k_prompt_prefix_left='${${_p9k__clm::=$COLUMNS}+}${${COLUMNS::=1024}+}' - _p9k_prompt_prefix_right='${_p9k__'$#_p9k_line_segments_left'-${${_p9k__clm::=$COLUMNS}+}${${COLUMNS::=1024}+}' - _p9k_prompt_suffix_left='${${COLUMNS::=$_p9k__clm}+}' - _p9k_prompt_suffix_right='${${COLUMNS::=$_p9k__clm}+}}' - - if _p9k_segment_in_use vi_mode || _p9k_segment_in_use prompt_char; then - _p9k_prompt_prefix_left+='${${_p9k__keymap::=${KEYMAP:-$_p9k__keymap}}+}' - fi - if { _p9k_segment_in_use vi_mode && (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )) } || - { _p9k_segment_in_use prompt_char && (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )) }; then - _p9k_prompt_prefix_left+='${${_p9k__zle_state::=${ZLE_STATE:-$_p9k__zle_state}}+}' - fi - _p9k_prompt_prefix_left+='%b%k%f' - - # Bug fixed in: https://github.com/zsh-users/zsh/commit/3eea35d0853bddae13fa6f122669935a01618bf9. - # If affects most terminals when RPROMPT is non-empty and ZLE_RPROMPT_INDENT is zero. - # We can work around it as long as RPROMPT ends with a space. - if [[ -n $_p9k_line_segments_right[-1] && $_p9k_line_never_empty_right[-1] == 0 && - $ZLE_RPROMPT_INDENT == 0 ]] && - _p9k_all_params_eq '_POWERLEVEL9K_*WHITESPACE_BETWEEN_RIGHT_SEGMENTS' ' ' && - _p9k_all_params_eq '_POWERLEVEL9K_*RIGHT_RIGHT_WHITESPACE' ' ' && - _p9k_all_params_eq '_POWERLEVEL9K_*RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL' '' && - [[ $ZSH_VERSION != (5.7.<2->*|5.<8->*|<6->.*) ]]; then - _p9k_emulate_zero_rprompt_indent=1 - _p9k_prompt_prefix_left+='${${:-${_p9k__real_zle_rprompt_indent:=$ZLE_RPROMPT_INDENT}${ZLE_RPROMPT_INDENT::=1}${_p9k__ind::=0}}+}' - _p9k_line_suffix_right[-1]='${_p9k__sss:+${_p9k__sss% }%E}}' - else - _p9k_emulate_zero_rprompt_indent=0 - _p9k_prompt_prefix_left+='${${_p9k__ind::=${${ZLE_RPROMPT_INDENT:-1}/#-*/0}}+}' - fi - - if (( _POWERLEVEL9K_TERM_SHELL_INTEGRATION )); then - _p9k_prompt_prefix_left+=$'%{\e]133;A\a%}' - _p9k_prompt_suffix_left+=$'%{\e]133;B\a%}' - if (( $+_z4h_iterm_cmd && _z4h_can_save_restore_screen == 1 )); then - _p9k_prompt_prefix_left+=$'%{\ePtmux;\e\e]133;A\a\e\\%}' - _p9k_prompt_suffix_left+=$'%{\ePtmux;\e\e]133;B\a\e\\%}' - fi - fi - - if (( _POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT > 0 )); then - _p9k_t+=${(pl.$_POWERLEVEL9K_PROMPT_ADD_NEWLINE_COUNT..\n.)} - else - _p9k_t+='' - fi - _p9k_empty_line_idx=$#_p9k_t - if (( __p9k_ksh_arrays )); then - _p9k_prompt_prefix_left+='${_p9k_t[${_p9k__empty_line_i:-'$#_p9k_t'}-1]}' - else - _p9k_prompt_prefix_left+='${_p9k_t[${_p9k__empty_line_i:-'$#_p9k_t'}]}' - fi - - local -i num_lines=$#_p9k_line_segments_left - if (( $+terminfo[cuu1] )); then - _p9k_escape $terminfo[cuu1] - if (( __p9k_ksh_arrays )); then - local scroll=$'${_p9k_t[${_p9k__ruler_i:-1}-1]:+\n'$_p9k__ret'}' - else - local scroll=$'${_p9k_t[${_p9k__ruler_i:-1}]:+\n'$_p9k__ret'}' - fi - if (( num_lines > 1 )); then - local -i line_index= - for line_index in {1..$((num_lines-1))}; do - scroll='${_p9k__'$line_index-$'\n}'$scroll'${_p9k__'$line_index-$_p9k__ret'}' - done - fi - _p9k_prompt_prefix_left+='%{${_p9k__ipe-'$scroll'}%}' - fi - - _p9k_get_icon '' RULER_CHAR - local ruler_char=$_p9k__ret - _p9k_prompt_length $ruler_char - (( _p9k__ret == 1 && $#ruler_char == 1 )) || ruler_char=' ' - _p9k_color prompt_ruler BACKGROUND "" - if [[ -z $_p9k__ret && $ruler_char == ' ' ]]; then - local ruler=$'\n' - else - _p9k_background $_p9k__ret - local ruler=%b$_p9k__ret - _p9k_color prompt_ruler FOREGROUND "" - _p9k_foreground $_p9k__ret - ruler+=$_p9k__ret - [[ $ruler_char == '.' ]] && local sep=',' || local sep='.' - ruler+='${(pl'$sep'${$((_p9k__clm-_p9k__ind))/#-*/0}'$sep$sep$ruler_char$sep')}%k%f' - if (( __p9k_ksh_arrays )); then - ruler+='${_p9k_t[$((!_p9k__ind))]}' - else - ruler+='${_p9k_t[$((1+!_p9k__ind))]}' - fi - fi - _p9k_t+=$ruler - _p9k_ruler_idx=$#_p9k_t - if (( __p9k_ksh_arrays )); then - _p9k_prompt_prefix_left+='${(e)_p9k_t[${_p9k__ruler_i:-'$#_p9k_t'}-1]}' - else - _p9k_prompt_prefix_left+='${(e)_p9k_t[${_p9k__ruler_i:-'$#_p9k_t'}]}' - fi - - ( _p9k_segment_in_use time && (( _POWERLEVEL9K_TIME_UPDATE_ON_COMMAND )) ) - _p9k_reset_on_line_finish=$((!$?)) - - _p9k_t+=$_p9k_gap_pre - _p9k_gap_pre='${(e)_p9k_t['$(($#_p9k_t - __p9k_ksh_arrays))']}' - _p9k_t+=$_p9k_prompt_prefix_left - _p9k_prompt_prefix_left='${(e)_p9k_t['$(($#_p9k_t - __p9k_ksh_arrays))']}' -} - -_p9k_init_ssh() { - # The following code is based on Pure: - # https://github.com/sindresorhus/pure/blob/e8abf9d37185ec9b7b4398ca9c5eba555a1028eb/pure.zsh. - # - # License: https://github.com/sindresorhus/pure/blob/e8abf9d37185ec9b7b4398ca9c5eba555a1028eb/license. - - [[ -n $P9K_SSH && $_P9K_SSH_TTY == $TTY ]] && return - typeset -gix P9K_SSH=0 - typeset -gx _P9K_SSH_TTY=$TTY - if [[ -n $SSH_CLIENT || -n $SSH_TTY || -n $SSH_CONNECTION ]]; then - P9K_SSH=1 - return 0 - fi - - # When changing user on a remote system, the $SSH_CONNECTION environment variable can be lost. - # Attempt detection via `who`. - (( $+commands[who] )) || return - - local ipv6='(([0-9a-fA-F]+:)|:){2,}[0-9a-fA-F]+' # Simplified, only checks partial pattern. - local ipv4='([0-9]{1,3}\.){3}[0-9]+' # Simplified, allows invalid ranges. - # Assume two non-consecutive periods represents a hostname. Matches `x.y.z`, but not `x.y`. - local hostname='([.][^. ]+){2}' - - local w - w="$(who -m 2>/dev/null)" || w=${(@M)${(f)"$(who 2>/dev/null)"}:#*[[:space:]]${TTY#/dev/}[[:space:]]*} - - # Usually the remote address is surrounded by parenthesis but not on all systems (e.g., Busybox). - [[ $w =~ "\(?($ipv4|$ipv6|$hostname)\)?\$" ]] && P9K_SSH=1 -} - -_p9k_init_toolbox() { - [[ -z $P9K_TOOLBOX_NAME ]] || return 0 - if [[ -f /run/.containerenv && -r /run/.containerenv ]]; then - local name=(${(Q)${${(@M)${(f)"$(|4801)}\1$DEFAULT_USER\1$P9K_SSH\1$+commands[uname]\1' - _p9k__param_pat+=$'$__p9k_root_dir\1$functions[p10k-on-init]\1$functions[p10k-on-pre-prompt]\1' - _p9k__param_pat+=$'$functions[p10k-on-post-widget]\1$functions[p10k-on-post-prompt]\1' - _p9k__param_pat+=$'$+commands[git]\1$terminfo[colors]\1${+_z4h_iterm_cmd}\1' - _p9k__param_pat+=$'$_z4h_can_save_restore_screen' - local MATCH - IFS=$'\1' _p9k__param_pat+="${(@)${(@o)parameters[(I)POWERLEVEL9K_*]}:/(#m)*/\${${(q)MATCH}-$IFS\}}" - IFS=$'\2' _p9k__param_sig="${(e)_p9k__param_pat}" -} - -function _p9k_set_os() { - _p9k_os=$1 - _p9k_get_icon prompt_os_icon $2 - _p9k_os_icon=$_p9k__ret -} - -function _p9k_init_cacheable() { - _p9k_init_icons - _p9k_init_params - _p9k_init_prompt - _p9k_init_display - - # https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda#backward-compatibility - if [[ $VTE_VERSION != (<1-4602>|4801) ]]; then - _p9k_term_has_href=1 - fi - - local elem func - local -i i=0 - - for i in {1..$#_p9k_line_segments_left}; do - for elem in ${${${(@0)_p9k_line_segments_left[i]}%_joined}//-/_}; do - local var=POWERLEVEL9K_${${(U)elem}//İ/I}_SHOW_ON_COMMAND - (( $+parameters[$var] )) || continue - _p9k_show_on_command+=( - $'(|*[/\0])('${(j.|.)${(P)var}}')' - $((1+_p9k_display_k[$i/left/$elem])) - _p9k__${i}l$elem) - done - for elem in ${${${(@0)_p9k_line_segments_right[i]}%_joined}//-/_}; do - local var=POWERLEVEL9K_${${(U)elem}//İ/I}_SHOW_ON_COMMAND - (( $+parameters[$var] )) || continue - local cmds=(${(P)var}) - _p9k_show_on_command+=( - $'(|*[/\0])('${(j.|.)${(P)var}}')' - $((1+$_p9k_display_k[$i/right/$elem])) - _p9k__${i}r$elem) - done - done - - if [[ $_POWERLEVEL9K_TRANSIENT_PROMPT != off ]]; then - local sep=$'\1' - _p9k_transient_prompt='%b%k%s%u%(?'$sep - _p9k_color prompt_prompt_char_OK_VIINS FOREGROUND 76 - _p9k_foreground $_p9k__ret - _p9k_transient_prompt+=$_p9k__ret - _p9k_transient_prompt+='${${P9K_CONTENT::="❯"}+}' - _p9k_param prompt_prompt_char_OK_VIINS CONTENT_EXPANSION '${P9K_CONTENT}' - _p9k_transient_prompt+='${:-"'$_p9k__ret'"}' - _p9k_transient_prompt+=$sep - _p9k_color prompt_prompt_char_ERROR_VIINS FOREGROUND 196 - _p9k_foreground $_p9k__ret - _p9k_transient_prompt+=$_p9k__ret - _p9k_transient_prompt+='${${P9K_CONTENT::="❯"}+}' - _p9k_param prompt_prompt_char_ERROR_VIINS CONTENT_EXPANSION '${P9K_CONTENT}' - _p9k_transient_prompt+='${:-"'$_p9k__ret'"}' - _p9k_transient_prompt+=')%b%k%f%s%u ' - if (( _POWERLEVEL9K_TERM_SHELL_INTEGRATION )); then - _p9k_transient_prompt=$'%{\e]133;A\a%}'$_p9k_transient_prompt$'%{\e]133;B\a%}' - if (( $+_z4h_iterm_cmd && _z4h_can_save_restore_screen == 1 )); then - _p9k_transient_prompt=$'%{\ePtmux;\e\e]133;A\a\e\\%}'$_p9k_transient_prompt$'%{\ePtmux;\e\e]133;B\a\e\\%}' - fi - fi - fi - - _p9k_uname="$(uname)" - [[ $_p9k_uname == Linux ]] && _p9k_uname_o="$(uname -o 2>/dev/null)" - _p9k_uname_m="$(uname -m)" - - if [[ $_p9k_uname == Linux && $_p9k_uname_o == Android ]]; then - _p9k_set_os Android ANDROID_ICON - else - case $_p9k_uname in - SunOS) _p9k_set_os Solaris SUNOS_ICON;; - Darwin) _p9k_set_os OSX APPLE_ICON;; - CYGWIN*|MSYS*|MINGW*) _p9k_set_os Windows WINDOWS_ICON;; - FreeBSD|OpenBSD|DragonFly) _p9k_set_os BSD FREEBSD_ICON;; - Linux) - _p9k_os='Linux' - local os_release_id - if [[ -r /etc/os-release ]]; then - local lines=(${(f)"$( 0 )); then - local state - for state in ${(k)__p9k_vcs_states}; do - _p9k_param prompt_vcs_$state CONTENT_EXPANSION x - if [[ -z $_p9k__ret ]]; then - _p9k_vcs_index=-1 - break - fi - done - fi - if (( _p9k_vcs_index == -1 )); then - _p9k_vcs_index=0 - _p9k_vcs_line_index=0 - _p9k_vcs_side= - fi - fi -} - -_p9k_init_vcs() { - if ! _p9k_segment_in_use vcs || (( ! $#_POWERLEVEL9K_VCS_BACKENDS )); then - (( $+functions[gitstatus_stop_p9k_] )) && gitstatus_stop_p9k_ POWERLEVEL9K - unset _p9k_preinit - return - fi - - _p9k_vcs_info_init - if (( $+functions[_p9k_preinit] )); then - if (( $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )); then - () { - trap 'return 130' INT - { - gitstatus_start_p9k_ POWERLEVEL9K - } always { - trap ':' INT - } - } - fi - (( $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) || _p9k__instant_prompt_disabled=1 - return 0 - fi - (( _POWERLEVEL9K_DISABLE_GITSTATUS )) && return - (( $_POWERLEVEL9K_VCS_BACKENDS[(I)git] )) || return - - local gitstatus_dir=${_POWERLEVEL9K_GITSTATUS_DIR:-${__p9k_root_dir}/gitstatus} - - typeset -g _p9k_preinit="function _p9k_preinit() { - (( $+commands[git] )) || { unfunction _p9k_preinit; return 1 } - [[ \$ZSH_VERSION == ${(q)ZSH_VERSION} ]] || return - [[ -r ${(q)gitstatus_dir}/gitstatus.plugin.zsh ]] || return - builtin source ${(q)gitstatus_dir}/gitstatus.plugin.zsh _p9k_ || return - GITSTATUS_AUTO_INSTALL=${(q)GITSTATUS_AUTO_INSTALL} \ - GITSTATUS_DAEMON=${(q)GITSTATUS_DAEMON} \ - GITSTATUS_CACHE_DIR=${(q)GITSTATUS_CACHE_DIR} \ - GITSTATUS_NUM_THREADS=${(q)GITSTATUS_NUM_THREADS} \ - GITSTATUS_LOG_LEVEL=${(q)GITSTATUS_LOG_LEVEL} \ - GITSTATUS_ENABLE_LOGGING=${(q)GITSTATUS_ENABLE_LOGGING} \ - gitstatus_start_p9k_ \ - -s $_POWERLEVEL9K_VCS_STAGED_MAX_NUM \ - -u $_POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM \ - -d $_POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM \ - -c $_POWERLEVEL9K_VCS_CONFLICTED_MAX_NUM \ - -m $_POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY \ - ${${_POWERLEVEL9K_VCS_RECURSE_UNTRACKED_DIRS:#0}:+-e} \ - -a POWERLEVEL9K - }" - builtin source $gitstatus_dir/gitstatus.plugin.zsh _p9k_ || return - () { - trap 'return 130' INT - { - gitstatus_start_p9k_ \ - -s $_POWERLEVEL9K_VCS_STAGED_MAX_NUM \ - -u $_POWERLEVEL9K_VCS_UNSTAGED_MAX_NUM \ - -d $_POWERLEVEL9K_VCS_UNTRACKED_MAX_NUM \ - -c $_POWERLEVEL9K_VCS_CONFLICTED_MAX_NUM \ - -m $_POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY \ - ${${_POWERLEVEL9K_VCS_RECURSE_UNTRACKED_DIRS:#0}:+-e} \ - POWERLEVEL9K - } always { - trap ':' INT - } - } - (( $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) || _p9k__instant_prompt_disabled=1 -} - -function _p9k_iterm2_precmd() { - builtin zle && return - if (( _p9k__iterm_cmd )) && [[ -t 1 ]]; then - (( _p9k__iterm_cmd == 1 )) && builtin print -n '\e]133;C;\a' - builtin printf '\e]133;D;%s\a' $1 - fi - typeset -gi _p9k__iterm_cmd=1 -} - -function _p9k_iterm2_preexec() { - [[ -t 1 ]] && builtin print -n '\e]133;C;\a' - typeset -gi _p9k__iterm_cmd=2 -} - -_p9k_init() { - _p9k_init_vars - _p9k_restore_state || _p9k_init_cacheable - - typeset -g P9K_OS_ICON=$_p9k_os_icon - - local -a _p9k__async_segments_compute - - local -i i - local elem - - _p9k__prompt_side=left - _p9k__segment_index=1 - for i in {1..$#_p9k_line_segments_left}; do - for elem in ${${(@0)_p9k_line_segments_left[i]}%_joined}; do - local f_init=_p9k_prompt_${elem}_init - (( $+functions[$f_init] )) && $f_init - (( ++_p9k__segment_index )) - done - done - - _p9k__prompt_side=right - _p9k__segment_index=1 - for i in {1..$#_p9k_line_segments_right}; do - for elem in ${${(@0)_p9k_line_segments_right[i]}%_joined}; do - local f_init=_p9k_prompt_${elem}_init - (( $+functions[$f_init] )) && $f_init - (( ++_p9k__segment_index )) - done - done - - if [[ -n $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE || - -n $_POWERLEVEL9K_IP_INTERFACE || - -n $_POWERLEVEL9K_VPN_IP_INTERFACE ]]; then - _p9k_prompt_net_iface_init - fi - - if [[ -n $_p9k__async_segments_compute ]]; then - functions[_p9k_async_segments_compute]=${(pj:\n:)_p9k__async_segments_compute} - _p9k_worker_start - fi - - local k v - for k v in ${(kv)_p9k_display_k}; do - [[ $k == -* ]] && continue - _p9k__display_v[v]=$k - _p9k__display_v[v+1]=show - done - _p9k__display_v[2]=hide - _p9k__display_v[4]=hide - - if (( $+functions[iterm2_decorate_prompt] )); then - _p9k__iterm2_decorate_prompt=$functions[iterm2_decorate_prompt] - function iterm2_decorate_prompt() { - typeset -g ITERM2_PRECMD_PS1=$PROMPT - typeset -g ITERM2_SHOULD_DECORATE_PROMPT= - } - fi - if (( $+functions[iterm2_precmd] )); then - _p9k__iterm2_precmd=$functions[iterm2_precmd] - functions[iterm2_precmd]='local _p9k_status=$?; zle && return; () { return $_p9k_status; }; '$_p9k__iterm2_precmd - fi - - if (( _POWERLEVEL9K_TERM_SHELL_INTEGRATION && - ! $+_z4h_iterm_cmd && - ! $+functions[iterm2_decorate_prompt] && - ! $+functions[iterm2_precmd] )); then - typeset -gi _p9k__iterm_cmd=0 - fi - - if _p9k_segment_in_use todo; then - if [[ -n ${_p9k__todo_command::=${commands[todo.sh]}} ]]; then - local todo_global=/etc/todo/config - elif [[ -n ${_p9k__todo_command::=${commands[todo-txt]}} ]]; then - local todo_global=/etc/todo-txt/config - fi - if [[ -n $_p9k__todo_command ]]; then - _p9k__todo_file="$(exec -a $_p9k__todo_command ${commands[bash]:-:} 3>&1 &>/dev/null -c " - [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo/config - [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/todo.cfg - [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\$HOME/.todo.cfg - [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${XDG_CONFIG_HOME:-\$HOME/.config}/todo/config - [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=${(qqq)_p9k__todo_command:h}/todo.cfg - [ -e \"\$TODOTXT_CFG_FILE\" ] || TODOTXT_CFG_FILE=\${TODOTXT_GLOBAL_CFG_FILE:-${(qqq)todo_global}} - [ -r \"\$TODOTXT_CFG_FILE\" ] || exit - source \"\$TODOTXT_CFG_FILE\" - printf "%s" \"\$TODO_FILE\" >&3")" - fi - fi - - if _p9k_segment_in_use dir && - [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name && $+commands[jq] == 0 ]]; then - print -rP -- '%F{yellow}WARNING!%f %BPOWERLEVEL9K_SHORTEN_STRATEGY=truncate_with_package_name%b requires %F{green}jq%f.' - print -rP -- 'Either install %F{green}jq%f or change the value of %BPOWERLEVEL9K_SHORTEN_STRATEGY%b.' - fi - - _p9k_init_vcs - - if (( _p9k__instant_prompt_disabled )); then - (( _POWERLEVEL9K_DISABLE_INSTANT_PROMPT )) && unset __p9k_instant_prompt_erased - _p9k_delete_instant_prompt - _p9k_dumped_instant_prompt_sigs=() - fi - - if (( $+__p9k_instant_prompt_sourced && __p9k_instant_prompt_sourced != __p9k_instant_prompt_version )); then - _p9k_delete_instant_prompt - _p9k_dumped_instant_prompt_sigs=() - fi - - if (( $+__p9k_instant_prompt_erased )); then - unset __p9k_instant_prompt_erased - if [[ -w $TTY ]]; then - local tty=$TTY - elif [[ -w /dev/tty ]]; then - local tty=/dev/tty - else - local tty=/dev/null - fi - { - >&2 echo -E - "" - >&2 echo -E - "${(%):-[%1FERROR%f]: When using instant prompt, Powerlevel10k must be loaded before the first prompt.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):-You can:}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- - %BRecommended%b: Change the way Powerlevel10k is loaded from %B$__p9k_zshrc_u%b.}" - if (( _p9k_term_has_href )); then - >&2 echo - "${(%):- See \e]8;;https://github.com/romkatv/powerlevel10k/blob/master/README.md#installation\ahttps://github.com/romkatv/powerlevel10k/blob/master/README.md#installation\e]8;;\a.}" - else - >&2 echo - "${(%):- See https://github.com/romkatv/powerlevel10k/blob/master/README.md#installation.}" - fi - if (( $+zsh_defer_options )); then - >&2 echo -E - "" - >&2 echo -E - "${(%):- NOTE: Do not use %1Fzsh-defer%f to load %Upowerlevel10k.zsh-theme%u.}" - elif (( $+functions[zinit] )); then - >&2 echo -E - "" - >&2 echo -E - "${(%):- NOTE: If using %2Fzinit%f to load %3F'romkatv/powerlevel10k'%f, %Bdo not apply%b %1Fice wait%f.}" - elif (( $+functions[zplugin] )); then - >&2 echo -E - "" - >&2 echo -E - "${(%):- NOTE: If using %2Fzplugin%f to load %3F'romkatv/powerlevel10k'%f, %Bdo not apply%b %1Fice wait%f.}" - fi - >&2 echo -E - "" - >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - >&2 echo -E - "${(%):- * Zsh will start %Bquickly%b.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- - Disable instant prompt either by running %Bp10k configure%b or by manually}" - >&2 echo -E - "${(%):- defining the following parameter:}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- %3Ftypeset%f -g POWERLEVEL9K_INSTANT_PROMPT=off}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- * You %Bwill not%b see this error message again.}" - >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- - Do nothing.}" - >&2 echo -E - "" - >&2 echo -E - "${(%):- * You %Bwill%b see this error message every time you start zsh.}" - >&2 echo -E - "${(%):- * Zsh will start %Bslowly%b.}" - >&2 echo -E - "" - } 2>>$tty - fi -} - -_p9k_deinit() { - (( $+functions[_p9k_preinit] )) && unfunction _p9k_preinit - (( $+functions[gitstatus_stop_p9k_] )) && gitstatus_stop_p9k_ POWERLEVEL9K - _p9k_worker_stop - if (( _p9k__state_dump_fd )); then - zle -F $_p9k__state_dump_fd - exec {_p9k__state_dump_fd}>&- - fi - if (( _p9k__restore_prompt_fd )); then - zle -F $_p9k__restore_prompt_fd - exec {_p9k__restore_prompt_fd}>&- - fi - if (( _p9k__redraw_fd )); then - zle -F $_p9k__redraw_fd - exec {_p9k__redraw_fd}>&- - fi - (( $+_p9k__iterm2_precmd )) && functions[iterm2_precmd]=$_p9k__iterm2_precmd - (( $+_p9k__iterm2_decorate_prompt )) && functions[iterm2_decorate_prompt]=$_p9k__iterm2_decorate_prompt - unset -m '(_POWERLEVEL9K_|P9K_|_p9k_)*~(P9K_SSH|_P9K_SSH_TTY|P9K_TOOLBOX_NAME|P9K_TTY|_P9K_TTY)' - [[ -n $__p9k_locale ]] || unset __p9k_locale -} - -typeset -gi __p9k_enabled=0 -typeset -gi __p9k_configured=0 -typeset -gri __p9k_instant_prompt_disabled=1 - -# `typeset -g` doesn't roundtrip in zsh prior to 5.4. -if [[ $ZSH_VERSION == (5.<4->*|<6->.*) ]]; then - typeset -gri __p9k_dumps_enabled=1 -else - typeset -gri __p9k_dumps_enabled=0 -fi - -_p9k_do_nothing() { true; } - -_p9k_precmd_first() { - eval "$__p9k_intro" - if [[ -n $KITTY_SHELL_INTEGRATION && KITTY_SHELL_INTEGRATION[(wIe)no-prompt-mark] -eq 0 ]]; then - KITTY_SHELL_INTEGRATION+=' no-prompt-mark' - (( $+__p9k_force_term_shell_integration )) || typeset -gri __p9k_force_term_shell_integration=1 - fi - typeset -ga precmd_functions=(${precmd_functions:#_p9k_precmd_first}) -} - -_p9k_setup() { - (( __p9k_enabled )) && return - - prompt_opts=(percent subst) - if (( ! $+__p9k_instant_prompt_active )); then - prompt_opts+=sp - prompt_opts+=cr - fi - - prompt_powerlevel9k_teardown - __p9k_enabled=1 - typeset -ga preexec_functions=(_p9k_preexec1 $preexec_functions _p9k_preexec2) - typeset -ga precmd_functions=(_p9k_do_nothing _p9k_precmd_first $precmd_functions _p9k_precmd) -} - -prompt_powerlevel9k_setup() { - _p9k_restore_special_params - eval "$__p9k_intro" - _p9k_setup -} - -prompt_powerlevel9k_teardown() { - _p9k_restore_special_params - eval "$__p9k_intro" - add-zsh-hook -D precmd '(_p9k_|powerlevel9k_)*' - add-zsh-hook -D preexec '(_p9k_|powerlevel9k_)*' - PROMPT='%m%# ' - RPROMPT= - if (( __p9k_enabled )); then - _p9k_deinit - __p9k_enabled=0 - fi -} - -typeset -gr __p9k_p10k_usage="Usage: %2Fp10k%f %Bcommand%b [options] - -Commands: - - %Bconfigure%b run interactive configuration wizard - %Breload%b reload configuration - %Bsegment%b print a user-defined prompt segment - %Bdisplay%b show, hide or toggle prompt parts - %Bhelp%b print this help message - -Print help for a specific command: - - %2Fp10k%f %Bhelp%b command" - -typeset -gr __p9k_p10k_segment_usage="Usage: %2Fp10k%f %Bsegment%b [-h] [{+|-}re] [-s state] [-b bg] [-f fg] [-i icon] [-c cond] [-t text] - -Print a user-defined prompt segment. Can be called only during prompt rendering. - -Options: - -t text segment's main content; will undergo prompt expansion: '%%F{blue}%%*%%f' will - show as %F{blue}%*%f; default is empty - -i icon segment's icon; default is empty - -r icon is a symbolic reference that needs to be resolved; for example, 'LOCK_ICON' - +r icon is already resolved and should be printed literally; for example, '⭐'; - this is the default; you can also use \$'\u2B50' if you don't want to have - non-ascii characters in source code - -b bg background color; for example, 'blue', '4', or '#0000ff'; empty value means - transparent background, as in '%%k'; default is black - -f fg foreground color; for example, 'blue', '4', or '#0000ff'; empty value means - default foreground color, as in '%%f'; default is empty - -s state segment's state for the purpose of applying styling options; if you want to - to be able to use POWERLEVEL9K parameters to specify different colors or icons - depending on some property, use different states for different values of that - property - -c condition; if empty after parameter expansion and process substitution, the - segment is hidden; this is an advanced feature, use with caution; default is '1' - -e segment's main content will undergo parameter expansion and process - substitution; the content will be surrounded with double quotes and thus - should quote its own double quotes; this is an advanced feature, use with - caution - +e segment's main content should not undergo parameter expansion and process - substitution; this is the default - -h print this help message - -Example: 'core' segment tells you if there is a file name 'core' in the current directory. - -- Segment's icon is '⭐'. -- Segment's text is the file's size in bytes. -- If you have permissions to delete the file, state is DELETABLE. If not, it's PROTECTED. - - zmodload -F zsh/stat b:zstat - - function prompt_core() { - local size=() - if ! zstat -A size +size core 2>/dev/null; then - # No 'core' file in the current directory. - return - fi - if [[ -w . ]]; then - local state=DELETABLE - else - local state=PROTECTED - fi - p10k segment -s \$state -i '⭐' -f blue -t \${size[1]}b - } - -To enable this segment, add 'core' to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or -POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. - -Example customizations: - - # Override default foreground. - POWERLEVEL9K_CORE_FOREGROUND=red - - # Override foreground when DELETABLE. - POWERLEVEL9K_CORE_DELETABLE_BACKGROUND=green - - # Override icon when PROTECTED. - POWERLEVEL9K_CORE_PROTECTED_VISUAL_IDENTIFIER_EXPANSION='❎' - - # Don't show file size when PROTECTED. - POWERLEVEL9K_CORE_PROTECTED_CONTENT_EXPANSION=''" - -typeset -gr __p9k_p10k_configure_usage="Usage: %2Fp10k%f %Bconfigure%b - -Run interactive configuration wizard." - -typeset -gr __p9k_p10k_reload_usage="Usage: %2Fp10k%f %Breload%b - -Reload configuration." - -typeset -gr __p9k_p10k_finalize_usage="Usage: %2Fp10k%f %Bfinalize%b - -Perform the final stage of initialization. Must be called at the very end of zshrc." - -typeset -gr __p9k_p10k_display_usage="Usage: %2Fp10k%f %Bdisplay%b part-pattern=state-list... - - Show, hide or toggle prompt parts. If called from zle, the current - prompt is refreshed. - -Usage: %2Fp10k%f %Bdisplay%b -a [part-pattern]... - - Populate array \`reply\` with states of prompt parts matching the patterns. - If no patterns are supplied, assume \`*\`. - -Usage: %2Fp10k%f %Bdisplay%b -r - - Redisplay prompt. - -Parts: - empty_line empty line (duh) - ruler ruler; if POWERLEVEL9K_RULER_CHAR=' ', it's essentially another - new_line - N prompt line number N, 1-based; counting from the top if positive, - from the bottom if negative - N/left_frame left frame on the Nth line - N/left left prompt on the Nth line - N/gap gap between left and right prompts on the Nth line - N/right right prompt on the Nth line - N/right_frame right frame on the Nth line - N/left/S segment S within N/left (dir, time, etc.) - N/right/S segment S within N/right (dir, time, etc.) - -Part States: - show the part is displayed - hide the part is not displayed - print the part is printed in precmd; only applicable to empty_line and - ruler; unlike show, the effects of print cannot be undone with hide; - print used to look better after \`clear\` but this is no longer the - case; it's best to avoid it unless you know what you are doing - -part-pattern is a glob pattern for parts. Examples: - - */kubecontext all kubecontext prompt segments, regardless of where - they are - 1/(right|right_frame) all prompt segments and frame from the right side of - the first line - -state-list is a comma-separated list of states. Must have at least one element. -If more than one, states will rotate. - -Example: Bind Ctrl+P to toggle right prompt. - - function toggle-right-prompt() { p10k display '*/right'=hide,show; } - zle -N toggle-right-prompt - bindkey '^P' toggle-right-prompt - -Example: Print the current state of all prompt parts: - - typeset -A reply - p10k display -a '*' - printf '%%-32s = %%q\n' \${(@kv)reply} | sort -" - -# 0 -- reset-prompt not blocked -# 1 -- reset-prompt blocked and not needed -# 2 -- reset-prompt blocked and needed -typeset -gi __p9k_reset_state - -function p10k() { - [[ $# != 1 || $1 != finalize ]] || { p10k-instant-prompt-finalize; return 0 } - - eval "$__p9k_intro_no_reply" - - if (( !ARGC )); then - print -rP -- $__p9k_p10k_usage >&2 - return 1 - fi - - case $1 in - segment) - local REPLY - local -a reply - shift - local -i OPTIND - local OPTARG opt state bg=0 fg icon cond text ref=0 expand=0 - while getopts ':s:b:f:i:c:t:reh' opt; do - case $opt in - s) state=$OPTARG;; - b) bg=$OPTARG;; - f) fg=$OPTARG;; - i) icon=$OPTARG;; - c) cond=${OPTARG:-'${:-}'};; - t) text=$OPTARG;; - r) ref=1;; - e) expand=1;; - +r) ref=0;; - +e) expand=0;; - h) print -rP -- $__p9k_p10k_segment_usage; return 0;; - ?) print -rP -- $__p9k_p10k_segment_usage >&2; return 1;; - esac - done - if (( OPTIND <= ARGC )); then - print -rP -- $__p9k_p10k_segment_usage >&2 - return 1 - fi - if [[ -z $_p9k__prompt_side ]]; then - print -rP -- "%1F[ERROR]%f %Bp10k segment%b: can be called only during prompt rendering." >&2 - if (( !ARGC )); then - print -rP -- "" - print -rP -- "For help, type:" >&2 - print -rP -- "" - print -rP -- " %2Fp10k%f %Bhelp%b %Bsegment%b" >&2 - fi - return 1 - fi - (( ref )) || icon=$'\1'$icon - typeset -i _p9k__has_upglob - "_p9k_${_p9k__prompt_side}_prompt_segment" "prompt_${_p9k__segment_name}${state:+_${${(U)state}//İ/I}}" \ - "$bg" "${fg:-$_p9k_color1}" "$icon" "$expand" "$cond" "$text" - return 0 - ;; - display) - if (( ARGC == 1 )); then - print -rP -- $__p9k_p10k_display_usage >&2 - return 1 - fi - shift - local -i k dump - local opt prev new pair list name var - while getopts ':har' opt; do - case $opt in - r) - if (( __p9k_reset_state > 0 )); then - __p9k_reset_state=2 - else - __p9k_reset_state=-1 - fi - ;; - a) dump=1;; - h) print -rP -- $__p9k_p10k_display_usage; return 0;; - ?) print -rP -- $__p9k_p10k_display_usage >&2; return 1;; - esac - done - if (( dump )); then - reply=() - shift $((OPTIND-1)) - (( ARGC )) || set -- '*' - for opt; do - for k in ${(u@)_p9k_display_k[(I)$opt]:/(#m)*/$_p9k_display_k[$MATCH]}; do - reply+=($_p9k__display_v[k,k+1]) - done - done - if (( __p9k_reset_state == -1 )); then - _p9k_reset_prompt - fi - return 0 - fi - local REPLY - local -a reply - for opt in "${@:$OPTIND}"; do - pair=(${(s:=:)opt}) - list=(${(s:,:)${pair[2]}}) - if [[ ${(b)pair[1]} == $pair[1] ]]; then # this branch is purely for optimization - local ks=($_p9k_display_k[$pair[1]]) - else - local ks=(${(u@)_p9k_display_k[(I)$pair[1]]:/(#m)*/$_p9k_display_k[$MATCH]}) - fi - for k in $ks; do - if (( $#list == 1 )); then # this branch is purely for optimization - [[ $_p9k__display_v[k+1] == $list[1] ]] && continue - new=$list[1] - else - new=${list[list[(I)$_p9k__display_v[k+1]]+1]:-$list[1]} - [[ $_p9k__display_v[k+1] == $new ]] && continue - fi - _p9k__display_v[k+1]=$new - name=$_p9k__display_v[k] - if [[ $name == (empty_line|ruler) ]]; then - var=_p9k__${name}_i - [[ $new == show ]] && unset $var || typeset -gi $var=3 - elif [[ $name == (#b)(<->)(*) ]]; then - var=_p9k__${match[1]}${${${${match[2]//\/}/#left/l}/#right/r}/#gap/g} - [[ $new == hide ]] && typeset -g $var= || unset $var - fi - if (( __p9k_reset_state > 0 )); then - __p9k_reset_state=2 - else - __p9k_reset_state=-1 - fi - done - done - if (( __p9k_reset_state == -1 )); then - _p9k_reset_prompt - fi - ;; - configure) - if (( ARGC > 1 )); then - print -rP -- $__p9k_p10k_configure_usage >&2 - return 1 - fi - local REPLY - local -a reply - p9k_configure "$@" || return - ;; - reload) - if (( ARGC > 1 )); then - print -rP -- $__p9k_p10k_reload_usage >&2 - return 1 - fi - (( $+_p9k__force_must_init )) || return 0 - _p9k__force_must_init=1 - ;; - help) - local var=__p9k_p10k_$2_usage - if (( $+parameters[$var] )); then - print -rP -- ${(P)var} - return 0 - elif (( ARGC == 1 )); then - print -rP -- $__p9k_p10k_usage - return 0 - else - print -rP -- $__p9k_p10k_usage >&2 - return 1 - fi - ;; - finalize) - print -rP -- $__p9k_p10k_finalize_usage >&2 - return 1 - ;; - clear-instant-prompt) - if (( $+__p9k_instant_prompt_active )); then - _p9k_clear_instant_prompt - unset __p9k_instant_prompt_active - fi - return 0 - ;; - *) - print -rP -- $__p9k_p10k_usage >&2 - return 1 - ;; - esac -} - -# Hook for zplugin. -powerlevel10k_plugin_unload() { prompt_powerlevel9k_teardown; } - -function p10k-instant-prompt-finalize() { - unsetopt local_options - (( ${+__p9k_instant_prompt_active} )) && unsetopt prompt_cr prompt_sp || setopt prompt_cr prompt_sp -} - -autoload -Uz add-zsh-hook - -zmodload zsh/datetime -zmodload zsh/mathfunc -zmodload zsh/parameter 2>/dev/null # https://github.com/romkatv/gitstatus/issues/58#issuecomment-553407177 -zmodload zsh/system -zmodload zsh/termcap -zmodload zsh/terminfo -zmodload zsh/zleparameter -zmodload -F zsh/stat b:zstat -zmodload -F zsh/net/socket b:zsocket -zmodload -F zsh/files b:zf_mv b:zf_rm - -if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file && -n $__p9k_instant_prompt_dump_file ]]; then - _p9k_delete_instant_prompt - zf_rm -f -- $__p9k_dump_file{,.zwc} 2>/dev/null - zf_rm -f -- $__p9k_instant_prompt_dump_file{,.zwc} 2>/dev/null -fi - -unset VSCODE_SHELL_INTEGRATION - -_p9k_init_ssh -_p9k_init_toolbox -prompt_powerlevel9k_setup diff --git a/airootfs/etc/skel/powerlevel10k/internal/parser.zsh b/airootfs/etc/skel/powerlevel10k/internal/parser.zsh deleted file mode 100644 index 6c16adc..0000000 --- a/airootfs/etc/skel/powerlevel10k/internal/parser.zsh +++ /dev/null @@ -1,382 +0,0 @@ -typeset -grA __p9k_pb_cmd_skip=( - '}' 'always' # handled specially - '{' '' - '{' '' - '|' '' - '||' '' - '&' '' - '&&' '' - '|&' '' - '&!' '' - '&|' '' - ')' '' - '(' '' - '()' '' - '!' '' - ';' '' - 'if' '' - 'fi' '' - 'elif' '' - 'else' '' - 'then' '' - 'while' '' - 'until' '' - 'do' '' - 'done' '' - 'esac' '' - 'end' '' - 'coproc' '' - 'nocorrect' '' - 'noglob' '' - 'time' '' - '[[' '\]\]' - '((' '\)\)' - 'case' '\)|esac' - ';;' '\)|esac' - ';&' '\)|esac' - ';|' '\)|esac' - 'foreach' '\(*\)' -) - -typeset -grA __p9k_pb_precommand=( - '-' '' - 'builtin' '' - 'command' '' - 'exec' '-[^a]#[a]' - 'nohup' '' - 'setsid' '' - 'eatmydata' '' - 'catchsegv' '' - 'pkexec' '--user' - 'doas' '-[^aCu]#[acU]' - 'nice' '-[^n]#[n]|--adjustment' - 'stdbuf' '-[^ioe]#[ioe]|--(input|output|error)' - 'sudo' '-[^aghpuUCcrtT]#[aghpuUCcrtT]|--(close-from|group|host|prompt|role|type|other-user|command-timeout|user)' - 'ssh-agent' '-[^aEPt]#[aEPt]' - 'tabbed' '-[^gnprtTuU]#[gnprtTuU]' - 'chronic' '' - 'ifne' '' -) - -typeset -grA __p9k_pb_redirect=( - '&>' '' - '>' '' - '>&' '' - '<' '' - '<&' '' - '<>' '' - '&>|' '' - '>|' '' - '&>>' '' - '>>' '' - '>>&' '' - '&>>|' '' - '>>|' '' - '<<<' '' -) - -typeset -grA __p9k_pb_term=( - '|' '' - '||' '' - ';' '' - '&' '' - '&&' '' - '|&' '' - '&!' '' - '&|' '' - ';;' '' - ';&' '' - ';|' '' - '(' '' - ')' '' - '()' '' # handled specially - '}' '' # handled specially -) - -typeset -grA __p9k_pb_term_skip=( - '(' '\)' - ';;' '\)|esac' - ';&' '\)|esac' - ';|' '\)|esac' -) - -# Usage: _p9k_parse_buffer [token-limit] -# -# Parses the specified command line buffer and pupulates array P9K_COMMANDS -# with commands from it. Terminates early and returns 1 if there are more -# tokens than the specified limit. -# -# Broken: -# -# --------------- -# : $(x) -# --------------- -# : `x` -# --------------- -# ${x/} -# --------------- -# - -- x -# --------------- -# command -p -p x -# --------------- -# * -# --------------- -# x=$y; $x -# --------------- -# alias x=y; y -# --------------- -# x < ]] || return 2 - - local rcquotes - [[ -o rcquotes ]] && rcquotes=rcquotes - - eval "$__p9k_intro" - setopt no_nomatch $rcquotes - - typeset -ga P9K_COMMANDS=() - - local -r id='(<->|[[:alpha:]_][[:IDENT:]]#)' - local -r var="\$$id|\${$id}|\"\$$id\"|\"\${$id}\"" - - local -i e ic c=${2:-'1 << 62'} - local skip n s r state token cmd prev - local -a aln alp alf v - - if [[ -o interactive_comments ]]; then - ic=1 - local tokens=(${(Z+C+)1}) - else - local tokens=(${(z)1}) - fi - - { - while (( $#tokens )); do - (( e = $#state )) - - while (( $#tokens == alp[-1] )); do - aln[-1]=() - alp[-1]=() - if (( $#tokens == alf[-1] )); then - alf[-1]=() - (( e = 0 )) - fi - done - - while (( c-- > 0 )) || return; do - token=$tokens[1] - tokens[1]=() - if (( $+galiases[$token] )); then - (( $aln[(eI)p$token] )) && break - s=$galiases[$token] - n=p$token - elif (( e )); then - break - elif (( $+aliases[$token] )); then - (( $aln[(eI)p$token] )) && break - s=$aliases[$token] - n=p$token - elif [[ $token == ?*.?* ]] && (( $+saliases[${token##*.}] )); then - r=${token##*.} - (( $aln[(eI)s$r] )) && break - s=${saliases[$r]%% #} - n=s$r - else - break - fi - aln+=$n - alp+=$#tokens - [[ $s == *' ' ]] && alf+=$#tokens - (( ic )) && tokens[1,0]=(${(Z+C+)s}) || tokens[1,0]=(${(z)s}) - done - - case $token in - '<<'(|-)) - state=h - continue - ;; - *('`'|['<>=$']'(')*) - if [[ $token == ('`'[^'`']##'`'|'"`'[^'`']##'`"'|'$('[^')']##')'|'"$('[^')']##')"'|['<>=']'('[^')']##')') ]]; then - s=${${token##('"'|)(['$<>']|)?}%%?('"'|)} - (( ic )) && tokens+=(';' ${(Z+C+)s}) || tokens+=(';' ${(z)s}) - fi - ;; - esac - - case $state in - *r) - state[-1]= - continue - ;; - a) - if [[ $token == $skip ]]; then - if [[ $token == '{' ]]; then - P9K_COMMANDS+=$cmd - cmd= - state= - else - skip='{' - fi - continue - else - state=t - fi - ;& # fall through - t|p*) - if (( $+__p9k_pb_term[$token] )); then - if [[ $token == '()' ]]; then - state= - else - P9K_COMMANDS+=$cmd - if [[ $token == '}' ]]; then - state=a - skip=always - else - skip=$__p9k_pb_term_skip[$token] - state=${skip:+s} - fi - fi - cmd= - continue - elif [[ $state == t ]]; then - continue - elif [[ $state == *x ]]; then - if (( $+__p9k_pb_redirect[$token] )); then - prev= - state[-1]=r - continue - else - state[-1]= - fi - fi - ;; - s) - if [[ $token == $~skip ]]; then - state= - fi - continue - ;; - h) - while (( $#tokens )); do - (( e = ${tokens[(i)${(Q)token}]} )) - if [[ $tokens[e-1] == ';' && $tokens[e+1] == ';' ]]; then - tokens[1,e]=() - break - else - tokens[1,e]=() - fi - done - while (( $#alp && alp[-1] >= $#tokens )); do - aln[-1]=() - alp[-1]=() - done - state=t - continue - ;; - esac - - if (( $+__p9k_pb_redirect[${token#<0-255>}] )); then - state+=r - continue - fi - - if [[ $token == *'$'* ]]; then - if [[ $token == $~var ]]; then - n=${${token##[^[:IDENT:]]}%%[^[:IDENT:]]} - [[ $token == *'"' ]] && v=("${(P)n}") || v=(${(P)n}) - tokens[1,0]=(${(@qq)v}) - continue - fi - fi - - case $state in - '') - if (( $+__p9k_pb_cmd_skip[$token] )); then - skip=$__p9k_pb_cmd_skip[$token] - [[ $token == '}' ]] && state=a || state=${skip:+s} - continue - fi - if [[ $token == *=* ]]; then - v=${(S)token/#(<->|([[:alpha:]_][[:IDENT:]]#(|'['*[^\\](\\\\)#']')))(|'+')=} - if (( $#v < $#token )); then - if [[ $v == '(' ]]; then - state=s - skip='\)' - fi - continue - fi - fi - : ${token::=${(Q)${~token}}} - ;; - p2) - if [[ -n $prev ]]; then - prev= - else - : ${token::=${(Q)${~token}}} - if [[ $token == '{'$~id'}' ]]; then - state=p2x - prev=$token - else - state=p - fi - continue - fi - ;& # fall through - p) - if [[ -n $prev ]]; then - token=$prev - prev= - else - : ${token::=${(Q)${~token}}} - case $token in - '{'$~id'}') prev=$token; state=px; continue;; - [^-]*) ;; - --) state=p1; continue;; - $~skip) state=p2; continue;; - *) continue;; - esac - fi - ;; - p1) - if [[ -n $prev ]]; then - token=$prev - prev= - else - : ${token::=${(Q)${~token}}} - if [[ $token == '{'$~id'}' ]]; then - state=p1x - prev=$token - continue - fi - fi - ;; - esac - - if (( $+__p9k_pb_precommand[$token] )); then - prev= - state=p - skip=$__p9k_pb_precommand[$token] - cmd+=$token$'\0' - else - state=t - [[ $token == ('(('*'))'|'`'*'`'|'$'*|['<>=']'('*')'|*$'\0'*) ]] || cmd+=$token$'\0' - fi - done - } always { - [[ $state == (px|p1x) ]] && cmd+=$prev - P9K_COMMANDS+=$cmd - P9K_COMMANDS=(${(u)P9K_COMMANDS%$'\0'}) - } -} diff --git a/airootfs/etc/skel/powerlevel10k/internal/wizard.zsh b/airootfs/etc/skel/powerlevel10k/internal/wizard.zsh deleted file mode 100644 index a89b40f..0000000 --- a/airootfs/etc/skel/powerlevel10k/internal/wizard.zsh +++ /dev/null @@ -1,2205 +0,0 @@ -local -i force=0 - -local opt -while getopts 'f' opt; do - case $opt in - f) force=1;; - +f) force=0;; - \?) return 1;; - esac -done - -if (( OPTIND <= ARGC )); then - print -lr -- "wizard.zsh: invalid arguments: $@" >&2 - return 1 -fi - -local -i in_z4h_wizard=0 -[[ $force == 0 && $+functions[z4h] == 1 && -n $Z4H && -e $Z4H/welcome ]] && in_z4h_wizard=1 - -local -i success=0 - -local -ri force - -local -r font_base_url='https://github.com/romkatv/powerlevel10k-media/raw/master' - -local -ri prompt_indent=2 - -local -rA pure_original=(grey 242 red 1 yellow 3 blue 4 magenta 5 cyan 6 white 7) -local -rA pure_snazzy=(grey 242 red '#FF5C57' yellow '#F3F99D' blue '#57C7FF' magenta '#FF6AC1' cyan '#9AEDFE' white '#F1F1F0') -local -ra bg_color=(240 238 236 234) -local -ra sep_color=(248 246 244 242) -local -ra prefix_color=(250 248 246 244) - -local -r left_circle='\uE0B6' -local -r right_circle='\uE0B4' -local -r left_arc='\uE0B7' -local -r right_arc='\uE0B5' -local -r left_triangle='\uE0B2' -local -r right_triangle='\uE0B0' -local -r left_angle='\uE0B3' -local -r right_angle='\uE0B1' -local -r fade_in='░▒▓' -local -r fade_out='▓▒░' -local -r vertical_bar='\u2502' - -local -r cursor='%1{\e[07m \e[27m%}' - -local -r time_24h='16:23:42' -local -r time_12h='04:23:42 PM' - -local -ra lean_left=( - '%$frame_color[$color]F╭─ ' '${extra_icons[1]:+%f$extra_icons[1] }%31F$extra_icons[2]%B%39F~%b%31F/%B%39Fsrc%b%f $prefixes[1]%76F$extra_icons[3]master%f ' - '%$frame_color[$color]F╰─' '%76F$prompt_char%f ${buffer:-$cursor}' -) - -local -ra lean_right=( - ' $prefixes[2]%101F$extra_icons[4]5s%f${time:+ $prefixes[3]%66F$extra_icons[5]$time%f}' ' %$frame_color[$color]F─╮%f' - '' ' %$frame_color[$color]F─╯%f' -) - -local -ra lean_8colors_left=( - '%$frame_color[$color]F╭─ ' '${extra_icons[1]:+%f$extra_icons[1] }%4F$extra_icons[2]%4F~/src%f $prefixes[1]%2F$extra_icons[3]master%f ' - '%$frame_color[$color]F╰─' '%2F$prompt_char%f ${buffer:-$cursor}' -) - -local -ra lean_8colors_right=( - ' $prefixes[2]%3F$extra_icons[4]5s%f${time:+ $prefixes[3]%6F$extra_icons[5]$time%f}' ' %$frame_color[$color]F─╮%f' - '' ' %$frame_color[$color]F─╯%f' -) - -local -ra classic_left=( - '%$frame_color[$color]F╭─' '%F{$bg_color[$color]}$left_tail%K{$bg_color[$color]} ${extra_icons[1]:+%255F$extra_icons[1] %$sep_color[$color]F$left_subsep%f }%31F$extra_icons[2]%B%39F~%b%K{$bg_color[$color]}%31F/%B%39Fsrc%b%K{$bg_color[$color]} %$sep_color[$color]F$left_subsep%f %$prefix_color[$color]F$prefixes[1]%76F$extra_icons[3]master %k%$bg_color[$color]F$left_head%f' - '%$frame_color[$color]F╰─' '%f ${buffer:-$cursor}' -) - -local -ra classic_right=( - '%$bg_color[$color]F$right_head%K{$bg_color[$color]}%f %$prefix_color[$color]F$prefixes[2]%101F5s $extra_icons[4]${time:+%$sep_color[$color]F$right_subsep %$prefix_color[$color]F$prefixes[3]%66F$time $extra_icons[5]}%k%F{$bg_color[$color]}$right_tail%f' '%$frame_color[$color]F─╮%f' - '' '%$frame_color[$color]F─╯%f' -) - -local -ra pure_left=( - '' '%F{$pure_color[blue]}~/src%f %F{$pure_color[grey]}master%f ${pure_use_rprompt-%F{$pure_color[yellow]\}5s%f }' - '' '%F{$pure_color[magenta]}$prompt_char%f ${buffer:-$cursor}' -) - -local -ra pure_right=( - '${pure_use_rprompt+%F{$pure_color[yellow]\}5s%f${time:+ }}${time:+%F{$pure_color[grey]\}$time%f}' '' - '' '' -) - -local -ra rainbow_left=( - '%$frame_color[$color]F╭─' '%F{${${extra_icons[1]:+7}:-4}}$left_tail${extra_icons[1]:+%K{7\}%232F $extra_icons[1] %K{4\}%7F$left_sep}%K{4}%254F $extra_icons[2]%B%255F~%b%K{4}%254F/%B%255Fsrc%b%K{4} %K{2}%4F$left_sep %0F$prefixes[1]$extra_icons[3]master %k%2F$left_head%f' - '%$frame_color[$color]F╰─' '%f ${buffer:-$cursor}' -) - -local -ra rainbow_right=( - '%3F$right_head%K{3} %0F$prefixes[2]5s $extra_icons[4]%3F${time:+%7F$right_sep%K{7\} %0F$prefixes[3]$time $extra_icons[5]%7F}%k$right_tail%f' '%$frame_color[$color]F─╮%f' - '' '%$frame_color[$color]F─╯%f' -) - -function prompt_length() { - local -i COLUMNS=1024 - local -i x y=$#1 m - if (( y )); then - while (( ${${(%):-$1%$y(l.1.0)}[-1]} )); do - x=y - (( y *= 2 )) - done - while (( y > x + 1 )); do - (( m = x + (y - x) / 2 )) - (( ${${(%):-$1%$m(l.x.y)}[-1]} = m )) - done - fi - typeset -g REPLY=$x -} - -function print_prompt() { - [[ $parameters[extra_icons] == scalar* ]] && eval "local -a extra_icons=$extra_icons" - [[ $parameters[pure_color] == scalar* ]] && eval "local -A pure_color=$pure_color" - [[ $parameters[prefixes] == scalar* ]] && eval "local -a prefixes=$prefixes" - - local left=${style}_left - local right=${style}_right - left=("${(@P)left}") - right=("${(@P)right}") - (( disable_rprompt )) && right=() - eval "left=(${(@)left:/(#b)(*)/\"$match[1]\"})" - eval "right=(${(@)right:/(#b)(*)/\"$match[1]\"})" - if (( num_lines == 1)); then - left=($left[2] $left[4]) - right=($right[1] $right[3]) - else - local c=76 - [[ $style == pure ]] && c=$pure_color[magenta] - [[ $style == lean_8colors ]] && c=2 - (( left_frame )) || left=('' $left[2] '' "%F{$c}$prompt_char%f ${buffer:-$cursor}") - (( right_frame )) || right=($right[1] '' '' '') - fi - local -i left_indent=prompt_indent - local -i right_indent=prompt_indent - prompt_length ${(g::):-$left[1]$left[2]$right[1]$right[2]} - local -i width=REPLY - while (( wizard_columns - width <= left_indent + right_indent )); do - if (( right_indent )); then - (( --right_indent )) - elif (( left_indent )); then - (( --left_indent )) - else - print -P ' [%3Fnot enough horizontal space to display this%f]' - return 0 - fi - done - local -i i - for ((i = 1; i < $#left; i+=2)); do - local l=${(g::):-$left[i]$left[i+1]} - local r=${(g::):-$right[i]$right[i+1]} - prompt_length $l$r - local -i gap=$((wizard_columns - left_indent - right_indent - REPLY)) - (( num_lines == 2 && i == 1 )) && local fill=$gap_char || local fill=' ' - print -n -- ${(pl:$left_indent:: :)} - print -nP -- $l - print -nP -- "%$frame_color[$color]F${(pl:$gap::$fill:)}%f" - print -P -- $r - done -} - -function href() { - local url=${${1//\%/%%}//\\/\\\\} - if (( _p9k_term_has_href )); then - print -r -- '%{\e]8;;'$url'\a%}'$url'%{\e]8;;\a%}' - else - print -r -- $url - fi -} - -function flowing() { - (( ${wizard_columns:-0} )) || local -i wizard_columns=COLUMNS - local opt - local -i centered indentation - while getopts 'ci:' opt; do - case $opt in - i) indentation=$OPTARG;; - c) centered=1;; - +c) centered=0;; - \?) exit 1;; - esac - done - shift $((OPTIND-1)) - local line word lines=() - for word in "$@"; do - prompt_length ${(g::):-"$line $word"} - if (( REPLY > wizard_columns )); then - [[ -z $line ]] || lines+=$line - line= - fi - if [[ -n $line ]]; then - line+=' ' - elif (( $#lines )); then - line=${(pl:$indentation:: :)} - fi - line+=$word - done - [[ -z $line ]] || lines+=$line - for line in $lines; do - prompt_length ${(g::)line} - (( centered && REPLY < wizard_columns )) && print -n -- ${(pl:$(((wizard_columns - REPLY) / 2)):: :)} - print -P -- $line - done -} - -function clear() { - if (( $+commands[clear] )) && command clear 2>/dev/null; then - return - fi - echoti clear 2>/dev/null - print -n -- "\e[H\e[2J\e[3J" -} - -function hide_cursor() { - (( $+terminfo[cnorm] )) || return - echoti civis 2>/dev/null -} - -function show_cursor() { - local cnorm=${terminfo[cnorm]-} - if [[ $cnorm == *$'\e[?25h'(|'\e'*) ]]; then - print -n '\e[?25h' - else - print -n $cnorm - fi -} - -function consume_input() { - local key - while true; do - [[ -t 2 ]] - read -t0 -k key || break - done 2>/dev/null -} - -function quit() { - consume_input - if [[ $1 == '-c' ]]; then - print -Pr -- '' - print -Pr -- '%b%k%f%u%s' - print -Pr -- '%F{3}--- stack trace (most recent call first) ---%f' - print -lr -- $funcfiletrace - print -Pr -- '%F{3}--- end of stack trace ---%f' - print -Pr -- '' - print -Pr -- 'Press %BENTER%b to continue.' - hide_cursor - read -s - fi - restore_screen - print - if (( force )); then - flowing Powerlevel10k configuration wizard has been aborted. To run it again, type: - print -P "" - print -P " %2Fp10k%f %Bconfigure%b" - print -P "" - else - flowing \ - Powerlevel10k configuration wizard has been aborted. It will run again \ - next time unless you define at least one Powerlevel10k configuration option. \ - To define an option that does nothing except for disabling Powerlevel10k \ - configuration wizard, type the following command: - print -P "" - print -P " %2Fecho%f %3F'POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true'%f >>! $__p9k_zshrc_u" - print -P "" - flowing To run Powerlevel10k configuration wizard right now, type: - print -P "" - print -P " %2Fp10k%f %Bconfigure%b" - print -P "" - fi - function quit() {} - stty echo 2>/dev/null - show_cursor - exit 1 -} - -local screen_widgets=() -local -i max_priority -local -i prompt_idx -local choice - -function add_widget() { - local priority=$1 - shift - local render="${(j: :)${(@q)*}}" - screen_widgets+=("$priority" "$render") - (( priority <= max_priority )) || max_priority=priority -} - -function render_screen_pass() { - local -i pass=$1 - local -i prev_pass cur_pass - local prev_render cur_render - for cur_pass cur_render in "${(@)screen_widgets}" 0 ''; do - if (( prev_pass <= pass && (cur_pass == 0 || cur_pass > pass) )); then - eval $prev_render - fi - prev_pass=cur_pass - prev_render=$cur_render - done -} - -function get_columns() { return 'COLUMNS > 88 ? 88 : COLUMNS' } -functions -M get_columns 0 0 - -function render_screen() { - { - hide_cursor - while true; do - while true; do - typeset -gi wizard_columns='get_columns()' - typeset -gi wizard_lines=LINES - if (( wizard_columns < __p9k_wizard_columns )); then - clear - flowing -c %1FNot enough horizontal space.%f - print - flowing Make terminal window %Bwider%b or press %BCtrl-C%b to abort Powerlevel10k configuration wizard. - elif (( wizard_lines < __p9k_wizard_lines )); then - clear - flowing -c %1FNot enough vertical space.%f - print - flowing Make terminal window %Btaller%b or press %BCtrl-C%b to abort Powerlevel10k configuration wizard. - else - break - fi - while (( get_columns() == wizard_columns && LINES == wizard_lines )); do - sleep 1 - done - done - - local -a passes - () { - local -i pass - local render - for pass render in "${(@)screen_widgets}"; do - passes+=$pass - done - passes=(${(onu)passes}) - } - - local -i pass - for pass in $passes; do - local content="$(render_screen_pass $pass)" - local lines=("${(@f)content}") - (( $#lines > wizard_lines )) && continue - clear - print -rn -- $content - return 0 - done - - clear - flowing -c %1FNot enough vertical space.%f - print - flowing Make terminal window %Btaller%b or press %BCtrl-C%b to abort Powerlevel10k configuration wizard. - while (( get_columns() == wizard_columns && LINES == wizard_lines )); do - sleep 1 - done - done - } always { - show_cursor - } -} - -function add_prompt_n() { - add_widget 0 "$@" print_prompt - local var - for var; do - eval "local ${(q)var}" - done - if (( num_lines == 2 )); then - add_widget $(( 100 - ++prompt_idx )) print -P ' [%3Fnot enough vertical space to display this%f]' - fi -} - -function add_prompt() { - add_widget 0 print - add_widget 1 - add_prompt_n "$@" - add_widget 0 print - add_widget 2 -} - -function ask() { - local choices=$1 - local -i lines columns wizard_lines wizard_columns - add_widget 0 print -P "(q) Quit and do nothing." - add_widget 0 print - add_widget $((max_priority + 1)) - add_widget 0 print -P "%BChoice [${choices}q]: %b" - while true; do - =true - if (( LINES != lines || get_columns() != columns )); then - render_screen - lines=wizard_lines - columns=wizard_columns - fi - typeset -g choice= - if read -t1 -k choice; then - choice=${(L)choice} - if [[ $choice == q ]]; then - quit - fi - if [[ $choices == *$choice* ]]; then - screen_widgets=() - max_priority=0 - prompt_idx=0 - return - fi - fi - done -} - -local -i greeting_printed=0 - -function print_greeting() { - (( greeting_printed )) && return - if (( in_z4h_wizard )); then - flowing -c %3FZsh for Humans%f uses %4FPowerlevel10k%f to print command \ - line prompt. This wizard will ask you a few questions and configure \ - prompt for you. - elif (( force )); then - flowing -c This is %4FPowerlevel10k configuration wizard%f. \ - It will ask you a few questions and configure your prompt. - else - flowing -c This is %4FPowerlevel10k configuration wizard%f. \ - You are seeing it because you haven\'t defined any \ - Powerlevel10k configuration options. It will ask \ - you a few questions and configure your prompt. - fi - print -P "" -} - -function iterm_get() { - /usr/libexec/PlistBuddy -c "Print :$1" ~/Library/Preferences/com.googlecode.iterm2.plist -} - -local terminal iterm2_font_size iterm2_old_font=0 can_install_font=0 - -() { - [[ $P9K_SSH == 0 ]] || return - if [[ "$(uname)" == Linux && "$(uname -o)" == Android ]]; then - (( $+commands[termux-reload-settings] )) || return - (( $+commands[curl] )) || return - if [[ -f ~/.termux/font.ttf ]]; then - [[ -r ~/.termux/font.ttf ]] || return - [[ -w ~/.termux/font.ttf ]] || return - ! grep -q 'MesloLGS NF' ~/.termux/font.ttf 2>/dev/null || return - fi - if [[ -f ~/.termux ]]; then - [[ -d ~/.termux && -w ~/.termux ]] || return - else - [[ -w ~ ]] || return - fi - terminal=Termux - return 0 - fi - if [[ "$(uname)" == Darwin && $TERM_PROGRAM == iTerm.app ]]; then - (( $+commands[curl] )) || return - [[ $TERM_PROGRAM_VERSION == [2-9]* ]] || return - if [[ -f ~/Library/Fonts ]]; then - [[ -d ~/Library/Fonts && -w ~/Library/Fonts ]] || return - else - [[ -d ~/Library && -w ~/Library ]] || return - fi - [[ -x /usr/libexec/PlistBuddy ]] || return - [[ -x /usr/bin/plutil ]] || return - [[ -x /usr/bin/defaults ]] || return - [[ -f ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return - [[ -r ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return - [[ -w ~/Library/Preferences/com.googlecode.iterm2.plist ]] || return - local guid1 && guid1="$(iterm_get '"Default Bookmark Guid"' 2>/dev/null)" || return - local guid2 && guid2="$(iterm_get '"New Bookmarks":0:"Guid"' 2>/dev/null)" || return - local font && font="$(iterm_get '"New Bookmarks":0:"Normal Font"' 2>/dev/null)" || return - [[ $guid1 == $guid2 ]] || return - [[ $font != 'MesloLGS-NF-Regular '<-> ]] || return - [[ $font == (#b)*' '(<->) ]] || return - [[ $font == 'MesloLGSNer-Regular '<-> ]] && iterm2_old_font=1 - iterm2_font_size=$match[1] - terminal=iTerm2 - return 0 - fi - return 1 -} && can_install_font=1 - -function run_command() { - local msg=$1 - shift - [[ -n $msg ]] && print -nP -- "$msg ..." - local err && err="$("$@" 2>&1)" || { - print -P " %1FERROR%f" - print -P "" - print -nP "%BCommand:%b " - print -r -- "${(@q)*}" - if [[ -n $err ]]; then - print -P "" - print -r -- $err - fi - quit -c - } - [[ -n $msg ]] && print -P " %2FOK%f" -} - -function install_font() { - clear - case $terminal in - Termux) - command mkdir -p -- ~/.termux || quit -c - run_command "Downloading %BMesloLGS NF Regular.ttf%b" \ - curl -fsSL -o ~/.termux/font.ttf "$font_base_url/MesloLGS%20NF%20Regular.ttf" - run_command "Reloading %BTermux%b settings" termux-reload-settings - ;; - iTerm2) - command mkdir -p -- ~/Library/Fonts || quit -c - local style - for style in Regular Bold Italic 'Bold Italic'; do - local file="MesloLGS NF ${style}.ttf" - run_command "Downloading %B$file%b" \ - curl -fsSL -o ~/Library/Fonts/$file.tmp "$font_base_url/${file// /%20}" - command mv -f -- ~/Library/Fonts/$file{.tmp,} || quit -c - done - print -nP -- "Changing %BiTerm2%b settings ..." - local size=$iterm2_font_size - [[ $size == 12 ]] && size=13 - local k t v settings=( - '"Normal Font"' string '"MesloLGS-NF-Regular '$size'"' - '"Terminal Type"' string '"xterm-256color"' - '"Horizontal Spacing"' real 1 - '"Vertical Spacing"' real 1 - '"Minimum Contrast"' real 0 - '"Use Bold Font"' bool 1 - '"Use Bright Bold"' bool 1 - '"Use Italic Font"' bool 1 - '"ASCII Anti Aliased"' bool 1 - '"Non-ASCII Anti Aliased"' bool 1 - '"Use Non-ASCII Font"' bool 0 - '"Ambiguous Double Width"' bool 0 - '"Draw Powerline Glyphs"' bool 1 - '"Only The Default BG Color Uses Transparency"' bool 1 - ) - for k t v in $settings; do - /usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:$k $v" \ - ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null && continue - run_command "" /usr/libexec/PlistBuddy -c \ - "Add :\"New Bookmarks\":0:$k $t $v" ~/Library/Preferences/com.googlecode.iterm2.plist - done - print -P " %2FOK%f" - print -nP "Updating %BiTerm2%b settings cache ..." - run_command "" /usr/bin/defaults read com.googlecode.iterm2 - sleep 3 - print -P " %2FOK%f" - sleep 1 - clear - hide_cursor - print - flowing +c "%2FMeslo Nerd Font%f" successfully installed. - print -P "" - () { - local out - out=$(/usr/bin/defaults read 'Apple Global Domain' NSQuitAlwaysKeepsWindows 2>/dev/null) || return - [[ $out == 1 ]] || return - out="$(iterm_get OpenNoWindowsAtStartup 2>/dev/null)" || return - [[ $out == false ]] - } - if (( $? )); then - flowing +c Please "%Brestart iTerm2%b" for the changes to take effect. - print -P "" - flowing +c -i 5 " 1. Click" "%BiTerm2 → Quit iTerm2%b" or press "%B⌘ Q%b." - flowing +c -i 5 " 2. Open %BiTerm2%b." - print -P "" - flowing +c "It's" important to "%Brestart iTerm2%b" by following the instructions above. \ - "It's" "%Bnot enough%b" to close iTerm2 by clicking on the red circle. You must \ - click "%BiTerm2 → Quit iTerm2%b" or press "%B⌘ Q%b." - else - flowing +c Please "%Brestart your computer%b" for the changes to take effect. - fi - while true; do sleep 60 2>/dev/null; done - ;; - esac - - return 0 -} - -function ask_font() { - (( can_install_font )) || return 0 - add_widget 0 print_greeting - if (( iterm2_old_font )); then - add_widget 0 flowing -c A new version of '%2FMeslo Nerd Font%f' is available. '%BInstall?%b' - else - add_widget 0 flowing -c %BInstall '%b%2FMeslo Nerd Font%f%B?%b' - fi - add_widget 0 print - add_widget 0 print -P "%B(y) Yes (recommended).%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(n) No. Use the current font.%b" - add_widget 0 print - add_widget 1 - ask yn - greeting_printed=1 - case $choice in - y) - ask_remove_font || return - install_font - ;; - n) ;; - esac - return 0 -} - -function print_file_path() { - local file=$1 - if (( ${(m)#file} > wizard_columns - 2 )); then - file[wizard_columns-4,-1]='...' - fi - add_widget 0 print -P " %B${file//\%/%%}%b" -} - -function ask_remove_font() { - local font - local -a fonts - local -i protected - for font in {,/System,~}/Library/Fonts/**/*[Mm]eslo*.(ttf|otf)(N:A); do - [[ -f $font && -r $font ]] || continue - [[ $font == ~/Library/Fonts/'MesloLGS NF '(Regular|Bold|Italic|Bold\ Italic).ttf ]] && continue - [[ "$(<$font)" == *"MesloLGS NF"$'\0'* ]] || continue - fonts+=$font - [[ -w ${font:h} ]] || protected=1 - done - (( $#fonts )) || return 0 - add_widget 0 flowing -c A variant of "%2FMeslo Nerd Font%f" is already installed. - add_widget 0 print -P "" - for font in $fonts; do - add_widget 0 print_file_path $font - done - add_widget 0 print -P "" - if (( protected )); then - if (( $#fonts == 1 )); then - add_widget 0 flowing Please %Bdelete%b this file and run '%2Fp10k%f %Bconfigure%b.' - else - add_widget 0 flowing Please %Bdelete%b these files and run '%2Fp10k%f %Bconfigure%b.' - fi - add_widget 0 print - restore_screen - local pass render - for pass render in "${(@)screen_widgets}"; do - (( pass == 0 )) && eval $render - done - exit 1 - fi - if (( $#fonts == 1 )); then - add_widget 0 flowing -c "%BDelete this file?%b" - else - add_widget 0 flowing -c "%BDelete these files?%b" - fi - add_widget 0 print -P "" - add_widget 0 print -P "%B(y) Yes (recommended).%b" - add_widget 0 print -P "" - add_widget 0 print -P "(r) Restart from the beginning." - ask yr - case $choice in - r) return 1;; - y) zf_rm -f -- $fonts || quit -c;; - esac - return 0 -} - -function ask_diamond() { - local extra - add_widget 0 print_greeting - add_widget 0 flowing -c %BDoes this look like a%b %2Fdiamond%f '%B(rotated square)?%b' - add_widget 0 flowing -c reference: "$(href https://graphemica.com/%E2%97%86)" - add_widget 0 print - add_widget 0 flowing -c -- "---> \uE0B2\uE0B0 <---" - add_widget 0 print - add_widget 3 - add_widget 0 print -P "%B(y) Yes.%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(n) No.%b" - add_widget 0 print - add_widget 2 - if (( can_install_font )); then - extra+=r - add_widget 0 print -P "(r) Restart from the beginning." - fi - ask yn$extra - greeting_printed=1 - case $choice in - r) return 1;; - y) cap_diamond=1;; - n) cap_diamond=0;; - esac - return 0 -} - -function ask_lock() { - [[ -n $2 ]] && add_widget 0 flowing -c "$2" - add_widget 0 flowing -c "%BDoes this look like a %b%2Flock%f%B?%b" - add_widget 0 flowing -c "reference: $(href https://fontawesome.com/icons/lock)" - add_widget 0 print - add_widget 0 flowing -c -- "---> $1 <---" - add_widget 0 print - add_widget 3 - add_widget 0 print -P "%B(y) Yes.%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(n) No.%b" - add_widget 0 print - add_widget 2 - add_widget 0 print -P "(r) Restart from the beginning." - ask ynr - case $choice in - r) return 1;; - y) cap_lock=1;; - n) cap_lock=0;; - esac - return 0 -} - -function ask_python() { - add_widget 0 flowing -c %BDoes this look like a "%b%2FPython logo%f%B?%b" - add_widget 0 flowing -c reference: "$(href https://fontawesome.com/icons/python)" - add_widget 0 print -P "" - add_widget 0 flowing -c -- "---> \uE63C <---" - add_widget 0 print -P "" - add_widget 3 - add_widget 0 print -P "%B(y) Yes.%b" - add_widget 0 print -P "" - add_widget 1 - add_widget 0 print -P "%B(n) No.%b" - add_widget 0 print -P "" - add_widget 2 - add_widget 0 print -P "(r) Restart from the beginning." - ask ynr - case $choice in - r) return 1;; - y) cap_python=1;; - n) cap_python=0;; - esac - return 0 -} - -function ask_quotes() { - add_widget 0 flowing -c %BDoes this look like%b "%2F><%f" %Bbut taller and "fatter?%b" - add_widget 0 print -P "" - add_widget 0 flowing -c -- "---> \u276F\u276E <---" - add_widget 0 print -P "" - add_widget 3 - add_widget 0 print -P "%B(y) Yes.%b" - add_widget 0 print -P "" - add_widget 1 - add_widget 0 print -P "%B(n) No.%b" - add_widget 0 print -P "" - add_widget 2 - add_widget 0 print -P "(r) Restart from the beginning." - ask ynr - case $choice in - r) return 1;; - y) cap_quotes=1;; - n) cap_quotes=0;; - esac - return 0 -} - -function ask_arrow() { - [[ -n $2 ]] && add_widget 0 flowing -c "$2" - add_widget 0 flowing -c %BDoes this look like an%b "%2Fupwards arrow%f%B?%b" - add_widget 0 flowing -c reference: "$(href https://graphemica.com/%F0%9F%A0%89)" - add_widget 0 print -P "" - add_widget 0 flowing -c -- "---> $1 <---" - add_widget 0 print -P "" - add_widget 3 - add_widget 0 print -P "%B(y) Yes.%b" - add_widget 0 print -P "" - add_widget 1 - add_widget 0 print -P "%B(n) No.%b" - add_widget 0 print -P "" - add_widget 2 - add_widget 0 print -P "(r) Restart from the beginning." - ask ynr - case $choice in - r) return 1;; - y) cap_arrow=1;; - n) cap_arrow=0;; - esac - return 0 -} - -function ask_icon_padding() { - if [[ $POWERLEVEL9K_MODE == (powerline|compatible|ascii) ]]; then - POWERLEVEL9K_ICON_PADDING=none - return 0 - fi - - local text="X" - text+="%1F${icons[VCS_GIT_ICON]// }%fX" - text+="%2F${icons[VCS_GIT_GITHUB_ICON]// }%fX" - text+="%3F${icons[TIME_ICON]// }%fX" - text+="%4F${icons[RUBY_ICON]// }%fX" - text+="%5F${icons[HOME_ICON]// }%fX" - text+="%6F${icons[HOME_SUB_ICON]// }%fX" - text+="%1F${icons[FOLDER_ICON]// }%fX" - text+="%2F${icons[RAM_ICON]// }%fX" - - add_widget 0 flowing -c %BDo all these icons "%b%2Ffit between the crosses%f%B?%b" - add_widget 0 print -P "" - add_widget 0 flowing -c -- "---> $text <---" - add_widget 0 print -P "" - add_widget 3 - add_widget 0 flowing +c -i 5 "%B(y) Yes." Icons are very close to the crosses but there is "%b%2Fno overlap%f%B.%b" - add_widget 0 print -P "" - add_widget 1 - add_widget 0 flowing +c -i 5 "%B(n) No." Some icons "%b%2Foverlap%f%B" neighbouring crosses.%b - add_widget 0 print -P "" - add_widget 2 - add_widget 0 print -P "(r) Restart from the beginning." - ask ynr - case $choice in - r) return 1;; - y) - POWERLEVEL9K_ICON_PADDING=none - options+='small icons' - ;; - n) - POWERLEVEL9K_ICON_PADDING=moderate - options+='large icons' - up_triangle+=' ' - down_triangle+=' ' - slanted_bar='\uE0BD ' - ;; - esac - return 0 -} - -function ask_style() { - if (( terminfo[colors] < 256 )); then - style=lean_8colors - left_frame=0 - right_frame=0 - frame_color=(0 7 2 4) - color_name=(Black White Green Blue) - options+=lean_8colors - return 0 - fi - local extra - add_widget 0 flowing -c "%BPrompt Style%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(1) Lean.%b" - add_prompt style=lean left_frame=0 right_frame=0 - add_widget 0 print -P "%B(2) Classic.%b" - add_prompt style=classic - add_widget 0 print -P "%B(3) Rainbow.%b" - add_prompt style=rainbow - if [[ $POWERLEVEL9K_MODE != ascii ]]; then - extra+=4 - add_widget 0 print -P "%B(4) Pure.%b" - add_prompt style=pure - fi - add_widget 0 print -P "(r) Restart from the beginning." - ask 123${extra}r - case $choice in - r) return 1;; - 1) style=lean; left_frame=0; right_frame=0; options+=lean;; - 2) style=classic; options+=classic;; - 3) style=rainbow; options+=rainbow;; - 4) style=pure; empty_line=1; options+=pure;; - esac - return 0 -} - -function ask_charset() { - [[ $style == (lean*|classic|rainbow) && $POWERLEVEL9K_MODE != ascii ]] || return 0 - add_widget 0 flowing -c "%BCharacter Set%b" - add_widget 0 print -P "" - add_widget 1 - add_widget 0 print -P "%B(1) Unicode.%b" - add_prompt - add_widget 0 print -P "%B(2) ASCII.%b" - add_prompt \ - left_sep= \ - right_sep= \ - left_subsep='|' \ - right_subsep='|' \ - left_head= \ - right_head= \ - prompt_char='>' \ - left_frame=0 \ - right_frame=0 - add_widget 0 print -P "(r) Restart from the beginning." - ask 12r - case $choice in - r) return 1;; - 1) options+=unicode;; - 2) - options+=ascii - left_sep= - right_sep= - left_subsep='|' - right_subsep='|' - left_head= - right_head= - prompt_char='>' - left_frame=0 - right_frame=0 - POWERLEVEL9K_MODE=ascii - POWERLEVEL9K_ICON_PADDING=none - cap_diamond=0 - cap_python=0 - cap_arrow=0 - cap_lock=0 - cap_quotes=0 - ;; - esac - return 0 -} - -function ask_color_scheme() { - (( terminfo[colors] < 256 )) && return - if [[ $style == lean ]]; then - add_widget 0 flowing -c "%BPrompt Colors%b" - add_widget 0 print -P "" - add_widget 1 - add_widget 0 print -P "%B(1) 256 colors.%b" - add_prompt style=lean - add_widget 0 print -P "%B(2) 8 colors.%b" - add_prompt style=lean_8colors - add_widget 0 print -P "(r) Restart from the beginning." - ask 12r - case $choice in - r) return 1;; - 1) style=lean;; - 2) - style=lean_8colors - frame_color=(0 7 2 4) - color_name=(Black White Green Blue) - ;; - esac - options=(${options:#lean} $style) - elif [[ $style == pure && $has_truecolor == 1 ]]; then - add_widget 0 flowing -c "%BPrompt Colors%b" - add_widget 0 print -P "" - add_widget 1 - add_widget 0 print -P "%B(1) Original.%b" - add_prompt "pure_color=(${(j: :)${(@q)${(@kv)pure_original}}})" - add_widget 0 print -P "%B(2) Snazzy.%b" - add_prompt "pure_color=(${(j: :)${(@q)${(@kv)pure_snazzy}}})" - add_widget 0 print -P "(r) Restart from the beginning." - ask 12r - case $choice in - r) return 1;; - 1) - pure_color=(${(kv)pure_original}) - options+=original - ;; - 2) - pure_color=(${(kv)pure_snazzy}) - options+=snazzy - ;; - esac - fi - return 0 -} - -function ask_color() { - [[ $style != classic ]] && return - add_widget 0 flowing -c "%BPrompt Color%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(1) $color_name[1].%b" - add_prompt color=1 - add_widget 0 print -P "%B(2) $color_name[2].%b" - add_prompt color=2 - add_widget 0 print -P "%B(3) $color_name[3].%b" - add_prompt color=3 - add_widget 0 print -P "%B(4) $color_name[4].%b" - add_prompt color=4 - add_widget 0 print -P "(r) Restart from the beginning." - ask 1234r - case $choice in - r) return 1;; - [1-4]) color=$choice;; - esac - options+=${${(L)color_name[color]}//ı/i} - return 0 -} - -function print_frame_marker() { - local label="(1) $color_name[1]." - local -i n='wizard_columns - 7' - local -i m=$((n - $#label)) - print -P "${(l:$n:: :)}frame" - print -P "%B$label%b${(l:$m:: :)} |" - print -P "${(l:$n:: :)} v" -} - -function ask_ornaments_color() { - [[ $style != (rainbow|lean*) || $num_lines == 1 ]] && return - [[ $gap_char == ' ' && $left_frame == 0 && $right_frame == 0 ]] && return - local ornaments=() - [[ $gap_char != ' ' ]] && ornaments+=Connection - (( left_frame || right_frame )) && ornaments+=Frame - add_widget 0 flowing -c "%B${(j: & :)ornaments} Color%b" - if (( left_frame || right_frame )); then - add_widget 0 print_frame_marker - add_widget 3 print -P "%B(1) $color_name[1].%b" - add_prompt_n color=1 - add_widget 0 print - add_widget 2 - else - add_widget 1 - add_widget 0 print -P "%B(1) $color_name[1].%b" - add_prompt color=1 - fi - add_widget 0 print -P "%B(2) $color_name[2].%b" - add_prompt color=2 - add_widget 0 print -P "%B(3) $color_name[3].%b" - add_prompt color=3 - add_widget 0 print -P "%B(4) $color_name[4].%b" - add_prompt color=4 - add_widget 0 print -P "(r) Restart from the beginning." - ask 1234r - case $choice in - r) return 1;; - [1-4]) color=$choice;; - esac - options+=${${(L)color_name[color]}//ı/i}-ornaments - return 0 -} - -function ask_time() { - local extra - add_widget 0 flowing -c "%BShow current time?%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(n) No.%b" - add_prompt time= - add_widget 0 print -P "%B(1) 12-hour format.%b" - add_prompt time=$time_12h - add_widget 0 print -P "%B(2) 24-hour format.%b" - add_prompt time=$time_24h - add_widget 0 print -P "(r) Restart from the beginning." - ask n12r - case $choice in - r) return 1;; - n) time=;; - 1) time=$time_12h; options+='12h time';; - 2) time=$time_24h; options+='24h time';; - esac - return 0 -} - -function ask_use_rprompt() { - [[ $style != pure ]] && return - add_widget 0 flowing -c "%BNon-permanent content location%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(1) Left.%b" - add_prompt - add_widget 0 print -P "%B(2) Right.%b" - add_prompt pure_use_rprompt= - add_widget 0 print -P "(r) Restart from the beginning." - ask 12r - case $choice in - r) return 1;; - 1) ;; - 2) pure_use_rprompt=; options+=rprompt;; - esac - return 0 -} - -function os_icon_name() { - local uname="$(uname)" - if [[ $uname == Linux && "$(uname -o 2>/dev/null)" == Android ]]; then - echo ANDROID_ICON - else - case $uname in - SunOS) echo SUNOS_ICON;; - Darwin) echo APPLE_ICON;; - CYGWIN_NT-*|MSYS_NT-*|MINGW64_NT-*|MINGW32_NT-*) echo WINDOWS_ICON;; - FreeBSD|OpenBSD|DragonFly) echo FREEBSD_ICON;; - Linux) - local os_release_id - if [[ -r /etc/os-release ]]; then - local lines=(${(f)"$(*|<6->.*) ]]; then - instant_prompt=off - options+=instant_prompt=auto-off - return 0 - fi - if (( $+functions[z4h] )); then - instant_prompt=quiet - options+=instant_prompt=auto-quiet - return - fi - add_widget 0 flowing -c "%BInstant Prompt Mode%b" - add_widget 0 print_instant_prompt_link - add_widget 1 - add_widget 0 print - add_widget 2 - add_widget 0 flowing +c -i 5 "%B(1) Verbose (recommended).%b" - add_widget 0 print - add_widget 1 - add_widget 0 flowing +c -i 5 "%B(2) Quiet.%b" Choose this if you\'ve read and understood \ - instant prompt documentation. - add_widget 0 print - add_widget 1 - add_widget 0 flowing +c -i 5 "%B(3) Off.%b" Choose this if you\'ve tried instant prompt \ - and found it incompatible with your zsh configuration files. - add_widget 0 print - add_widget 2 - add_widget 0 print -P "(r) Restart from the beginning." - ask 123r - case $choice in - r) return 1;; - 1) instant_prompt=verbose; options+=instant_prompt=verbose;; - 2) instant_prompt=quiet; options+=instant_prompt=quiet;; - 3) instant_prompt=off; options+=instant_prompt=off;; - esac - return 0 -} - -function ask_transient_prompt() { - local disable_rprompt=$((num_lines == 1)) - local p=76 - [[ $style == pure ]] && p=$pure_color[magenta] - [[ $style == lean_8colors ]] && p=2 - p="%F{$p}$prompt_char%f" - add_widget 0 flowing -c "%BEnable Transient Prompt?%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "%B(y) Yes.%b" - add_widget 0 print - add_widget 1 - add_widget 0 print -P "${(pl:$prompt_indent:: :)}$p %2Fgit%f pull" - add_widget 3 - add_widget 0 print -P "${(pl:$prompt_indent:: :)}$p %2Fgit%f branch x" - (( empty_line )) && add_widget 0 print - add_prompt_n buffer="%2Fgit%f checkout x$cursor" - add_widget 0 print - add_widget 2 - add_widget 0 print -P "%B(n) No.%b" - add_widget 0 print - add_widget 1 - add_widget 0 buffer="%2Fgit%f pull" print_prompt - add_widget 3 - (( empty_line )) && { add_widget 0 print; add_widget 3 } - add_prompt_n buffer="%2Fgit%f branch x" - (( empty_line )) && add_widget 0 print - add_prompt_n buffer="%2Fgit%f checkout x$cursor" - add_widget 0 print - add_widget 2 - add_widget 0 print -P "(r) Restart from the beginning." - ask ynr - case $choice in - r) return 1;; - y) transient_prompt=1; options+=transient_prompt;; - n) transient_prompt=0;; - esac - return 0 -} - -function ask_config_overwrite() { - config_backup= - config_backup_u=0 - if [[ ! -e $__p9k_cfg_path ]]; then - return 0 - fi - add_widget 0 flowing -c Powerlevel10k config file already exists. - add_widget 0 flowing -c "%BOverwrite" "%b%2F${__p9k_cfg_path_u//\\/\\\\}%f%B?%b" - add_widget 0 print -P "" - add_widget 0 print -P "%B(y) Yes.%b" - add_widget 0 print -P "" - add_widget 0 print -P "(r) Restart from the beginning." - ask yr - case $choice in - r) return 1;; - y) - if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then - local tmpdir=$TMPDIR - local tmpdir_u='$TMPDIR' - else - local tmpdir=/tmp - local tmpdir_u=/tmp - fi - if (( ! $+commands[mktemp] )) || - ! config_backup=$(mktemp $tmpdir/$__p9k_cfg_basename.XXXXXXXXXX 2>/dev/null); then - config_backup=$tmpdir/$__p9k_cfg_basename.$EPOCHREALTIME - fi - cp $__p9k_cfg_path $config_backup || quit -c - config_backup_u=$tmpdir_u/${(q-)config_backup:t} - ;; - esac - return 0 -} - -function ask_zshrc_edit() { - zshrc_content= - zshrc_backup= - zshrc_backup_u= - zshrc_has_cfg=0 - zshrc_has_instant_prompt=0 - write_zshrc=0 - - if (( $+functions[z4h] )); then - zshrc_has_cfg=1 - zshrc_has_instant_prompt=1 - return - fi - - check_zshrc_integration || quit -c - [[ $instant_prompt == off ]] && zshrc_has_instant_prompt=1 - (( zshrc_has_cfg && zshrc_has_instant_prompt )) && return - - add_widget 0 flowing -c %BApply changes to "%b%2F${__p9k_zshrc_u//\\/\\\\}%f%B?%b" - add_widget 0 print -P "" - add_widget 1 - local modifiable=y - if [[ ! -w $__p9k_zd ]]; then - modifiable= - add_widget 0 flowing -c %3FWARNING:%f %2F${__p9k_zd_u//\\/\\\\}%f %3Fis readonly.%f - add_widget 0 print -P "" - elif [[ -e $__p9k_zshrc && ! -w $__p9k_zshrc ]]; then - local -a stat - zstat -A stat +uid -- $__p9k_zshrc || quit -c - if (( stat[1] == EUID )); then - add_widget 0 flowing -c %3FNOTE:%f %2F${__p9k_zshrc_u//\\/\\\\}%f %3Fis readonly.%f - else - modifiable= - add_widget 0 flowing -c \ - %3FWARNING:%f %2F${__p9k_zshrc_u//\\/\\\\}%f %3Fis readonly and \ - not owned by the user. Cannot modify it.%f - fi - add_widget 0 print -P "" - fi - if [[ $modifiable == y ]]; then - add_widget 0 print -P "%B(y) Yes (recommended).%b" - else - add_widget 0 print -P "%1F(y) Yes (disabled).%f" - fi - add_widget 0 print -P "" - add_widget 0 flowing +c -i 5 "%B(n) No." I know which changes to apply and will do it myself.%b - add_widget 0 print -P "" - add_widget 0 print -P "(r) Restart from the beginning." - ask ${modifiable}nr - case $choice in - r) return 1;; - n) return 0;; - y) - write_zshrc=1 - if [[ -n $zshrc_content ]]; then - if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then - local tmpdir=$TMPDIR - local tmpdir_u='$TMPDIR' - else - local tmpdir=/tmp - local tmpdir_u=/tmp - fi - if (( ! $+commands[mktemp] )) || - ! zshrc_backup="$(mktemp $tmpdir/.zshrc.XXXXXXXXXX 2>/dev/null)"; then - zshrc_backup=$tmpdir/.zshrc.$EPOCHREALTIME - fi - cp -p $__p9k_zshrc $zshrc_backup || quit -c - local -i writable=1 - if [[ ! -w $zshrc_backup ]]; then - chmod u+w -- $zshrc_backup || quit -c - writable=0 - fi - print -r -- $zshrc_content >$zshrc_backup || quit -c - (( writable )) || chmod u-w -- $zshrc_backup || quit -c - zshrc_backup_u=$tmpdir_u/${(q-)zshrc_backup:t} - fi - ;; - esac - return 0 -} - -function generate_config() { - local base && base="$(<$__p9k_root_dir/config/p10k-${style//_/-}.zsh)" || return - local lines=("${(@f)base}") - - function sub() { - lines=("${(@)lines/#(#b)([[:space:]]#)typeset -g POWERLEVEL9K_$1=*/$match[1]typeset -g POWERLEVEL9K_$1=$2}") - } - - function uncomment() { - lines=("${(@)lines/#(#b)([[:space:]]#)\# $1( |)/$match[1]$1$match[2]$match[2]}") - } - - function rep() { - lines=("${(@)lines//$1/$2}") - } - - if [[ $style == pure ]]; then - rep "local grey=242" "local grey='$pure_color[grey]'" - rep "local red=1" "local red='$pure_color[red]'" - rep "local yellow=3" "local yellow='$pure_color[yellow]'" - rep "local blue=4" "local blue='$pure_color[blue]'" - rep "local magenta=5" "local magenta='$pure_color[magenta]'" - rep "local cyan=6" "local cyan='$pure_color[cyan]'" - rep "local white=7" "local white='$pure_color[white]'" - else - sub MODE $POWERLEVEL9K_MODE - - sub ICON_PADDING $POWERLEVEL9K_ICON_PADDING - - if [[ $POWERLEVEL9K_MODE == compatible ]]; then - sub STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION "'х'" - sub STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION "'х'" - sub STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION "'х'" - fi - - if [[ $POWERLEVEL9K_MODE == (compatible|powerline) ]]; then - uncomment 'typeset -g POWERLEVEL9K_LOCK_ICON' - sub LOCK_ICON "'∅'" - uncomment 'typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION' - sub NORDVPN_VISUAL_IDENTIFIER_EXPANSION "'nord'" - uncomment 'typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION' - sub RANGER_VISUAL_IDENTIFIER_EXPANSION "'▲'" - uncomment 'typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION' - sub KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION "'○'" - uncomment 'typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION' - sub AZURE_VISUAL_IDENTIFIER_EXPANSION "'az'" - uncomment 'typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION' - sub AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION "'eb'" - uncomment 'typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION' - sub BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION "'≡'" - fi - - if [[ $POWERLEVEL9K_MODE == (awesome-patched|awesome-fontconfig) && $cap_python == 0 ]]; then - uncomment 'typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION' - uncomment 'typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION' - uncomment 'typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION' - uncomment 'typeset -g POWERLEVEL9K_PYTHON_ICON' - sub VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION "'🐍'" - sub ANACONDA_VISUAL_IDENTIFIER_EXPANSION "'🐍'" - sub PYENV_VISUAL_IDENTIFIER_EXPANSION "'🐍'" - sub PYTHON_ICON "'🐍'" - fi - - case $POWERLEVEL9K_MODE in - nerdfont-complete) - sub BATTERY_STAGES "'\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578'" - ;; - nerdfont-v3) - sub BATTERY_STAGES "'\UF008E\UF007A\UF007B\UF007C\UF007D\UF007E\UF007F\UF0080\UF0081\UF0082\UF0079'" - ;; - esac - - if [[ $style == (classic|rainbow) ]]; then - if [[ $style == classic ]]; then - sub BACKGROUND $bg_color[$color] - sub LEFT_SUBSEGMENT_SEPARATOR "'%$sep_color[$color]F$left_subsep'" - sub RIGHT_SUBSEGMENT_SEPARATOR "'%$sep_color[$color]F$right_subsep'" - sub VCS_LOADING_FOREGROUND $sep_color[$color] - rep '%248F' "%$prefix_color[$color]F" - else - sub LEFT_SUBSEGMENT_SEPARATOR "'$left_subsep'" - sub RIGHT_SUBSEGMENT_SEPARATOR "'$right_subsep'" - fi - sub RULER_FOREGROUND $frame_color[$color] - sub MULTILINE_FIRST_PROMPT_GAP_FOREGROUND $frame_color[$color] - sub MULTILINE_FIRST_PROMPT_PREFIX "'%$frame_color[$color]F╭─'" - sub MULTILINE_NEWLINE_PROMPT_PREFIX "'%$frame_color[$color]F├─'" - sub MULTILINE_LAST_PROMPT_PREFIX "'%$frame_color[$color]F╰─'" - sub MULTILINE_FIRST_PROMPT_SUFFIX "'%$frame_color[$color]F─╮'" - sub MULTILINE_NEWLINE_PROMPT_SUFFIX "'%$frame_color[$color]F─┤'" - sub MULTILINE_LAST_PROMPT_SUFFIX "'%$frame_color[$color]F─╯'" - sub LEFT_SEGMENT_SEPARATOR "'$left_sep'" - sub RIGHT_SEGMENT_SEPARATOR "'$right_sep'" - sub LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL "'$left_tail'" - sub LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL "'$left_head'" - sub RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL "'$right_head'" - sub RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL "'$right_tail'" - fi - - if [[ -n ${(j::)extra_icons} ]]; then - local branch_icon=${icons[VCS_BRANCH_ICON]// } - sub VCS_BRANCH_ICON "'$branch_icon '" - uncomment os_icon - else - uncomment 'typeset -g POWERLEVEL9K_DIR_CLASSES' - uncomment 'typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION' - uncomment 'typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION' - uncomment 'typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION' - sub VCS_VISUAL_IDENTIFIER_EXPANSION '' - sub COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION '' - sub TIME_VISUAL_IDENTIFIER_EXPANSION '' - fi - - if [[ -n ${(j::)prefixes} ]]; then - uncomment 'typeset -g POWERLEVEL9K_VCS_PREFIX' - uncomment 'typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX' - uncomment 'typeset -g POWERLEVEL9K_CONTEXT_PREFIX' - uncomment 'typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX' - uncomment 'typeset -g POWERLEVEL9K_TIME_PREFIX' - uncomment 'typeset -g POWERLEVEL9K_TOOLBOX_PREFIX' - if [[ $style == (lean|classic) ]]; then - [[ $style == classic ]] && local fg="%$prefix_color[$color]F" || local fg="%f" - sub VCS_PREFIX "'${fg}on '" - sub COMMAND_EXECUTION_TIME_PREFIX "'${fg}took '" - sub CONTEXT_PREFIX "'${fg}with '" - sub KUBECONTEXT_PREFIX "'${fg}at '" - sub TIME_PREFIX "'${fg}at '" - sub TOOLBOX_PREFIX "'${fg}in '" - fi - fi - - sub MULTILINE_FIRST_PROMPT_GAP_CHAR "'$gap_char'" - - if [[ $style == (classic|rainbow) && $num_lines == 2 ]]; then - if (( ! right_frame )); then - sub MULTILINE_FIRST_PROMPT_SUFFIX '' - sub MULTILINE_NEWLINE_PROMPT_SUFFIX '' - sub MULTILINE_LAST_PROMPT_SUFFIX '' - fi - if (( ! left_frame )); then - sub MULTILINE_FIRST_PROMPT_PREFIX '' - sub MULTILINE_NEWLINE_PROMPT_PREFIX '' - sub MULTILINE_LAST_PROMPT_PREFIX '' - sub STATUS_OK false - sub STATUS_ERROR false - fi - fi - - if [[ $style == lean* ]]; then - sub RULER_FOREGROUND $frame_color[$color] - sub MULTILINE_FIRST_PROMPT_GAP_FOREGROUND $frame_color[$color] - if (( right_frame )); then - sub MULTILINE_FIRST_PROMPT_SUFFIX "'%$frame_color[$color]F─╮'" - sub MULTILINE_NEWLINE_PROMPT_SUFFIX "'%$frame_color[$color]F─┤'" - sub MULTILINE_LAST_PROMPT_SUFFIX "'%$frame_color[$color]F─╯'" - sub RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL "' '" - fi - if (( left_frame )); then - sub MULTILINE_FIRST_PROMPT_PREFIX "'%$frame_color[$color]F╭─'" - sub MULTILINE_NEWLINE_PROMPT_PREFIX "'%$frame_color[$color]F├─'" - sub MULTILINE_LAST_PROMPT_PREFIX "'%$frame_color[$color]F╰─'" - sub LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL "' '" - fi - fi - - if [[ $style == (classic|rainbow) ]]; then - if (( num_lines == 2 && ! left_frame )); then - uncomment prompt_char - else - uncomment vi_mode - fi - fi - - if [[ $POWERLEVEL9K_MODE == ascii ]]; then - sub 'STATUS_OK_VISUAL_IDENTIFIER_EXPANSION' "'ok'" - sub 'STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION' "'ok'" - sub 'STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION' "'err'" - sub 'STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION' "" - sub 'STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION' "'err'" - sub 'BATTERY_STAGES' "('battery')" - sub 'PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION' "'>'" - sub 'PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION' "'<'" - sub 'PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION' "'V'" - sub 'PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION' "'^'" - rep "-i '⭐'" "-i '*'" - rep '…' '..' - rep '⇣' '<' - rep '⇡' '>' - rep '⇠' '<-' - rep '⇢' '->' - rep '─' '-' - fi - fi - - if (( $+pure_use_rprompt )); then - local segment - for segment in command_execution_time virtualenv context; do - rep " $segment" " tmp_$segment" - uncomment $segment - rep " tmp_$segment " " # $segment" - done - fi - - if [[ -n $time ]]; then - uncomment time - if [[ $time == $time_12h ]]; then - sub TIME_FORMAT "'%D{%I:%M:%S %p}'" - fi - fi - - if (( num_lines == 1 )); then - local -a tmp - local line - for line in "$lines[@]"; do - [[ $line == (' newline'*|*'===[ Line #'*) ]] || tmp+=$line - done - lines=("$tmp[@]") - fi - - (( empty_line )) && sub PROMPT_ADD_NEWLINE true || sub PROMPT_ADD_NEWLINE false - - sub INSTANT_PROMPT $instant_prompt - (( transient_prompt )) && sub TRANSIENT_PROMPT always - - local header=${(%):-"# Generated by Powerlevel10k configuration wizard on %D{%Y-%m-%d at %H:%M %Z}."}$'\n' - header+="# Based on romkatv/powerlevel10k/config/p10k-${style//_/-}.zsh" - if [[ $commands[sum] == ('/bin'|'/usr/bin'|'/usr/local/bin')'/sum' ]]; then - local -a sum - if sum=($(sum <<<${base//$'\r\n'/$'\n'} 2>/dev/null)) && (( $#sum == 2 )); then - header+=", checksum $sum[1]" - fi - fi - header+=$'.\n' - local line="# Wizard options: $options[1]" - local opt - for opt in $options[2,-1]; do - if (( $#line + $#opt > 85 )); then - header+=$line - header+=$',\n' - line="# $opt" - else - line+=", $opt" - fi - done - header+=$line - header+=$'.\n# Type `p10k configure` to generate another config.\n#' - - command mkdir -p -- ${__p9k_cfg_path:h} || return - - if [[ -e $__p9k_cfg_path ]]; then - unlink $__p9k_cfg_path || return - fi - print -lr -- "$header" "$lines[@]" >$__p9k_cfg_path -} - -function change_zshrc() { - (( write_zshrc )) || return 0 - - local tmp=$__p9k_zshrc.${(%):-%n}.tmp.$$ - [[ ! -e $__p9k_zshrc ]] || cp -p $__p9k_zshrc $tmp || return - - { - local -i writable=1 - if [[ -e $tmp && ! -w $tmp ]]; then - chmod u+w -- $tmp || return - writable=0 - fi - - print -n >$tmp || return - - if (( !zshrc_has_instant_prompt )); then - >>$tmp print -r -- "# Enable Powerlevel10k instant prompt. Should stay close to the top of ${(%)__p9k_zshrc_u}. -# Initialization code that may require console input (password prompts, [y/n] -# confirmations, etc.) must go above this block; everything else may go below. -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" || return - fi - if [[ -n $zshrc_content ]]; then - (( zshrc_has_instant_prompt )) || print >>$tmp || return - >>$tmp print -r -- $zshrc_content || return - fi - if (( !zshrc_has_cfg )); then - >>$tmp print -r -- " -# To customize prompt, run \`p10k configure\` or edit ${(%)__p9k_cfg_path_u}. -[[ ! -f ${(%)__p9k_cfg_path_u} ]] || source ${(%)__p9k_cfg_path_u}" || return - fi - (( writable )) || chmod u-w -- $tmp || return - command mv -f -- $tmp $__p9k_zshrc || return - } always { - zf_rm -f -- $tmp - } - - if [[ -n $zshrc_backup_u ]]; then - print -rP "" - flowing +c See "%B${__p9k_zshrc_u//\\/\\\\}%b" changes: - print -rP " - %2Fdiff%f %B$zshrc_backup_u%b %B$__p9k_zshrc_u%b" - fi - return 0 -} - -function check_zshrc_integration() { - typeset -g zshrc_content= - typeset -gi zshrc_has_cfg=0 zshrc_has_instant_prompt=0 - [[ -e $__p9k_zshrc ]] || return 0 - zshrc_content="$(<$__p9k_zshrc)" || return - local lines=(${(f)zshrc_content}) - local f0=$__p9k_cfg_path_o - local f1=${(q)f0} - local f2=${(q-)f0} - local f3=${(qq)f0} - local f4=${(qqq)f0} - local g1=${${(q)__p9k_cfg_path_o}/#(#b)${(q)HOME}\//'~/'} - local h0='${ZDOTDIR:-~}/.p10k.zsh' - local h1='${ZDOTDIR:-$HOME}/.p10k.zsh' - local h2='"${ZDOTDIR:-$HOME}/.p10k.zsh"' - local h3='"${ZDOTDIR:-$HOME}"/.p10k.zsh' - local h4='${ZDOTDIR}/.p10k.zsh' - local h5='"${ZDOTDIR}/.p10k.zsh"' - local h6='"${ZDOTDIR}"/.p10k.zsh' - local h7='$ZDOTDIR/.p10k.zsh' - local h8='"$ZDOTDIR/.p10k.zsh"' - local h9='"$ZDOTDIR"/.p10k.zsh' - local h10='$POWERLEVEL9K_CONFIG_FILE' - local h11='"$POWERLEVEL9K_CONFIG_FILE"' - if [[ -n ${(@M)lines:#(#b)[^#]#([^[:IDENT:]]|)source[[:space:]]##($f1|$f2|$f3|$f4|$g1|$h0|$h1|$h2|$h3|$h4|$h5|$h6|$h7|$h8|$h9|$h10|$h11)(|[[:space:]]*|'#'*)} ]]; then - zshrc_has_cfg=1 - fi - local pre='${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh' - if [[ -n ${(@M)lines:#(#b)[^#]#([^[:IDENT:]]|)source[[:space:]]##($pre|\"$pre\")(|[[:space:]]*|'#'*)} ]]; then - zshrc_has_instant_prompt=1 - fi - return 0 -} - -() { - (( force )) && return - _p9k_can_configure -q || return 0 - local zshrc_content zshrc_has_cfg zshrc_has_instant_prompt - check_zshrc_integration 2>/dev/null || return 0 - (( zshrc_has_cfg )) || return 0 - [[ -s $__p9k_cfg_path ]] || return 0 - print -P "" - flowing \ - Powerlevel10k configuration file "($__p9k_cfg_path_u)" was not sourced. This \ - might have been caused by errors in zsh startup files, most likely in \ - $__p9k_zshrc_u. See above for any indication of such errors and fix them. If \ - there are no errors, try running Powerlevel10k configuration wizard: - print -P '' - print -P ' %2Fp10k%f %Bconfigure%b' - print -P '' - flowing \ - If you do nothing, you will see this message again when you start zsh. You can \ - suppress it by defining %BPOWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true%b in \ - $__p9k_zshrc_u. - print -P '' - return 1 -} || return - -if (( $+terminfo[smcup] && $+terminfo[rmcup] )) && echoti smcup 2>/dev/null; then - function restore_screen() { - echoti rmcup 2>/dev/null - function restore_screen() {} - } -else - function restore_screen() {} -fi - -{ # always - -if (( force )); then - _p9k_can_configure || return -else - _p9k_can_configure -q || return -fi - -zmodload zsh/terminfo zsh/datetime || return - -if [[ $ZSH_VERSION == (5.7.<1->*|5.<8->*|<6->.*) && $COLORTERM == (24bit|truecolor) ]]; then - local -ir has_truecolor=1 -else - local -ir has_truecolor=0 -fi - -stty -echo 2>/dev/null - -while true; do - local instant_prompt=verbose zshrc_content= zshrc_backup= zshrc_backup_u= - local -i zshrc_has_cfg=0 zshrc_has_instant_prompt=0 write_zshrc=0 - local POWERLEVEL9K_MODE= POWERLEVEL9K_ICON_PADDING=moderate style= config_backup= config_backup_u= - local gap_char=' ' prompt_char='❯' down_triangle='\uE0BC' up_triangle='\uE0BA' slanted_bar='\u2571' - local left_subsep= right_subsep= left_tail= right_tail= left_head= right_head= time= - local -i num_lines=2 empty_line=0 color=2 left_frame=1 right_frame=1 transient_prompt=0 - local -i cap_diamond=0 cap_python=0 cap_arrow=0 cap_lock=0 cap_quotes=0 - local -a extra_icons=('' '' '') - local -a frame_color=(244 242 240 238) - local -a color_name=(Lightest Light Dark Darkest) - local -a prefixes=('' '') - local -a options=() - if (( has_truecolor )); then - local -A pure_color=(${(kv)pure_snazzy}) - else - local -A pure_color=(${(kv)pure_original}) - fi - - unset pure_use_rprompt - - if [[ $TERM != (dumb|linux) && $langinfo[CODESET] == (utf|UTF)(-|)8 ]]; then - ask_font || continue - ask_diamond || continue - if [[ $AWESOME_GLYPHS_LOADED == 1 ]]; then - POWERLEVEL9K_MODE=awesome-mapped-fontconfig - else - ask_lock '\uF023' || continue - if (( ! cap_lock )); then - ask_lock '\uE138' "Let's try another one." || continue - if (( cap_lock )); then - if (( cap_diamond )); then - POWERLEVEL9K_MODE=awesome-patched - ask_python || continue - else - POWERLEVEL9K_MODE=flat - fi - else - if (( cap_diamond )); then - POWERLEVEL9K_MODE=powerline - else - ask_quotes || continue - (( cap_quotes )) && POWERLEVEL9K_MODE=compatible || POWERLEVEL9K_MODE=ascii - fi - fi - elif (( ! cap_diamond )); then - POWERLEVEL9K_MODE=awesome-fontconfig - else - ask_arrow '\uFC35' || continue - if (( cap_arrow )); then - POWERLEVEL9K_MODE=nerdfont-complete - else - ask_arrow '\UF0737' "Let's try another one." || continue - if (( cap_arrow )); then - POWERLEVEL9K_MODE=nerdfont-v3 - else - POWERLEVEL9K_MODE=awesome-fontconfig - ask_python || continue - fi - fi - fi - fi - else - POWERLEVEL9K_MODE=ascii - fi - - if [[ $POWERLEVEL9K_MODE == powerline ]]; then - options+=powerline - elif (( cap_diamond )); then - options+="$POWERLEVEL9K_MODE + powerline" - else - options+="$POWERLEVEL9K_MODE" - fi - (( cap_python )) && options[-1]+=' + python' - if (( cap_diamond )); then - left_sep=$right_triangle - right_sep=$left_triangle - left_subsep=$right_angle - right_subsep=$left_angle - left_head=$right_triangle - right_head=$left_triangle - else - left_sep= - right_sep= - left_head= - right_head= - if [[ $POWERLEVEL9K_MODE == ascii ]]; then - left_subsep='|' - right_subsep='|' - prompt_char='>' - left_frame=0 - right_frame=0 - else - left_subsep=$vertical_bar - right_subsep=$vertical_bar - fi - fi - - _p9k_init_icons - ask_icon_padding || continue - _p9k_init_icons - - ask_style || continue - ask_charset || continue - ask_color_scheme || continue - ask_color || continue - ask_use_rprompt || continue - ask_time || continue - ask_separators || continue - ask_heads || continue - ask_tails || continue - ask_num_lines || continue - ask_gap_char || continue - ask_frame || continue - ask_ornaments_color || continue - ask_empty_line || continue - ask_extra_icons || continue - ask_prefixes || continue - ask_transient_prompt || continue - ask_instant_prompt || continue - ask_config_overwrite || continue - ask_zshrc_edit || continue - break -done - -restore_screen - -if (( !in_z4h_wizard )); then - print - - flowing +c New config: "%U${__p9k_cfg_path_u//\\/\\\\}%u." - if [[ -n $config_backup ]]; then - flowing +c Backup of the old config: "%U${config_backup_u//\\/\\\\}%u." - fi - if [[ -n $zshrc_backup ]]; then - flowing +c Backup of "%U${__p9k_zshrc_u//\\/\\\\}%u:" "%U${zshrc_backup_u//\\/\\\\}%u." - fi -fi - -generate_config || return -change_zshrc || return - -if (( !in_z4h_wizard )); then - print -rP "" - flowing +c File feature requests and bug reports at "$(href https://github.com/romkatv/powerlevel10k/issues)" - print -rP "" -fi - -success=1 - -} always { - (( success )) || quit - consume_input - stty echo 2>/dev/null - show_cursor - restore_screen -} diff --git a/airootfs/etc/skel/powerlevel10k/internal/worker.zsh b/airootfs/etc/skel/powerlevel10k/internal/worker.zsh deleted file mode 100644 index 269e8aa..0000000 --- a/airootfs/etc/skel/powerlevel10k/internal/worker.zsh +++ /dev/null @@ -1,219 +0,0 @@ -# invoked in worker: _p9k_worker_main -function _p9k_worker_main() { - mkfifo -- $_p9k__worker_file_prefix.fifo || return - echo -nE - s$_p9k_worker_pgid$'\x1e' || return - exec <$_p9k__worker_file_prefix.fifo || return - zf_rm -- $_p9k__worker_file_prefix.fifo || return - - local -i reset - local req fd - local -a ready - local _p9k_worker_request_id - local -A _p9k_worker_fds # fd => id$'\x1f'callback - local -A _p9k_worker_inflight # id => inflight count - - function _p9k_worker_reply() { - print -nr -- e${(pj:\n:)@}$'\x1e' || kill -- -$_p9k_worker_pgid - } - - # usage: _p9k_worker_async - function _p9k_worker_async() { - local fd async=$1 - sysopen -r -o cloexec -u fd <(() { eval $async; } && print -n '\x1e') || return - (( ++_p9k_worker_inflight[$_p9k_worker_request_id] )) - _p9k_worker_fds[$fd]=$_p9k_worker_request_id$'\x1f'$2 - } - - trap '' PIPE - - { - while zselect -a ready 0 ${(k)_p9k_worker_fds}; do - [[ $ready[1] == -r ]] || return - for fd in ${ready:1}; do - if [[ $fd == 0 ]]; then - local buf= - [[ -t 0 ]] # https://www.zsh.org/mla/workers/2020/msg00207.html - if sysread -t 0 'buf[$#buf+1]'; then - while [[ $buf != *$'\x1e' ]]; do - sysread 'buf[$#buf+1]' || return - done - else - (( $? == 4 )) || return - fi - for req in ${(ps:\x1e:)buf}; do - _p9k_worker_request_id=${req%%$'\x1f'*} - () { eval $req[$#_p9k_worker_request_id+2,-1] } - (( $+_p9k_worker_inflight[$_p9k_worker_request_id] )) && continue - print -rn -- d$_p9k_worker_request_id$'\x1e' || return - done - else - local REPLY= - while true; do - if sysread -i $fd 'REPLY[$#REPLY+1]'; then - [[ $REPLY == *$'\x1e' ]] || continue - else - (( $? == 5 )) || return - break - fi - done - local cb=$_p9k_worker_fds[$fd] - _p9k_worker_request_id=${cb%%$'\x1f'*} - unset "_p9k_worker_fds[$fd]" - exec {fd}>&- - if [[ $REPLY == *$'\x1e' ]]; then - REPLY[-1]="" - () { eval $cb[$#_p9k_worker_request_id+2,-1] } - fi - if (( --_p9k_worker_inflight[$_p9k_worker_request_id] == 0 )); then - unset "_p9k_worker_inflight[$_p9k_worker_request_id]" - print -rn -- d$_p9k_worker_request_id$'\x1e' || return - fi - fi - done - done - } always { - kill -- -$_p9k_worker_pgid - } -} - -# invoked in master: _p9k_worker_invoke -function _p9k_worker_invoke() { - [[ -n $_p9k__worker_resp_fd ]] || return - local req=$1$'\x1f'$2$'\x1e' - if [[ -n $_p9k__worker_req_fd && $+_p9k__worker_request_map[$1] == 0 ]]; then - _p9k__worker_request_map[$1]= - print -rnu $_p9k__worker_req_fd -- $req - else - _p9k__worker_request_map[$1]=$req - fi -} - -function _p9k_worker_cleanup() { - # __p9k_intro bugs out here in some cases for some reason. - emulate -L zsh - [[ $_p9k__worker_shell_pid == $sysparams[pid] ]] && _p9k_worker_stop - return 0 -} - -function _p9k_worker_stop() { - # See comments in _p9k_worker_cleanup. - emulate -L zsh - add-zsh-hook -D zshexit _p9k_worker_cleanup - [[ -n $_p9k__worker_resp_fd ]] && zle -F $_p9k__worker_resp_fd - [[ -n $_p9k__worker_resp_fd ]] && exec {_p9k__worker_resp_fd}>&- - [[ -n $_p9k__worker_req_fd ]] && exec {_p9k__worker_req_fd}>&- - [[ -n $_p9k__worker_pid ]] && kill -- -$_p9k__worker_pid 2>/dev/null - [[ -n $_p9k__worker_file_prefix ]] && zf_rm -f -- $_p9k__worker_file_prefix.fifo - _p9k__worker_pid= - _p9k__worker_req_fd= - _p9k__worker_resp_fd= - _p9k__worker_shell_pid= - _p9k__worker_request_map=() - return 0 -} - -function _p9k_worker_receive() { - eval "$__p9k_intro" - - [[ -z $_p9k__worker_resp_fd ]] && return - - { - (( $# <= 1 )) || return - - local buf resp - - [[ -t $_p9k__worker_resp_fd ]] # https://www.zsh.org/mla/workers/2020/msg00207.html - if sysread -i $_p9k__worker_resp_fd -t 0 'buf[$#buf+1]'; then - while [[ $buf == *[^$'\x05\x1e']$'\x05'# ]]; do - sysread -i $_p9k__worker_resp_fd 'buf[$#buf+1]' || return - done - else - (( $? == 4 )) || return - fi - - local -i reset max_reset - for resp in ${(ps:\x1e:)${buf//$'\x05'}}; do - local arg=$resp[2,-1] - case $resp[1] in - d) - local req=$_p9k__worker_request_map[$arg] - if [[ -n $req ]]; then - _p9k__worker_request_map[$arg]= - print -rnu $_p9k__worker_req_fd -- $req || return - else - unset "_p9k__worker_request_map[$arg]" - fi - ;; - e) - () { eval $arg } - (( reset > max_reset )) && max_reset=reset - ;; - s) - [[ -z $_p9k__worker_req_fd ]] || return - [[ $arg == <1-> ]] || return - _p9k__worker_pid=$arg - sysopen -w -o cloexec -u _p9k__worker_req_fd $_p9k__worker_file_prefix.fifo || return - local req= - for req in $_p9k__worker_request_map; do - print -rnu $_p9k__worker_req_fd -- $req || return - done - _p9k__worker_request_map=({${(k)^_p9k__worker_request_map},''}) - ;; - *) - return 1 - ;; - esac - done - - if (( max_reset == 2 )); then - _p9k__refresh_reason=worker - _p9k_set_prompt - _p9k__refresh_reason='' - fi - (( max_reset )) && _p9k_reset_prompt - return 0 - } always { - (( $? )) && _p9k_worker_stop - } -} - -function _p9k_worker_start() { - setopt monitor || return - { - [[ -n $_p9k__worker_resp_fd ]] && return - - if [[ -n "$TMPDIR" && ( ( -d "$TMPDIR" && -w "$TMPDIR" ) || ! ( -d /tmp && -w /tmp ) ) ]]; then - local tmpdir=$TMPDIR - else - local tmpdir=/tmp - fi - _p9k__worker_file_prefix=$tmpdir/p10k.worker.$EUID.$sysparams[pid].$EPOCHSECONDS - - sysopen -r -o cloexec -u _p9k__worker_resp_fd <( - exec 0$_p9k__worker_file_prefix.log - setopt xtrace - else - exec 2>/dev/null - fi - builtin cd -q / || return - zmodload zsh/zselect || return - ! { zselect -t0 || (( $? != 1 )) } || return - local _p9k_worker_pgid=$sysparams[pid] - _p9k_worker_main & - { - trap '' PIPE - while syswrite $'\x05'; do zselect -t 1000; done - zf_rm -f $_p9k__worker_file_prefix.fifo - kill -- -$_p9k_worker_pgid - } & - exec =true) || return - _p9k__worker_pid=$sysparams[procsubstpid] - zle -F $_p9k__worker_resp_fd _p9k_worker_receive - _p9k__worker_shell_pid=$sysparams[pid] - add-zsh-hook zshexit _p9k_worker_cleanup - } always { - (( $? )) && _p9k_worker_stop - } -} diff --git a/airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme b/airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme deleted file mode 100644 index 92079d4..0000000 --- a/airootfs/etc/skel/powerlevel10k/powerlevel10k.zsh-theme +++ /dev/null @@ -1,83 +0,0 @@ -# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 -################################################################ -# Powerlevel10k Theme -# https://github.com/romkatv/powerlevel10k -# -# Forked from Powerlevel9k Theme -# https://github.com/bhilburn/powerlevel9k -# -# Which in turn was forked from Agnoster Theme -# https://github.com/robbyrussell/oh-my-zsh/blob/74177c5320b2a1b2f8c4c695c05984b57fd7c6ea/themes/agnoster.zsh-theme -################################################################ - -# Temporarily change options. -'builtin' 'local' '-a' '__p9k_src_opts' -[[ ! -o 'aliases' ]] || __p9k_src_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || __p9k_src_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || __p9k_src_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -(( $+__p9k_root_dir )) || typeset -gr __p9k_root_dir=${POWERLEVEL9K_INSTALLATION_DIR:-${${(%):-%x}:A:h}} -(( $+__p9k_intro )) || { - # Leading spaces before `local` are important. Otherwise Antigen will remove `local` (!!!). - # __p9k_trapint is to work around bugs in zsh: https://www.zsh.org/mla/workers/2020/msg00612.html. - # Likewise for `trap ":"` instead of the plain `trap ""`. - typeset -gr __p9k_intro_base='emulate -L zsh -o no_hist_expand -o extended_glob -o no_prompt_bang -o prompt_percent -o no_prompt_subst -o no_aliases -o no_bg_nice -o typeset_silent -o no_rematch_pcre - (( $+__p9k_trapped )) || { local -i __p9k_trapped; trap : INT; trap "trap ${(q)__p9k_trapint:--} INT" EXIT } - local -a match mbegin mend - local -i MBEGIN MEND OPTIND - local MATCH OPTARG IFS=$'\'' \t\n\0'\' - typeset -gr __p9k_intro_locale='[[ $langinfo[CODESET] != (utf|UTF)(-|)8 ]] && _p9k_init_locale && { [[ -n $LC_ALL ]] && local LC_ALL=$__p9k_locale || local LC_CTYPE=$__p9k_locale }' - typeset -gr __p9k_intro_no_locale="${${__p9k_intro_base/ match / match reply }/ MATCH / MATCH REPLY }" - typeset -gr __p9k_intro_no_reply="$__p9k_intro_base; $__p9k_intro_locale" - typeset -gr __p9k_intro="$__p9k_intro_no_locale; $__p9k_intro_locale" -} - -zmodload zsh/langinfo - -function _p9k_init_locale() { - if (( ! $+__p9k_locale )); then - typeset -g __p9k_locale= - (( $+commands[locale] )) || return - local -a loc - loc=(${(@M)$(locale -a 2>/dev/null):#*.(utf|UTF)(-|)8}) || return - (( $#loc )) || return - typeset -g __p9k_locale=${loc[(r)(#i)C.UTF(-|)8]:-${loc[(r)(#i)en_US.UTF(-|)8]:-$loc[1]}} - fi - [[ -n $__p9k_locale ]] -} - -() { - eval "$__p9k_intro" - if (( $+__p9k_sourced )); then - (( $+functions[_p9k_setup] )) && _p9k_setup - return 0 - fi - typeset -gr __p9k_dump_file=${XDG_CACHE_HOME:-~/.cache}/p10k-dump-${(%):-%n}.zsh - if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file ]] && (( ! $+functions[_p9k_preinit] )) && source $__p9k_dump_file 2>/dev/null && (( $+functions[_p9k_preinit] )); then - _p9k_preinit - fi - typeset -gr __p9k_sourced=13 - if [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]]; then - if [[ -w $__p9k_root_dir && -w $__p9k_root_dir/internal && -w $__p9k_root_dir/gitstatus ]]; then - local f - for f in $__p9k_root_dir/{powerlevel9k.zsh-theme,powerlevel10k.zsh-theme,internal/p10k.zsh,internal/icons.zsh,internal/configure.zsh,internal/worker.zsh,internal/parser.zsh,gitstatus/gitstatus.plugin.zsh,gitstatus/install}; do - [[ $f.zwc -nt $f ]] && continue - zmodload -F zsh/files b:zf_mv b:zf_rm - local tmp=$f.tmp.$$.zwc - { - # `zf_mv -f src dst` fails on NTFS if `dst` is not writable, hence `zf_rm`. - zf_rm -f -- $f.zwc && zcompile -R -- $tmp $f && zf_mv -f -- $tmp $f.zwc - } always { - (( $? )) && zf_rm -f -- $tmp - } - done - fi - fi - builtin source $__p9k_root_dir/internal/p10k.zsh || true -} - -(( $+__p9k_instant_prompt_active )) && unsetopt prompt_cr prompt_sp || setopt prompt_cr prompt_sp - -(( ${#__p9k_src_opts} )) && setopt ${__p9k_src_opts[@]} -'builtin' 'unset' '__p9k_src_opts' diff --git a/airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme b/airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme deleted file mode 100644 index 328cd83..0000000 --- a/airootfs/etc/skel/powerlevel10k/powerlevel9k.zsh-theme +++ /dev/null @@ -1 +0,0 @@ -'builtin' 'source' "${POWERLEVEL9K_INSTALLATION_DIR:-${${(%):-%x}:A:h}}/powerlevel10k.zsh-theme" diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index 2f38d0e..f3edc6e 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -6,16 +6,17 @@ if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]] source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" fi -source ~/powerlevel10k/powerlevel10k.zsh-theme +source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh -# If not running interactively, don't do anything -[[ $- != *i* ]] && return +# Autosuggestions +source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh + +# fast-synatx-highlighting +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh -alias ls='ls --color=auto' -PS1='[\u@\h \W]\$ ' #Display ISO version and distribution information in short alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" From 478679f971a79d7a42c816e6c0376504835c1c7d Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Sat, 29 Apr 2023 02:00:33 +0530 Subject: [PATCH 06/19] edited .zshrc and packagesx86_64 --- airootfs/etc/skel/.zshrc | 6 +++--- airootfs/root/.zshrc | 6 ++++-- packages.x86_64 | 7 +++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index f3edc6e..96aa457 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -14,9 +14,9 @@ source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme # Autosuggestions source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh -# fast-synatx-highlighting -source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh - +# synatx-highlighting +#source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh #Display ISO version and distribution information in short alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index f3edc6e..7f5d7f9 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -14,8 +14,10 @@ source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme # Autosuggestions source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh -# fast-synatx-highlighting -source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +# synatx-highlighting +#source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + #Display ISO version and distribution information in short diff --git a/packages.x86_64 b/packages.x86_64 index 5a5ad03..4a8f1e3 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -188,10 +188,13 @@ blueman ## AUR Installer and Helper #paru -# Printer Driver +# Printer DriverS #cups #system-config-printer # Powerlevel10k ttf-meslo-nerd-font-powerlevel10k -#zsh-theme-powerlevel10k-git +zsh-theme-powerlevel10k-git +zsh-completions +zsh-autosuggestions +zsh-syntax-highlighting From 312e0a7cd026610733751d978981ce5d403acb0e Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Sun, 30 Apr 2023 00:25:14 +0530 Subject: [PATCH 07/19] Update .p10k.zsh Changed error status error code colour --- airootfs/etc/skel/.p10k.zsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airootfs/etc/skel/.p10k.zsh b/airootfs/etc/skel/.p10k.zsh index 9cc2ac1..32ce866 100644 --- a/airootfs/etc/skel/.p10k.zsh +++ b/airootfs/etc/skel/.p10k.zsh @@ -520,7 +520,7 @@ # it will signify error by turning red. typeset -g POWERLEVEL9K_STATUS_ERROR=true typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=16 typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 # Status when the last command was terminated by a signal. @@ -528,14 +528,14 @@ # Use terse signal names: "INT" instead of "SIGINT(2)". typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=16 typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 # Status when some part of a pipe command fails and the overall exit status is also non-zero. # It may look like this: 1|0. typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=16 typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 ###################[ command_execution_time: duration of the last command ]################### From a3fbf8558ea5147e1e2771d734f795fa2897cc49 Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Sun, 30 Apr 2023 00:42:35 +0530 Subject: [PATCH 08/19] Update .p10k.zsh Changed error status error code colour for root user --- airootfs/root/.p10k.zsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airootfs/root/.p10k.zsh b/airootfs/root/.p10k.zsh index 9cc2ac1..32ce866 100644 --- a/airootfs/root/.p10k.zsh +++ b/airootfs/root/.p10k.zsh @@ -520,7 +520,7 @@ # it will signify error by turning red. typeset -g POWERLEVEL9K_STATUS_ERROR=true typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=16 typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 # Status when the last command was terminated by a signal. @@ -528,14 +528,14 @@ # Use terse signal names: "INT" instead of "SIGINT(2)". typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=16 typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 # Status when some part of a pipe command fails and the overall exit status is also non-zero. # It may look like this: 1|0. typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=16 typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 ###################[ command_execution_time: duration of the last command ]################### From c1d05a33e74566ad1b2b4fa27b53519e8ac2fa06 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Sun, 30 Apr 2023 02:07:36 +0530 Subject: [PATCH 09/19] changed zsh-syntax-highlight to zsh-fast-syntax-highlight --- airootfs/etc/skel/.zshrc | 4 ++-- airootfs/root/.zshrc | 4 ++-- packages.x86_64 | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index 96aa457..8714021 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -15,8 +15,8 @@ source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # synatx-highlighting -#source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh #Display ISO version and distribution information in short alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index 7f5d7f9..1a1668b 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -15,8 +15,8 @@ source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # synatx-highlighting -#source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh diff --git a/packages.x86_64 b/packages.x86_64 index 4a8f1e3..d47f28c 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -194,7 +194,7 @@ blueman # Powerlevel10k ttf-meslo-nerd-font-powerlevel10k -zsh-theme-powerlevel10k-git +zsh-theme-powerlevel10k zsh-completions zsh-autosuggestions -zsh-syntax-highlighting +zsh-fast-syntax-highlighting From 3327cd8fc9cd50e1560e15c649cb080011e99fef Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Sun, 30 Apr 2023 03:19:02 +0530 Subject: [PATCH 10/19] ctrl + arrow key issue fixed --- airootfs/etc/skel/.zshrc | 7 +++++++ airootfs/root/.zshrc | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index 8714021..879dfda 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -18,6 +18,8 @@ source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh #source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + + #Display ISO version and distribution information in short alias version="sed -n 1p /etc/os-release && sed -n 7p /etc/os-release && sed -n 8p /etc/os-release" @@ -33,3 +35,8 @@ alias clr-cache="sudo pacman -Scc" alias unlock="sudo rm /var/lib/pacman/db.lck" alias remove="sudo pacman -R" alias autoremove="sudo pacman -Rns" + +# keyboard ctrl+arrow key issue solved +bindkey '^[[1;5C' forward-word # Ctrl+Right arrow +bindkey '^[[1;5D' backward-word # Ctrl+Left arrow + diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index 1a1668b..879dfda 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -35,3 +35,8 @@ alias clr-cache="sudo pacman -Scc" alias unlock="sudo rm /var/lib/pacman/db.lck" alias remove="sudo pacman -R" alias autoremove="sudo pacman -Rns" + +# keyboard ctrl+arrow key issue solved +bindkey '^[[1;5C' forward-word # Ctrl+Right arrow +bindkey '^[[1;5D' backward-word # Ctrl+Left arrow + From 4c12154f20159c4b5d82e4314ab4c09863033062 Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Sun, 30 Apr 2023 19:24:22 +0530 Subject: [PATCH 11/19] Update packages.x86_64 zed added --- packages.x86_64 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages.x86_64 b/packages.x86_64 index d47f28c..30fb900 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -198,3 +198,6 @@ zsh-theme-powerlevel10k zsh-completions zsh-autosuggestions zsh-fast-syntax-highlighting + +# Text Editor +zed From 8b8c06d37a294c0c1a67144eec10990a3f57d607 Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Sun, 30 Apr 2023 23:49:51 +0530 Subject: [PATCH 12/19] Adding xed a fast and light weighted text editor --- packages.x86_64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages.x86_64 b/packages.x86_64 index 30fb900..e4a6513 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -200,4 +200,4 @@ zsh-autosuggestions zsh-fast-syntax-highlighting # Text Editor -zed +xed From 0eb8a4dfdf120f1b74824f85dd68f7f47bbf9839 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Tue, 2 May 2023 00:44:44 +0530 Subject: [PATCH 13/19] added some new pacakages for zsh and edited zshrc based on garuda --- airootfs/etc/skel/.zshrc | 250 ++++++++++++++++++++++++++++++++++++++- airootfs/root/.zshrc | 250 ++++++++++++++++++++++++++++++++++++++- packages.x86_64 | 8 +- 3 files changed, 497 insertions(+), 11 deletions(-) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index 879dfda..f709af7 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -1,6 +1,9 @@ -# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. -# Initialization code that may require console input (password prompts, [y/n] -# confirmations, etc.) must go above this block; everything else may go below. +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +alias ls='ls --color=auto' +PS1='[\u@\h \W]\$ ' + if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" @@ -37,6 +40,243 @@ alias remove="sudo pacman -R" alias autoremove="sudo pacman -Rns" # keyboard ctrl+arrow key issue solved -bindkey '^[[1;5C' forward-word # Ctrl+Right arrow -bindkey '^[[1;5D' backward-word # Ctrl+Left arrow +#bindkey '^[[1;5C' forward-word # Ctrl+Right arrow +#bindkey '^[[1;5D' backward-word # Ctrl+Left arrow + +## Path section +# Set $PATH if ~/.local/bin exist +if [ -d "$HOME/.local/bin" ]; then + export PATH=$HOME/.local/bin:$PATH +fi + +#eval "$(starship init zsh)" +#function set_win_title(){ +# echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" +#} +precmd_functions+=(set_win_title) + + + + + +# Use history substring search +#source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh + +# Use fzf +source /usr/share/fzf/key-bindings.zsh +source /usr/share/fzf/completion.zsh + +# Arch Linux command-not-found support, you must have package pkgfile installed +# https://wiki.archlinux.org/index.php/Pkgfile#.22Command_not_found.22_hook +[[ -e /usr/share/doc/pkgfile/command-not-found.zsh ]] && source /usr/share/doc/pkgfile/command-not-found.zsh + +# Advanced command-not-found hook +[[ -e /usr/share/doc/find-the-command/ftc.zsh ]] && source /usr/share/doc/find-the-command/ftc.zsh + + +## Options section +setopt correct # Auto correct mistakes +setopt extendedglob # Extended globbing. Allows using regular expressions with * +setopt nocaseglob # Case insensitive globbing +setopt rcexpandparam # Array expension with parameters +setopt nocheckjobs # Don't warn about running processes when exiting +setopt numericglobsort # Sort filenames numerically when it makes sense +setopt nobeep # No beep +setopt appendhistory # Immediately append history instead of overwriting +setopt histignorealldups # If a new command is a duplicate, remove the older one +setopt autocd # if only directory path is entered, cd there. +setopt auto_pushd +setopt pushd_ignore_dups +setopt pushdminus + +# Completion. +autoload -Uz compinit +compinit +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive tab completion +zstyle ':completion:*' rehash true # automatically find new executables in path +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors for dirs/files/etc) +zstyle ':completion:*' completer _expand _complete _ignored _approximate +zstyle ':completion:*' menu select +zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' +zstyle ':completion:*:descriptions' format '%U%F{cyan}%d%f%u' + +# Speed up completions +zstyle ':completion:*' accept-exact '*(N)' +zstyle ':completion:*' use-cache on +zstyle ':completion:*' cache-path ~/.cache/zcache + +# automatically load bash completion functions +autoload -U +X bashcompinit && bashcompinit + +#HISTFILE=~/.zhistory +#HISTSIZE=50000 +#SAVEHIST=10000 + + +## Keys +# Use emacs key bindings +bindkey -e + +# [PageUp] - Up a line of history +if [[ -n "${terminfo[kpp]}" ]]; then + bindkey -M emacs "${terminfo[kpp]}" up-line-or-history + bindkey -M viins "${terminfo[kpp]}" up-line-or-history + bindkey -M vicmd "${terminfo[kpp]}" up-line-or-history +fi +# [PageDown] - Down a line of history +if [[ -n "${terminfo[knp]}" ]]; then + bindkey -M emacs "${terminfo[knp]}" down-line-or-history + bindkey -M viins "${terminfo[knp]}" down-line-or-history + bindkey -M vicmd "${terminfo[knp]}" down-line-or-history +fi + +# Start typing + [Up-Arrow] - fuzzy find history forward +if [[ -n "${terminfo[kcuu1]}" ]]; then + autoload -U up-line-or-beginning-search + zle -N up-line-or-beginning-search + + bindkey -M emacs "${terminfo[kcuu1]}" up-line-or-beginning-search + bindkey -M viins "${terminfo[kcuu1]}" up-line-or-beginning-search + bindkey -M vicmd "${terminfo[kcuu1]}" up-line-or-beginning-search +fi +# Start typing + [Down-Arrow] - fuzzy find history backward +if [[ -n "${terminfo[kcud1]}" ]]; then + autoload -U down-line-or-beginning-search + zle -N down-line-or-beginning-search + + bindkey -M emacs "${terminfo[kcud1]}" down-line-or-beginning-search + bindkey -M viins "${terminfo[kcud1]}" down-line-or-beginning-search + bindkey -M vicmd "${terminfo[kcud1]}" down-line-or-beginning-search +fi + +# [Home] - Go to beginning of line +if [[ -n "${terminfo[khome]}" ]]; then + bindkey -M emacs "${terminfo[khome]}" beginning-of-line + bindkey -M viins "${terminfo[khome]}" beginning-of-line + bindkey -M vicmd "${terminfo[khome]}" beginning-of-line +fi +# [End] - Go to end of line +if [[ -n "${terminfo[kend]}" ]]; then + bindkey -M emacs "${terminfo[kend]}" end-of-line + bindkey -M viins "${terminfo[kend]}" end-of-line + bindkey -M vicmd "${terminfo[kend]}" end-of-line +fi + +# [Shift-Tab] - move through the completion menu backwards +if [[ -n "${terminfo[kcbt]}" ]]; then + bindkey -M emacs "${terminfo[kcbt]}" reverse-menu-complete + bindkey -M viins "${terminfo[kcbt]}" reverse-menu-complete + bindkey -M vicmd "${terminfo[kcbt]}" reverse-menu-complete +fi + +# [Backspace] - delete backward +bindkey -M emacs '^?' backward-delete-char +bindkey -M viins '^?' backward-delete-char +bindkey -M vicmd '^?' backward-delete-char +# [Delete] - delete forward +if [[ -n "${terminfo[kdch1]}" ]]; then + bindkey -M emacs "${terminfo[kdch1]}" delete-char + bindkey -M viins "${terminfo[kdch1]}" delete-char + bindkey -M vicmd "${terminfo[kdch1]}" delete-char +else + bindkey -M emacs "^[[3~" delete-char + bindkey -M viins "^[[3~" delete-char + bindkey -M vicmd "^[[3~" delete-char + + bindkey -M emacs "^[3;5~" delete-char + bindkey -M viins "^[3;5~" delete-char + bindkey -M vicmd "^[3;5~" delete-char +fi + +typeset -g -A key +if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then + autoload -Uz add-zle-hook-widget + function zle_application_mode_start { echoti smkx } + function zle_application_mode_stop { echoti rmkx } + add-zle-hook-widget -Uz zle-line-init zle_application_mode_start + add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop +fi + +# Control Left - go back a word +key[Control-Left]="${terminfo[kLFT5]}" +if [[ -n "${key[Control-Left]}" ]]; then + bindkey -M emacs "${key[Control-Left]}" backward-word + bindkey -M viins "${key[Control-Left]}" backward-word + bindkey -M vicmd "${key[Control-Left]}" backward-word +fi + +# Control Left - go forward a word +key[Control-Right]="${terminfo[kRIT5]}" +if [[ -n "${key[Control-Right]}" ]]; then + bindkey -M emacs "${key[Control-Right]}" forward-word + bindkey -M viins "${key[Control-Right]}" forward-word + bindkey -M vicmd "${key[Control-Right]}" forward-word +fi + +# Alt Left - go back a word +key[Alt-Left]="${terminfo[kLFT3]}" +if [[ -n "${key[Alt-Left]}" ]]; then + bindkey -M emacs "${key[Alt-Left]}" backward-word + bindkey -M viins "${key[Alt-Left]}" backward-word + bindkey -M vicmd "${key[Alt-Left]}" backward-word +fi + +# Control Right - go forward a word +key[Alt-Right]="${terminfo[kRIT3]}" +if [[ -n "${key[Alt-Right]}" ]]; then + bindkey -M emacs "${key[Alt-Right]}" forward-word + bindkey -M viins "${key[Alt-Right]}" forward-word + bindkey -M vicmd "${key[Alt-Right]}" forward-word +fi + +## Useful aliases +alias grubup="sudo update-grub" +alias fixpacman="sudo rm /var/lib/pacman/db.lck" +alias tarnow='tar -acf ' +alias untar='tar -zxvf ' +alias wget='wget -c ' +alias rmpkg="sudo pacman -Rdd" +alias psmem='ps auxf | sort -nr -k 4' +alias psmem10='ps auxf | sort -nr -k 4 | head -10' +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias .....='cd ../../../..' +alias ......='cd ../../../../..' +alias dir='dir --color=auto' +alias vdir='vdir --color=auto' +alias grep='grep --color=auto' +alias fgrep='grep -F --color=auto' +alias egrep='grep -E --color=auto' +alias hw='hwinfo --short' # Hardware Info +alias big="expac -H M '%m\t%n' | sort -h | nl" # Sort installed packages according to size in MB (expac must be installed) +alias gitpkg='pacman -Q | grep -i "\-git" | wc -l' # List amount of -git packages + +# Get fastest mirrors +alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist" +alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist" +alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist" +alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist" + +# Help people new to Arch +alias apt-get='man pacman' +alias apt='man pacman' +alias helpme='cht.sh --shell' +alias pacdiff='sudo -H DIFFPROG=meld pacdiff' +alias please='sudo' +alias tb='nc termbin.com 9999' +alias upd="/usr/bin/update" + +# Replace yay with paru if installed +[ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' + +# Load Mcfly +#export MCFLY_FUZZY=true +#export MCFLY_RESULTS=20 +#export MCFLY_INTERFACE_VIEW=BOTTOM +#export MCFLY_RESULTS_SORT=LAST_RUN +#eval "$(mcfly init zsh)" + +## Run neofetch +#neofetch diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index 879dfda..f709af7 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -1,6 +1,9 @@ -# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. -# Initialization code that may require console input (password prompts, [y/n] -# confirmations, etc.) must go above this block; everything else may go below. +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +alias ls='ls --color=auto' +PS1='[\u@\h \W]\$ ' + if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" @@ -37,6 +40,243 @@ alias remove="sudo pacman -R" alias autoremove="sudo pacman -Rns" # keyboard ctrl+arrow key issue solved -bindkey '^[[1;5C' forward-word # Ctrl+Right arrow -bindkey '^[[1;5D' backward-word # Ctrl+Left arrow +#bindkey '^[[1;5C' forward-word # Ctrl+Right arrow +#bindkey '^[[1;5D' backward-word # Ctrl+Left arrow + +## Path section +# Set $PATH if ~/.local/bin exist +if [ -d "$HOME/.local/bin" ]; then + export PATH=$HOME/.local/bin:$PATH +fi + +#eval "$(starship init zsh)" +#function set_win_title(){ +# echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" +#} +precmd_functions+=(set_win_title) + + + + + +# Use history substring search +#source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh + +# Use fzf +source /usr/share/fzf/key-bindings.zsh +source /usr/share/fzf/completion.zsh + +# Arch Linux command-not-found support, you must have package pkgfile installed +# https://wiki.archlinux.org/index.php/Pkgfile#.22Command_not_found.22_hook +[[ -e /usr/share/doc/pkgfile/command-not-found.zsh ]] && source /usr/share/doc/pkgfile/command-not-found.zsh + +# Advanced command-not-found hook +[[ -e /usr/share/doc/find-the-command/ftc.zsh ]] && source /usr/share/doc/find-the-command/ftc.zsh + + +## Options section +setopt correct # Auto correct mistakes +setopt extendedglob # Extended globbing. Allows using regular expressions with * +setopt nocaseglob # Case insensitive globbing +setopt rcexpandparam # Array expension with parameters +setopt nocheckjobs # Don't warn about running processes when exiting +setopt numericglobsort # Sort filenames numerically when it makes sense +setopt nobeep # No beep +setopt appendhistory # Immediately append history instead of overwriting +setopt histignorealldups # If a new command is a duplicate, remove the older one +setopt autocd # if only directory path is entered, cd there. +setopt auto_pushd +setopt pushd_ignore_dups +setopt pushdminus + +# Completion. +autoload -Uz compinit +compinit +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive tab completion +zstyle ':completion:*' rehash true # automatically find new executables in path +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors for dirs/files/etc) +zstyle ':completion:*' completer _expand _complete _ignored _approximate +zstyle ':completion:*' menu select +zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' +zstyle ':completion:*:descriptions' format '%U%F{cyan}%d%f%u' + +# Speed up completions +zstyle ':completion:*' accept-exact '*(N)' +zstyle ':completion:*' use-cache on +zstyle ':completion:*' cache-path ~/.cache/zcache + +# automatically load bash completion functions +autoload -U +X bashcompinit && bashcompinit + +#HISTFILE=~/.zhistory +#HISTSIZE=50000 +#SAVEHIST=10000 + + +## Keys +# Use emacs key bindings +bindkey -e + +# [PageUp] - Up a line of history +if [[ -n "${terminfo[kpp]}" ]]; then + bindkey -M emacs "${terminfo[kpp]}" up-line-or-history + bindkey -M viins "${terminfo[kpp]}" up-line-or-history + bindkey -M vicmd "${terminfo[kpp]}" up-line-or-history +fi +# [PageDown] - Down a line of history +if [[ -n "${terminfo[knp]}" ]]; then + bindkey -M emacs "${terminfo[knp]}" down-line-or-history + bindkey -M viins "${terminfo[knp]}" down-line-or-history + bindkey -M vicmd "${terminfo[knp]}" down-line-or-history +fi + +# Start typing + [Up-Arrow] - fuzzy find history forward +if [[ -n "${terminfo[kcuu1]}" ]]; then + autoload -U up-line-or-beginning-search + zle -N up-line-or-beginning-search + + bindkey -M emacs "${terminfo[kcuu1]}" up-line-or-beginning-search + bindkey -M viins "${terminfo[kcuu1]}" up-line-or-beginning-search + bindkey -M vicmd "${terminfo[kcuu1]}" up-line-or-beginning-search +fi +# Start typing + [Down-Arrow] - fuzzy find history backward +if [[ -n "${terminfo[kcud1]}" ]]; then + autoload -U down-line-or-beginning-search + zle -N down-line-or-beginning-search + + bindkey -M emacs "${terminfo[kcud1]}" down-line-or-beginning-search + bindkey -M viins "${terminfo[kcud1]}" down-line-or-beginning-search + bindkey -M vicmd "${terminfo[kcud1]}" down-line-or-beginning-search +fi + +# [Home] - Go to beginning of line +if [[ -n "${terminfo[khome]}" ]]; then + bindkey -M emacs "${terminfo[khome]}" beginning-of-line + bindkey -M viins "${terminfo[khome]}" beginning-of-line + bindkey -M vicmd "${terminfo[khome]}" beginning-of-line +fi +# [End] - Go to end of line +if [[ -n "${terminfo[kend]}" ]]; then + bindkey -M emacs "${terminfo[kend]}" end-of-line + bindkey -M viins "${terminfo[kend]}" end-of-line + bindkey -M vicmd "${terminfo[kend]}" end-of-line +fi + +# [Shift-Tab] - move through the completion menu backwards +if [[ -n "${terminfo[kcbt]}" ]]; then + bindkey -M emacs "${terminfo[kcbt]}" reverse-menu-complete + bindkey -M viins "${terminfo[kcbt]}" reverse-menu-complete + bindkey -M vicmd "${terminfo[kcbt]}" reverse-menu-complete +fi + +# [Backspace] - delete backward +bindkey -M emacs '^?' backward-delete-char +bindkey -M viins '^?' backward-delete-char +bindkey -M vicmd '^?' backward-delete-char +# [Delete] - delete forward +if [[ -n "${terminfo[kdch1]}" ]]; then + bindkey -M emacs "${terminfo[kdch1]}" delete-char + bindkey -M viins "${terminfo[kdch1]}" delete-char + bindkey -M vicmd "${terminfo[kdch1]}" delete-char +else + bindkey -M emacs "^[[3~" delete-char + bindkey -M viins "^[[3~" delete-char + bindkey -M vicmd "^[[3~" delete-char + + bindkey -M emacs "^[3;5~" delete-char + bindkey -M viins "^[3;5~" delete-char + bindkey -M vicmd "^[3;5~" delete-char +fi + +typeset -g -A key +if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then + autoload -Uz add-zle-hook-widget + function zle_application_mode_start { echoti smkx } + function zle_application_mode_stop { echoti rmkx } + add-zle-hook-widget -Uz zle-line-init zle_application_mode_start + add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop +fi + +# Control Left - go back a word +key[Control-Left]="${terminfo[kLFT5]}" +if [[ -n "${key[Control-Left]}" ]]; then + bindkey -M emacs "${key[Control-Left]}" backward-word + bindkey -M viins "${key[Control-Left]}" backward-word + bindkey -M vicmd "${key[Control-Left]}" backward-word +fi + +# Control Left - go forward a word +key[Control-Right]="${terminfo[kRIT5]}" +if [[ -n "${key[Control-Right]}" ]]; then + bindkey -M emacs "${key[Control-Right]}" forward-word + bindkey -M viins "${key[Control-Right]}" forward-word + bindkey -M vicmd "${key[Control-Right]}" forward-word +fi + +# Alt Left - go back a word +key[Alt-Left]="${terminfo[kLFT3]}" +if [[ -n "${key[Alt-Left]}" ]]; then + bindkey -M emacs "${key[Alt-Left]}" backward-word + bindkey -M viins "${key[Alt-Left]}" backward-word + bindkey -M vicmd "${key[Alt-Left]}" backward-word +fi + +# Control Right - go forward a word +key[Alt-Right]="${terminfo[kRIT3]}" +if [[ -n "${key[Alt-Right]}" ]]; then + bindkey -M emacs "${key[Alt-Right]}" forward-word + bindkey -M viins "${key[Alt-Right]}" forward-word + bindkey -M vicmd "${key[Alt-Right]}" forward-word +fi + +## Useful aliases +alias grubup="sudo update-grub" +alias fixpacman="sudo rm /var/lib/pacman/db.lck" +alias tarnow='tar -acf ' +alias untar='tar -zxvf ' +alias wget='wget -c ' +alias rmpkg="sudo pacman -Rdd" +alias psmem='ps auxf | sort -nr -k 4' +alias psmem10='ps auxf | sort -nr -k 4 | head -10' +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias .....='cd ../../../..' +alias ......='cd ../../../../..' +alias dir='dir --color=auto' +alias vdir='vdir --color=auto' +alias grep='grep --color=auto' +alias fgrep='grep -F --color=auto' +alias egrep='grep -E --color=auto' +alias hw='hwinfo --short' # Hardware Info +alias big="expac -H M '%m\t%n' | sort -h | nl" # Sort installed packages according to size in MB (expac must be installed) +alias gitpkg='pacman -Q | grep -i "\-git" | wc -l' # List amount of -git packages + +# Get fastest mirrors +alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist" +alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist" +alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist" +alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist" + +# Help people new to Arch +alias apt-get='man pacman' +alias apt='man pacman' +alias helpme='cht.sh --shell' +alias pacdiff='sudo -H DIFFPROG=meld pacdiff' +alias please='sudo' +alias tb='nc termbin.com 9999' +alias upd="/usr/bin/update" + +# Replace yay with paru if installed +[ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' + +# Load Mcfly +#export MCFLY_FUZZY=true +#export MCFLY_RESULTS=20 +#export MCFLY_INTERFACE_VIEW=BOTTOM +#export MCFLY_RESULTS_SORT=LAST_RUN +#eval "$(mcfly init zsh)" + +## Run neofetch +#neofetch diff --git a/packages.x86_64 b/packages.x86_64 index e4a6513..7e0c62c 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -36,7 +36,6 @@ gnu-netcat gpart #gpm gptfdisk -#grml-zsh-config grub hdparm hyperv @@ -198,6 +197,13 @@ zsh-theme-powerlevel10k zsh-completions zsh-autosuggestions zsh-fast-syntax-highlighting +nerd-fonts-noto-sans-regular-complete +awesome-terminal-fonts +fzf +powerline-fonts +find-the-command-git +mcfly +#grml-zsh-config # Text Editor xed From b2474f94b1126bad73abdf6245cd7cba8823517c Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Thu, 4 May 2023 01:05:20 +0530 Subject: [PATCH 14/19] adding starship package --- packages.x86_64 | 1 + 1 file changed, 1 insertion(+) diff --git a/packages.x86_64 b/packages.x86_64 index 7e0c62c..d287127 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -203,6 +203,7 @@ fzf powerline-fonts find-the-command-git mcfly +starship #grml-zsh-config # Text Editor From c6a5bbd53f2a675e76b561bacd1c2eb5dc6fd019 Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Thu, 4 May 2023 01:07:25 +0530 Subject: [PATCH 15/19] solving previous error os starship in zshrc --- airootfs/root/.zshrc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index f709af7..0fd513a 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -49,10 +49,10 @@ if [ -d "$HOME/.local/bin" ]; then export PATH=$HOME/.local/bin:$PATH fi -#eval "$(starship init zsh)" -#function set_win_title(){ -# echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" -#} +eval "$(starship init zsh)" +function set_win_title(){ + echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" +} precmd_functions+=(set_win_title) @@ -108,9 +108,9 @@ zstyle ':completion:*' cache-path ~/.cache/zcache # automatically load bash completion functions autoload -U +X bashcompinit && bashcompinit -#HISTFILE=~/.zhistory -#HISTSIZE=50000 -#SAVEHIST=10000 +HISTFILE=~/.zhistory +HISTSIZE=50000 +SAVEHIST=10000 ## Keys @@ -270,12 +270,12 @@ alias upd="/usr/bin/update" # Replace yay with paru if installed [ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' -# Load Mcfly -#export MCFLY_FUZZY=true -#export MCFLY_RESULTS=20 -#export MCFLY_INTERFACE_VIEW=BOTTOM -#export MCFLY_RESULTS_SORT=LAST_RUN -#eval "$(mcfly init zsh)" +Load Mcfly +export MCFLY_FUZZY=true +export MCFLY_RESULTS=20 +export MCFLY_INTERFACE_VIEW=BOTTOM +export MCFLY_RESULTS_SORT=LAST_RUN +eval "$(mcfly init zsh)" ## Run neofetch #neofetch From 897e37ec27bc78f863397108d938cf6ae8174225 Mon Sep 17 00:00:00 2001 From: Akash Dubey <101584901+Akash6222@users.noreply.github.com> Date: Thu, 4 May 2023 01:07:50 +0530 Subject: [PATCH 16/19] Update .zshrc --- airootfs/etc/skel/.zshrc | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index f709af7..e52d7aa 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -49,10 +49,10 @@ if [ -d "$HOME/.local/bin" ]; then export PATH=$HOME/.local/bin:$PATH fi -#eval "$(starship init zsh)" -#function set_win_title(){ -# echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" -#} +eval "$(starship init zsh)" +function set_win_title(){ + echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" +} precmd_functions+=(set_win_title) @@ -108,9 +108,9 @@ zstyle ':completion:*' cache-path ~/.cache/zcache # automatically load bash completion functions autoload -U +X bashcompinit && bashcompinit -#HISTFILE=~/.zhistory -#HISTSIZE=50000 -#SAVEHIST=10000 +HISTFILE=~/.zhistory +HISTSIZE=50000 +SAVEHIST=10000 ## Keys @@ -270,13 +270,12 @@ alias upd="/usr/bin/update" # Replace yay with paru if installed [ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' -# Load Mcfly -#export MCFLY_FUZZY=true -#export MCFLY_RESULTS=20 -#export MCFLY_INTERFACE_VIEW=BOTTOM -#export MCFLY_RESULTS_SORT=LAST_RUN -#eval "$(mcfly init zsh)" +Load Mcfly +export MCFLY_FUZZY=true +export MCFLY_RESULTS=20 +export MCFLY_INTERFACE_VIEW=BOTTOM +export MCFLY_RESULTS_SORT=LAST_RUN +eval "$(mcfly init zsh)" ## Run neofetch #neofetch - From 6bda1a7d255a2f6bcf82e911f9b366db2aa41363 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Thu, 4 May 2023 03:29:35 +0530 Subject: [PATCH 17/19] .zshrc edited --- airootfs/etc/skel/.zshrc | 19 +++++++++++++++---- airootfs/root/.zshrc | 18 ++++++++++++++---- packages.x86_64 | 1 + 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index e52d7aa..838dbaf 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -43,6 +43,11 @@ alias autoremove="sudo pacman -Rns" #bindkey '^[[1;5C' forward-word # Ctrl+Right arrow #bindkey '^[[1;5D' backward-word # Ctrl+Left arrow + + + + + ## Path section # Set $PATH if ~/.local/bin exist if [ -d "$HOME/.local/bin" ]; then @@ -56,11 +61,16 @@ function set_win_title(){ precmd_functions+=(set_win_title) +## Plugins section: Enable fish style features +# Use syntax highlighting +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh - +# Use autosuggestion +source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # Use history substring search -#source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh +source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh # Use fzf source /usr/share/fzf/key-bindings.zsh @@ -270,7 +280,7 @@ alias upd="/usr/bin/update" # Replace yay with paru if installed [ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' -Load Mcfly +# Load Mcfly export MCFLY_FUZZY=true export MCFLY_RESULTS=20 export MCFLY_INTERFACE_VIEW=BOTTOM @@ -278,4 +288,5 @@ export MCFLY_RESULTS_SORT=LAST_RUN eval "$(mcfly init zsh)" ## Run neofetch -#neofetch +neofetch + diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index 0fd513a..838dbaf 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -43,6 +43,11 @@ alias autoremove="sudo pacman -Rns" #bindkey '^[[1;5C' forward-word # Ctrl+Right arrow #bindkey '^[[1;5D' backward-word # Ctrl+Left arrow + + + + + ## Path section # Set $PATH if ~/.local/bin exist if [ -d "$HOME/.local/bin" ]; then @@ -56,11 +61,16 @@ function set_win_title(){ precmd_functions+=(set_win_title) +## Plugins section: Enable fish style features +# Use syntax highlighting +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh +#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh - +# Use autosuggestion +source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # Use history substring search -#source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh +source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh # Use fzf source /usr/share/fzf/key-bindings.zsh @@ -270,7 +280,7 @@ alias upd="/usr/bin/update" # Replace yay with paru if installed [ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' -Load Mcfly +# Load Mcfly export MCFLY_FUZZY=true export MCFLY_RESULTS=20 export MCFLY_INTERFACE_VIEW=BOTTOM @@ -278,5 +288,5 @@ export MCFLY_RESULTS_SORT=LAST_RUN eval "$(mcfly init zsh)" ## Run neofetch -#neofetch +neofetch diff --git a/packages.x86_64 b/packages.x86_64 index d287127..39e1d1e 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -204,6 +204,7 @@ powerline-fonts find-the-command-git mcfly starship +zsh-history-substring-search #grml-zsh-config # Text Editor From 15e5005a666008db56b2a44b30a34496e6a7e477 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Fri, 5 May 2023 18:57:59 +0530 Subject: [PATCH 18/19] issue fixed for zsh and powerlevel10k --- airootfs/etc/skel/.zhistory | 0 airootfs/etc/skel/.zshrc | 2 +- airootfs/root/.zhistory | 0 airootfs/root/.zshrc | 2 +- packages.x86_64 | 7 ++----- 5 files changed, 4 insertions(+), 7 deletions(-) create mode 100644 airootfs/etc/skel/.zhistory create mode 100644 airootfs/root/.zhistory diff --git a/airootfs/etc/skel/.zhistory b/airootfs/etc/skel/.zhistory new file mode 100644 index 0000000..e69de29 diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index 838dbaf..72b9e80 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -288,5 +288,5 @@ export MCFLY_RESULTS_SORT=LAST_RUN eval "$(mcfly init zsh)" ## Run neofetch -neofetch +#neofetch diff --git a/airootfs/root/.zhistory b/airootfs/root/.zhistory new file mode 100644 index 0000000..e69de29 diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index 838dbaf..72b9e80 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -288,5 +288,5 @@ export MCFLY_RESULTS_SORT=LAST_RUN eval "$(mcfly init zsh)" ## Run neofetch -neofetch +#neofetch diff --git a/packages.x86_64 b/packages.x86_64 index 39e1d1e..1f4ce0c 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -192,7 +192,7 @@ blueman #system-config-printer # Powerlevel10k -ttf-meslo-nerd-font-powerlevel10k +#ttf-meslo-nerd-font-powerlevel10k zsh-theme-powerlevel10k zsh-completions zsh-autosuggestions @@ -201,11 +201,8 @@ nerd-fonts-noto-sans-regular-complete awesome-terminal-fonts fzf powerline-fonts -find-the-command-git +#find-the-command-git mcfly starship zsh-history-substring-search #grml-zsh-config - -# Text Editor -xed From 3f572e2a192843a2cd3faefdd07cf90d51c50e28 Mon Sep 17 00:00:00 2001 From: Akash6222 Date: Fri, 5 May 2023 22:21:03 +0530 Subject: [PATCH 19/19] added alias to fix gnupg and keyring isuue --- airootfs/etc/skel/.zshrc | 3 +++ airootfs/root/.zshrc | 3 +++ 2 files changed, 6 insertions(+) diff --git a/airootfs/etc/skel/.zshrc b/airootfs/etc/skel/.zshrc index 72b9e80..1a29504 100644 --- a/airootfs/etc/skel/.zshrc +++ b/airootfs/etc/skel/.zshrc @@ -39,6 +39,9 @@ alias unlock="sudo rm /var/lib/pacman/db.lck" alias remove="sudo pacman -R" alias autoremove="sudo pacman -Rns" +# Fix keyring and gnupg mount isuue +alias fix-keys = "sudo rm -rvf /etc/pacman.d/gnupg && sudo pacman-key --init && sudo pacman-key --populate" + # keyboard ctrl+arrow key issue solved #bindkey '^[[1;5C' forward-word # Ctrl+Right arrow #bindkey '^[[1;5D' backward-word # Ctrl+Left arrow diff --git a/airootfs/root/.zshrc b/airootfs/root/.zshrc index 72b9e80..1a29504 100644 --- a/airootfs/root/.zshrc +++ b/airootfs/root/.zshrc @@ -39,6 +39,9 @@ alias unlock="sudo rm /var/lib/pacman/db.lck" alias remove="sudo pacman -R" alias autoremove="sudo pacman -Rns" +# Fix keyring and gnupg mount isuue +alias fix-keys = "sudo rm -rvf /etc/pacman.d/gnupg && sudo pacman-key --init && sudo pacman-key --populate" + # keyboard ctrl+arrow key issue solved #bindkey '^[[1;5C' forward-word # Ctrl+Right arrow #bindkey '^[[1;5D' backward-word # Ctrl+Left arrow