From 106881fa6d243245524892c81c7dbc5de5106f8d Mon Sep 17 00:00:00 2001 From: Christian Nieves Date: Tue, 26 Jul 2022 17:02:03 -0500 Subject: [PATCH] more stuff --- zsh/.bash_profile | 15 ---------- zsh/.zshrc | 44 +++++++--------------------- zsh/fig_prompt | 73 +++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 75 insertions(+), 57 deletions(-) diff --git a/zsh/.bash_profile b/zsh/.bash_profile index f25712d..c3dc270 100644 --- a/zsh/.bash_profile +++ b/zsh/.bash_profile @@ -1,23 +1,12 @@ export PATH=$PATH:$HOME/bin export PATH=$PATH:$HOME/scripts -export MOCWORD_DATA=$HOME/mocword/mocword.sqlite -export BASH_PROFILE_SOURCED=true export PATH=$PATH:. export GOPATH=$HOME/go export GO111MODULE=auto export CLOUDSDK_PYTHON=python2 -export PATH=$PATH:$HOME/dev/scripts - export PATH="/opt/local/bin:/opt/local/sbin:$PATH" -export PATH="/usr/local/opt/bison/bin:$PATH" -export PATH="/usr/local/Cellar/openvpn/2.4.6/sbin:$PATH" -export PATH="$PATH:$GOPATH/bin" -export GOBIN=$GOPATH/bin -export PATH=$HOME/.npm-global/bin:$PATH -export PATH=$HOME/.local/bin:$PATH - export EDITOR='nvim' HISTCONTROL=ignoreboth @@ -27,10 +16,6 @@ export DEVKITPRO=/opt/devkitpro export DEVKITARM=${DEVKITPRO}/devkitARM export DEVKITPPC=${DEVKITPRO}/devkitPPC -export PATH=${DEVKITPRO}/tools/bin:$PATH - -export PATH="$HOME/.cargo/bin:$PATH" - export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion diff --git a/zsh/.zshrc b/zsh/.zshrc index 1d71a60..435a5da 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,14 +1,15 @@ -set -xv +# set -xv + +# source ~/fig_prompt +export ZSH="$HOME/.oh-my-zsh" +source $ZSH/oh-my-zsh.sh if [ -f ${HOME}/.zplug/init.zsh ]; then source ${HOME}/.zplug/init.zsh fi -zplug "zsh-users/zsh-syntax-highlighting", defer:2 -zplug "mafredri/zsh-async", from:"github", use:"async.zsh" - -unset PS1 -source ~/.bash_profile +# zplug "zsh-users/zsh-syntax-highlighting", defer:2 +# zplug "mafredri/zsh-async", from:"github", use:"async.zsh" # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. # Initialization code that may require console input (password prompts, [y/n] @@ -18,7 +19,7 @@ if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]] fi # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh -plugins=(zsh-autosuggestions) +plugins=(zsh-async zsh-autosuggestions) ZSH_THEME=powerlevel10k/powerlevel10k DISABLE_AUTO_TITLE=true @@ -192,10 +193,6 @@ POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1 typeset POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='▓▒░' typeset POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='░▒▓' -export ZSH="$HOME/.oh-my-zsh" - -source $ZSH/oh-my-zsh.sh - # color customization POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND='216' @@ -235,31 +232,10 @@ zstyle :bracketed-paste-magic paste-init pasteinit zstyle :bracketed-paste-magic paste-finish pastefinish ### Fix slowness of pastes -source ~/.aliases.sh - -export NVM_DIR="$HOME/.nvm" -[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm -[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion -export PATH="/usr/local/opt/curl/bin:$PATH" - # "transport endpoint is not connected" errors autoload -Uz add-zsh-hook export FZF_DEFAULT_OPTS="--preview 'echo {}' --preview-window down:3:wrap --bind ?:toggle-preview" -[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh -fixup_ssh_auth_sock() { - if [[ -n ${SSH_AUTH_SOCK} && ! -e ${SSH_AUTH_SOCK} ]] - then - local new_sock=$(echo /tmp/ssh-*/agent.*(=UNom[1])) - if [[ -n ${new_sock} ]] - then - export SSH_AUTH_SOCK=${new_sock} - fi - fi -} -if [[ -n ${SSH_AUTH_SOCK} ]] -then - autoload -U add-zsh-hook - add-zsh-hook preexec fixup_ssh_auth_sock -fi +source ~/.bash_profile + diff --git a/zsh/fig_prompt b/zsh/fig_prompt index 93ff152..ef94fd1 100644 --- a/zsh/fig_prompt +++ b/zsh/fig_prompt @@ -10,10 +10,19 @@ FIG_STATE_HASH_FILE="state.hash" # in here that do not change the Fig state. BLACKBOX_IGNORE=">.*(xl|ll|figstatus|status|diff|root|exportedcl|preloading|debugfetchconfig)" +# Choose an md5 tool that's available. +if command -v md5sum >> /dev/null; then + MD5TOOL=md5sum +elif command -v md5 >> /dev/null; then + MD5TOOL=md5 +else + MD5TOOL=cat +fi + # Returns the root directory of the current Fig client. Should only be called # from within a Fig client. function get_fig_client_root() { - local root_dir="${PWD%/google3*}" + local root_dir="${$(pwd -P)%/google3*}" echo "$root_dir" } @@ -21,7 +30,7 @@ function get_fig_client_root() { # a Fig client. function get_fig_client_name() { local root_dir="$( get_fig_client_root )" - local client_name="${root_dir##/google/*/}" + local client_name="${root_dir##/*google/*/}" echo "$client_name" } @@ -43,10 +52,10 @@ function get_fig_client_state_hash() { file="$( get_fig_client_root )/${file}" if [ -f "$file" ]; then if [[ "$file" =~ ".*blackbox.log" ]]; then - state_hash="${state_hash}\n$( egrep -v "${BLACKBOX_IGNORE}" "$file" | \ - md5sum )" + state_hash="${state_hash}\n$( egrep -a -v "${BLACKBOX_IGNORE}" "$file" \ + | ${MD5TOOL} )" else - state_hash="${state_hash}\n$( md5sum "$file" )" + state_hash="${state_hash}\n$( ${MD5TOOL} "$file" )" fi fi done @@ -99,8 +108,8 @@ function fig_status() { # Returns whether the current directory is (likely) a Fig-on-CITC client. function is_fig_client() { - if [[ "$PWD" =~ /google/src/cloud/$USER/* ]] && \ - [[ -d ${PWD%%/google3*}/.hg ]]; then + if [[ "$(pwd -P)" =~ /google/src/cloud/$USER/* ]] && \ + [[ -d ${$(pwd -P)%%/google3*}/.hg ]]; then return 0 fi return 1 @@ -123,6 +132,7 @@ function is_fig_client() { # FIG_PROMPT_DESCRIPTION: Replaced with $description # FIG_PROMPT_CHANGENAME: Replaced with $changename # FIG_PROMPT_HAS_SHELVE: Replaced with $has_shelve +# FIG_PROMPT_SHORT: Replaced with $short function get_fig_prompt_template() { echo -n '%b:%B%F{white}[' echo -n '%F{yellow}FIG_PROMPT_MODIFIED%F{green}FIG_PROMPT_ADDED' @@ -145,7 +155,25 @@ function get_fig_prompt() { unknown=$figstatus[4] unexported=$figstatus[5] obsolete=$figstatus[6] - cl=$figstatus[7] + # Turn the cl number into a hyperlink. + # This can be disabled by setting the environment variable + # "FIG_PROMPT_NO_HYPERLINKS=1" + # + # This works in most terminals. Complete list can be found + # here: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda + # According to the above link, there is no way to reliably determine whether + # a terminal emulator supports hyperlinks. Use color support as a way to + # attempt to determine hyperlink support. If a terminal emulator supports + # > 8 colors, it likely supports hyperlinks. + COLORS=$(tput colors 2> /dev/null) + if [ $? != 0 ] || [ $COLORS -le 8 ] || [ "${FIG_PROMPT_NO_HYPERLINKS:-unset}" != "unset" ]; then + # Colors are not supported; although this does not mean that hyperlinks + # are not supported, we will disable by default. + cl=$figstatus[7] + else + # Colors are supported; enable hyperlinks + cl="\e]8;;http://cl/${figstatus[7]}\e\\\\${figstatus[7]}\e]8;;\e\\\\ " + fi description=$figstatus[8] branch=$figstatus[9] if [ -z "$branch" ]; then @@ -161,6 +189,7 @@ function get_fig_prompt() { if [ -d "$shelve_dir" ] && /bin/ls -1qA "$shelve_dir" | grep -q .; then has_shelve="!" fi + short=$figstatus[14] local tpl="$(get_fig_prompt_template)" tpl="${tpl//FIG_PROMPT_MODIFIED/$modified}" @@ -173,6 +202,7 @@ function get_fig_prompt() { tpl="${tpl//FIG_PROMPT_DESCRIPTION/$description}" tpl="${tpl//FIG_PROMPT_CHANGENAME/$changename}" tpl="${tpl//FIG_PROMPT_HAS_SHELVE/$has_shelve}" + tpl="${tpl//FIG_PROMPT_SHORT/$short}" echo "$tpl" } @@ -223,3 +253,30 @@ function fig_prop() { figstatus=("${(@f)$( fig_status )}") echo "${figstatus[$FIG_STATUS_INDICES[$1]]}" } + +# Collects the properties of the current Fig repository into the FIG_PROPS +# global associative array. +# +# Example usage: +# function my_hg_prompt { +# collect_fig_props +# echo "${FIG_PROPS["modified"]} ${FIG_PROPS["cl"]} ${FIG_PROPS["description"]}" +# } +# PROMPT='%n@%m[$(my_hg_prompt)] %#' +# +# See fig_prop for a list of valid properties +function collect_fig_props() { + if ! is_fig_client; then + return 0 + fi + + typeset -Ag FIG_PROPS + + figstatus=("${(@f)$( fig_status )}") + + # Map to global associative array FIG_PROPS + for index in "${(@k)FIG_STATUS_INDICES}" ; do + FIG_PROPS[${index}]="${figstatus[${FIG_STATUS_INDICES[${index}]}]}" + done + +}