diff options
Diffstat (limited to '.config/fish/functions')
94 files changed, 2990 insertions, 385 deletions
diff --git a/.config/fish/functions/__abbr_tips_bind_newline.fish b/.config/fish/functions/__abbr_tips_bind_newline.fish new file mode 100644 index 00000000..8cc8992c --- /dev/null +++ b/.config/fish/functions/__abbr_tips_bind_newline.fish @@ -0,0 +1,10 @@ +function __abbr_tips_bind_newline + if test $__abbr_tips_used != 1 + if abbr -q -- (string trim -- (commandline)) + set -g __abbr_tips_used 1 + else + set -g __abbr_tips_used 0 + end + end + commandline -f 'execute' +end diff --git a/.config/fish/functions/__abbr_tips_bind_space.fish b/.config/fish/functions/__abbr_tips_bind_space.fish new file mode 100644 index 00000000..0f371030 --- /dev/null +++ b/.config/fish/functions/__abbr_tips_bind_space.fish @@ -0,0 +1,11 @@ +function __abbr_tips_bind_space + commandline -i " " + if test $__abbr_tips_used != 1 + if abbr -q -- (string trim -- (commandline)) + set -g __abbr_tips_used 1 + else + set -g __abbr_tips_used 0 + end + end + commandline -f 'expand-abbr' +end diff --git a/.config/fish/functions/__abbr_tips_init.fish b/.config/fish/functions/__abbr_tips_init.fish new file mode 100644 index 00000000..9cda53ad --- /dev/null +++ b/.config/fish/functions/__abbr_tips_init.fish @@ -0,0 +1,24 @@ +function __abbr_tips_init -d "Initialize abbreviations variables for fish-abbr-tips" + set -e __ABBR_TIPS_KEYS + set -e __ABBR_TIPS_VALUES + set -Ux __ABBR_TIPS_KEYS + set -Ux __ABBR_TIPS_VALUES + + set -l i 1 + set -l abb (string replace -r '.*-- ' '' -- (abbr -s)) + while test $i -le (count $abb) + set -l current_abb (string split -m1 -- ' ' "$abb[$i]") + set -a __ABBR_TIPS_KEYS "$current_abb[1]" + set -a __ABBR_TIPS_VALUES (string trim -c '\'' -- "$current_abb[2]") + set i (math $i + 1) + end + + set -l i 1 + set -l abb (string replace -r '.*-- ' '' -- (alias -s)) + while test $i -le (count $abb) + set -l current_abb (string split -m2 -- ' ' "$abb[$i]") + set -a __ABBR_TIPS_KEYS "a__$current_abb[2]" + set -a __ABBR_TIPS_VALUES (string trim -c '\'' -- "$current_abb[3]") + set i (math $i + 1) + end +end diff --git a/.config/fish/functions/__mm_dependencies.fish b/.config/fish/functions/__mm_dependencies.fish new file mode 100644 index 00000000..41fd0560 --- /dev/null +++ b/.config/fish/functions/__mm_dependencies.fish @@ -0,0 +1,78 @@ +function __mm_confirm --description 'Confirm' --argument prompt + if test -z "$prompt" + set prompt "Continue?" + end + + while true + read -p 'echo -ne "$prompt ["; set_color green; echo -ne "y"; set_color normal; echo -ne "/"; set_color red; echo -ne "N"; set_color normal; echo -ne "]: "; ' -l confirm + + switch $confirm + case Y y + return 0 + case '' N n + return 1 + end + end +end + +function __mm_echo --argument color --argument text --argument no_newline + set_color $color; + if test -n "$no_newline" + echo -ne $text + else + echo $text + end + set_color normal; +end + +function __mm_check_dependencies + if type -q "fzf" + return 0 + else + return 1 + end +end + + +function __mm_install_dependencies + if __mm_check_dependencies + echo "" + __mm_echo green "Dependencies already installed" + echo "" + return 0 + else + echo "" + echo "MakeMeFish is dependent of fzf - the command line fuzzy finder." + if __mm_confirm "fzf is not installed. Would you like to install fzf?" + switch (uname) + case Linux Darwin + if type -q "brew" + if __mm_confirm "You are using brew - would you like to install fzf through brew?" + echo (brew install fzf) + return 0 + end + end + case FreeBSD NetBSD DragonFly + echo (pkg install fzf) + return 0 + case '*' + echo "Unknown OS" + end + __mm_echo red "Could not install automatically." + end + echo -ne "Go to "; __mm_echo blue "https://github.com/junegunn/fzf#installation" 1; echo -ne " and follow the instructions for your environment." + return 1 + end +end + +function __mm_dependencies + if __mm_check_dependencies + return 0 + else + if __mm_install_dependencies true + return 0 + else + return 1 + end + end +end
\ No newline at end of file diff --git a/.config/fish/functions/_fzf_configure_bindings_help.fish b/.config/fish/functions/_fzf_configure_bindings_help.fish new file mode 100644 index 00000000..1209e498 --- /dev/null +++ b/.config/fish/functions/_fzf_configure_bindings_help.fish @@ -0,0 +1,43 @@ +function _fzf_configure_bindings_help --description "Prints the help message for fzf_configure_bindings." + echo "\ +USAGE: + fzf_configure_bindings [--FEATURE[=KEY_SEQUENCE]...] + +DESCRIPTION + By default, fzf_configure_bindings installs mnemonic key bindings for fzf.fish's features. Each + feature's binding can be customized through a corresponding namesake option: + FEATURE | MNEMONIC KEY SEQUENCE | CORRESPONDING OPTION + Search directory | Ctrl+Alt+F (F for file) | --directory + Search git log | Ctrl+Alt+L (L for log) | --git_log + Search git status | Ctrl+Alt+S (S for status) | --git_status + Search history | Ctrl+R (R for reverse) | --history + Search variables | Ctrl+V (V for variable) | --variables + Search processes | Ctrl+Alt+P (P for process) | --processes + An option with a key sequence value overrides the binding for its feature, while an option + without a value disables the binding. A feature that is not customized retains its default + menomonic binding specified above. Key bindings are installed for default and insert modes. + + In terms of validation, fzf_configure_bindings fails if passed unknown options. Furthermore, it + expects an equals sign between an option's name and value. However, it does not validate key + sequences. Rather, consider using fish_key_reader to manually validate them. + + In terms of experimentation, fzf_configure_bindings erases any bindings it previously installed + before installing new ones so it can be repeatedly executed in the same fish session without + problem. Once the desired fzf_configure_bindings command has been found, add it to config.fish + in order to persist the bindings. + + The -h and --help options print this help message. + +EXAMPLES + Install the default mnemonic bindings + \$ fzf_configure_bindings + Install the default bindings but override git log's binding to Ctrl+G + \$ fzf_configure_bindings --git_log=\cg + Install the default bindings but leave search history unbound + \$ fzf_configure_bindings --history + Alternative style of disabling search history + \$ fzf_configure_bindings --history= + An agglomeration of all the options + \$ fzf_configure_bindings --git_status=\cg --history=\ch --variables --directory --git_log +" +end diff --git a/.config/fish/functions/_fzf_extract_var_info.fish b/.config/fish/functions/_fzf_extract_var_info.fish new file mode 100644 index 00000000..dd4e9523 --- /dev/null +++ b/.config/fish/functions/_fzf_extract_var_info.fish @@ -0,0 +1,15 @@ +# helper function for _fzf_search_variables +function _fzf_extract_var_info --argument-names variable_name set_show_output --description "Extract and reformat lines pertaining to \$variable_name from \$set_show_output." + # Extract only the lines about the variable, all of which begin with either + # $variable_name: ...or... $variable_name[ + string match --regex "^\\\$$variable_name(?::|\[).*" <$set_show_output | + + # Strip the variable name prefix, including ": " for scope info lines + string replace --regex "^\\\$$variable_name(?:: )?" '' | + + # Distill the lines of values, replacing... + # [1]: |value| + # ...with... + # [1] value + string replace --regex ": \|(.*)\|" ' $1' +end diff --git a/.config/fish/functions/_fzf_preview_changed_file.fish b/.config/fish/functions/_fzf_preview_changed_file.fish new file mode 100644 index 00000000..c6e8c3d9 --- /dev/null +++ b/.config/fish/functions/_fzf_preview_changed_file.fish @@ -0,0 +1,30 @@ +# helper for _fzf_search_git_status +# arg should be a line from git status --short, e.g. +# MM functions/_fzf_preview_changed_file.fish +# D README.md +# R LICENSE.md -> LICENSE +function _fzf_preview_changed_file --description "Show the untracked, staged, and/or unstaged changes in the given file." + set -l path (string split ' ' $argv)[-1] + # first letter of short format shows index, second letter shows working tree + # https://git-scm.com/docs/git-status/2.35.0#_output + set -l index_status (string sub --length 1 $argv) + set -l working_tree_status (string sub --start 2 --length 1 $argv) + + if test $index_status = '?' + _fzf_report_diff_type Untracked + _fzf_preview_file $path + else + # no-prefix because the file is always being compared to itself so is unecessary + set diff_opts --color=always --no-prefix + + if test $index_status != ' ' + _fzf_report_diff_type Staged + git diff --staged $diff_opts -- $path + end + + if test $working_tree_status != ' ' + _fzf_report_diff_type Unstaged + git diff $diff_opts -- $path + end + end +end diff --git a/.config/fish/functions/_fzf_preview_file.fish b/.config/fish/functions/_fzf_preview_file.fish new file mode 100644 index 00000000..eaa68d05 --- /dev/null +++ b/.config/fish/functions/_fzf_preview_file.fish @@ -0,0 +1,43 @@ +# helper function for _fzf_search_directory and _fzf_search_git_status +function _fzf_preview_file --description "Print a preview for the given file based on its file type." + # because there's no way to guarantee that _fzf_search_directory passes the path to _fzf_preview_file + # as one argument, we collect all the arguments into one single variable and treat that as the path + set file_path $argv + + if test -L "$file_path" # symlink + # notify user and recurse on the target of the symlink, which can be any of these file types + set -l target_path (realpath "$file_path") + + set_color yellow + echo "'$file_path' is a symlink to '$target_path'." + set_color normal + + _fzf_preview_file "$target_path" + else if test -f "$file_path" # regular file + if set --query fzf_preview_file_cmd + # need to escape quotes to make sure eval receives file_path as a single arg + eval "$fzf_preview_file_cmd '$file_path'" + else + bat --style=numbers --color=always "$file_path" + end + else if test -d "$file_path" # directory + if set --query fzf_preview_dir_cmd + # see above + eval "$fzf_preview_dir_cmd '$file_path'" + else + # -A list hidden files as well, except for . and .. + # -F helps classify files by appending symbols after the file name + command ls -A -F "$file_path" + end + else if test -c "$file_path" + _fzf_report_file_type "$file_path" "character device file" + else if test -b "$file_path" + _fzf_report_file_type "$file_path" "block device file" + else if test -S "$file_path" + _fzf_report_file_type "$file_path" socket + else if test -p "$file_path" + _fzf_report_file_type "$file_path" "named pipe" + else + echo "$file_path doesn't exist." >&2 + end +end diff --git a/.config/fish/functions/_fzf_report_diff_type.fish b/.config/fish/functions/_fzf_report_diff_type.fish new file mode 100644 index 00000000..1edef783 --- /dev/null +++ b/.config/fish/functions/_fzf_report_diff_type.fish @@ -0,0 +1,16 @@ +# helper for _fzf_preview_changed_file +# prints out something like +# +--------+ +# | Staged | +# +--------+ +function _fzf_report_diff_type --argument-names diff_type --description "Print a distinct colored header meant to preface a git patch." + # number of "-" to draw is the length of the string to box + 2 for padding + set repeat_count (math 2 + (string length $diff_type)) + set horizontal_border +(string repeat --count $repeat_count -)+ + + set_color yellow + echo $horizontal_border + echo "| $diff_type |" + echo $horizontal_border + set_color normal +end diff --git a/.config/fish/functions/_fzf_report_file_type.fish b/.config/fish/functions/_fzf_report_file_type.fish new file mode 100644 index 00000000..49e02e1c --- /dev/null +++ b/.config/fish/functions/_fzf_report_file_type.fish @@ -0,0 +1,6 @@ +# helper function for _fzf_preview_file +function _fzf_report_file_type --argument-names file_path file_type --description "Explain the file type for a file." + set_color red + echo "Cannot preview '$file_path': it is a $file_type." + set_color normal +end diff --git a/.config/fish/functions/_fzf_search_directory.fish b/.config/fish/functions/_fzf_search_directory.fish new file mode 100644 index 00000000..fee63085 --- /dev/null +++ b/.config/fish/functions/_fzf_search_directory.fish @@ -0,0 +1,44 @@ +function _fzf_search_directory --description "Search the current directory. Replace the current token with the selected file paths." + # --string-cwd-prefix prevents fd >= 8.3.0 from prepending ./ to relative paths + set fd_opts --color=always --strip-cwd-prefix $fzf_fd_opts + + set fzf_arguments --multi --ansi $fzf_dir_opts + set token (commandline --current-token) + # expand any variables or leading tilde (~) in the token + set expanded_token (eval echo -- $token) + # unescape token because it's already quoted so backslashes will mess up the path + set unescaped_exp_token (string unescape -- $expanded_token) + + # If the current token is a directory and has a trailing slash, + # then use it as fd's base directory. + if string match --quiet -- "*/" $unescaped_exp_token && test -d "$unescaped_exp_token" + set --append fd_opts --base-directory=$unescaped_exp_token + # use the directory name as fzf's prompt to indicate the search is limited to that directory + set --prepend fzf_arguments --prompt="$unescaped_exp_token" --preview="_fzf_preview_file $expanded_token{}" + set file_paths_selected $unescaped_exp_token(fd $fd_opts 2>/dev/null | _fzf_wrapper $fzf_arguments) + else + set --prepend fzf_arguments --query="$unescaped_exp_token" --preview='_fzf_preview_file {}' + set file_paths_selected (fd $fd_opts 2>/dev/null | _fzf_wrapper $fzf_arguments) + end + + + if test $status -eq 0 + # Fish will cd implicitly if a directory name ending in a slash is provided. + # To help the user leverage this feature, we automatically append / to the selected path if + # - only one path was selected, + # - the user was in the middle of inputting the first token, + # - the path is a directory + # Then, the user only needs to hit Enter once more to cd into that directory. + if test (count $file_paths_selected) = 1 + set commandline_tokens (commandline --tokenize) + if test "$commandline_tokens" = "$token" -a -d "$file_paths_selected" \ + -a (fd --version | string replace --regex --all '[^\d]' '') -lt 840 + set file_paths_selected $file_paths_selected/ + end + end + + commandline --current-token --replace -- (string escape -- $file_paths_selected | string join ' ') + end + + commandline --function repaint +end diff --git a/.config/fish/functions/_fzf_search_git_log.fish b/.config/fish/functions/_fzf_search_git_log.fish new file mode 100644 index 00000000..3375c1d9 --- /dev/null +++ b/.config/fish/functions/_fzf_search_git_log.fish @@ -0,0 +1,28 @@ +function _fzf_search_git_log --description "Search the output of git log and preview commits. Replace the current token with the selected commit hash." + if not git rev-parse --git-dir >/dev/null 2>&1 + echo '_fzf_search_git_log: Not in a git repository.' >&2 + else + # see documentation for git format placeholders at https://git-scm.com/docs/git-log#Documentation/git-log.txt-emnem + # %h gives you the abbreviated commit hash, which is useful for saving screen space, but we will have to expand it later below + set log_fmt_str '%C(bold blue)%h%C(reset) - %C(cyan)%ad%C(reset) %C(yellow)%d%C(reset) %C(normal)%s%C(reset) %C(dim normal)[%an]%C(reset)' + set selected_log_lines ( + git log --color=always --format=format:$log_fmt_str --date=short | \ + _fzf_wrapper --ansi \ + --multi \ + --tiebreak=index \ + --preview='git show --color=always --stat --patch {1}' \ + --query=(commandline --current-token) \ + $fzf_git_log_opts + ) + if test $status -eq 0 + for line in $selected_log_lines + set abbreviated_commit_hash (string split --field 1 " " $line) + set full_commit_hash (git rev-parse $abbreviated_commit_hash) + set --append commit_hashes $full_commit_hash + end + commandline --current-token --replace (string join ' ' $commit_hashes) + end + end + + commandline --function repaint +end diff --git a/.config/fish/functions/_fzf_search_git_status.fish b/.config/fish/functions/_fzf_search_git_status.fish new file mode 100644 index 00000000..f8ae3759 --- /dev/null +++ b/.config/fish/functions/_fzf_search_git_status.fish @@ -0,0 +1,34 @@ +function _fzf_search_git_status --description "Search the output of git status. Replace the current token with the selected file paths." + if not git rev-parse --git-dir >/dev/null 2>&1 + echo '_fzf_search_git_status: Not in a git repository.' >&2 + else + set selected_paths ( + # Pass configuration color.status=always to force status to use colors even though output is sent to a pipe + git -c color.status=always status --short | + _fzf_wrapper --ansi \ + --multi \ + --query=(commandline --current-token) \ + --preview='_fzf_preview_changed_file {}' \ + $fzf_git_status_opts + ) + if test $status -eq 0 + # git status --short automatically escapes the paths of most files for us so not going to bother trying to handle + # the few edges cases of weird file names that should be extremely rare (e.g. "this;needs;escaping") + set cleaned_paths + + for path in $selected_paths + if test (string sub --length 1 $path) = R + # path has been renamed and looks like "R LICENSE -> LICENSE.md" + # extract the path to use from after the arrow + set --append cleaned_paths (string split -- "-> " $path)[-1] + else + set --append cleaned_paths (string sub --start=4 $path) + end + end + + commandline --current-token --replace -- (string join ' ' $cleaned_paths) + end + end + + commandline --function repaint +end diff --git a/.config/fish/functions/_fzf_search_history.fish b/.config/fish/functions/_fzf_search_history.fish new file mode 100644 index 00000000..d795c5c7 --- /dev/null +++ b/.config/fish/functions/_fzf_search_history.fish @@ -0,0 +1,30 @@ +function _fzf_search_history --description "Search command history. Replace the command line with the selected command." + # history merge incorporates history changes from other fish sessions + # it errors out if called in private mode + if test -z "$fish_private_mode" + builtin history merge + end + + # Delinate commands throughout pipeline using null rather than newlines because commands can be multi-line + set commands_selected ( + # Reference https://devhints.io/strftime to understand strftime format symbols + builtin history --null --show-time="%m-%d %H:%M:%S │ " | + _fzf_wrapper --read0 \ + --print0 \ + --multi \ + --tiebreak=index \ + --query=(commandline) \ + --preview="echo -- {4..} | fish_indent --ansi" \ + --preview-window="bottom:3:wrap" \ + $fzf_history_opts | + string split0 | + # remove timestamps from commands selected + string replace --regex '^\d\d-\d\d \d\d:\d\d:\d\d │ ' '' + ) + + if test $status -eq 0 + commandline --replace -- $commands_selected + end + + commandline --function repaint +end diff --git a/.config/fish/functions/_fzf_search_processes.fish b/.config/fish/functions/_fzf_search_processes.fish new file mode 100644 index 00000000..e3ef59fd --- /dev/null +++ b/.config/fish/functions/_fzf_search_processes.fish @@ -0,0 +1,28 @@ +function _fzf_search_processes --description "Search all running processes. Replace the current token with the pid of the selected process." + # use all caps to be consistent with ps default format + # snake_case because ps doesn't seem to allow spaces in the field names + set ps_preview_fmt (string join ',' 'pid' 'ppid=PARENT' 'user' '%cpu' 'rss=RSS_IN_KB' 'start=START_TIME' 'command') + set processes_selected ( + ps -A -opid,command | \ + _fzf_wrapper --multi \ + --query (commandline --current-token) \ + --ansi \ + # first line outputted by ps is a header, so we need to mark it as so + --header-lines=1 \ + # ps uses exit code 1 if the process was not found, in which case show an message explaining so + --preview="ps -o '$ps_preview_fmt' -p {1} || echo 'Cannot preview {1} because it exited.'" \ + --preview-window="bottom:4:wrap" \ + $fzf_processes_opts + ) + + if test $status -eq 0 + for process in $processes_selected + set --append pids_selected (string split --no-empty --field=1 -- " " $process) + end + + # string join to replace the newlines outputted by string split with spaces + commandline --current-token --replace -- (string join ' ' $pids_selected) + end + + commandline --function repaint +end diff --git a/.config/fish/functions/_fzf_search_variables.fish b/.config/fish/functions/_fzf_search_variables.fish new file mode 100644 index 00000000..744f2262 --- /dev/null +++ b/.config/fish/functions/_fzf_search_variables.fish @@ -0,0 +1,46 @@ +# This function expects the following two arguments: +# argument 1 = output of (set --show | psub), i.e. a file with the scope info and values of all variables +# argument 2 = output of (set --names | psub), i.e. a file with all variable names +function _fzf_search_variables --argument-names set_show_output set_names_output --description "Search and preview shell variables. Replace the current token with the selected variable." + if test -z "$set_names_output" + printf '%s\n' '_fzf_search_variables requires 2 arguments.' >&2 + + commandline --function repaint + return 22 # 22 means invalid argument in POSIX + end + + # Exclude the history variable from being piped into fzf because + # 1. it's not included in $set_names_output + # 2. it tends to be a very large value => increases computation time + # 3._fzf_search_history is a much better way to examine history anyway + set all_variable_names (string match --invert history <$set_names_output) + + set current_token (commandline --current-token) + # Use the current token to pre-populate fzf's query. If the current token begins + # with a $, remove it from the query so that it will better match the variable names + set cleaned_curr_token (string replace -- '$' '' $current_token) + + set variable_names_selected ( + printf '%s\n' $all_variable_names | + _fzf_wrapper --preview "_fzf_extract_var_info {} $set_show_output" \ + --preview-window="wrap" \ + --multi \ + --query=$cleaned_curr_token \ + $fzf_shell_vars_opts + ) + + if test $status -eq 0 + # If the current token begins with a $, do not overwrite the $ when + # replacing the current token with the selected variable. + # Uses brace expansion to prepend $ to each variable name. + commandline --current-token --replace ( + if string match --quiet -- '$*' $current_token + string join " " \${$variable_names_selected} + else + string join " " $variable_names_selected + end + ) + end + + commandline --function repaint +end diff --git a/.config/fish/functions/_fzf_wrapper.fish b/.config/fish/functions/_fzf_wrapper.fish new file mode 100644 index 00000000..a9287016 --- /dev/null +++ b/.config/fish/functions/_fzf_wrapper.fish @@ -0,0 +1,20 @@ +function _fzf_wrapper --description "Prepares some environment variables before executing fzf." + # Make sure fzf uses fish to execute preview commands, some of which + # are autoloaded fish functions so don't exist in other shells. + # Use --local so that it doesn't clobber SHELL outside of this function. + set --local --export SHELL (command --search fish) + + # If FZF_DEFAULT_OPTS is not set, then set some sane defaults. + # See https://github.com/junegunn/fzf#environment-variables + if not set --query FZF_DEFAULT_OPTS + # cycle allows jumping between the first and last results, making scrolling faster + # layout=reverse lists results top to bottom, mimicking the familiar layouts of git log, history, and env + # border shows where the fzf window begins and ends + # height=90% leaves space to see the current command and some scrollback, maintaining context of work + # preview-window=wrap wraps long lines in the preview window, making reading easier + # marker=* makes the multi-select marker more distinguishable from the pointer (since both default to >) + set --export FZF_DEFAULT_OPTS '--cycle --layout=reverse --border --height=90% --preview-window=wrap --marker="*"' + end + + fzf $argv +end diff --git a/.config/fish/functions/_tide_1_line_prompt.fish b/.config/fish/functions/_tide_1_line_prompt.fish new file mode 100644 index 00000000..57722237 --- /dev/null +++ b/.config/fish/functions/_tide_1_line_prompt.fish @@ -0,0 +1,19 @@ +function _tide_1_line_prompt + set -g add_prefix + _tide_side=left for item in $_tide_left_items + _tide_item_$item + end + set_color $prev_bg_color -b normal + echo $tide_left_prompt_suffix + + set -g add_prefix + _tide_side=right for item in $_tide_right_items + _tide_item_$item + end + set_color $prev_bg_color -b normal + echo $tide_right_prompt_suffix +end + +function _tide_item_pwd + _tide_print_item pwd @PWD@ +end diff --git a/.config/fish/functions/_tide_2_line_prompt.fish b/.config/fish/functions/_tide_2_line_prompt.fish new file mode 100644 index 00000000..e9017af4 --- /dev/null +++ b/.config/fish/functions/_tide_2_line_prompt.fish @@ -0,0 +1,31 @@ +function _tide_2_line_prompt + set -g add_prefix + _tide_side=left for item in $_tide_left_items + _tide_item_$item + end + if not set -e add_prefix + set_color $prev_bg_color -b normal + echo $tide_left_prompt_suffix + end + + echo + + set -g add_prefix + _tide_side=right for item in $_tide_right_items + _tide_item_$item + end + if not set -e add_prefix + set_color $prev_bg_color -b normal + echo $tide_right_prompt_suffix + end +end + +function _tide_item_pwd + _tide_print_item pwd @PWD@ +end + +function _tide_item_newline + set_color $prev_bg_color -b normal + v=tide_"$_tide_side"_prompt_suffix echo $$v + set -g add_prefix +end diff --git a/.config/fish/functions/_tide_cache_variables.fish b/.config/fish/functions/_tide_cache_variables.fish new file mode 100644 index 00000000..31e38507 --- /dev/null +++ b/.config/fish/functions/_tide_cache_variables.fish @@ -0,0 +1,17 @@ +function _tide_cache_variables + # Same-color-separator color + set_color $tide_prompt_color_separator_same_color | read -gx _tide_color_separator_same_color + + # git + contains git $_tide_left_items $_tide_right_items && set_color $tide_git_color_branch | read -gx _tide_location_color + + # private_mode + if contains private_mode $_tide_left_items $_tide_right_items && test -n "$fish_private_mode" + set -gx _tide_private_mode + else + set -e _tide_private_mode + end + + # item padding + test "$tide_prompt_pad_items" = true && set -gx _tide_pad ' ' || set -e _tide_pad +end diff --git a/.config/fish/functions/_tide_detect_os.fish b/.config/fish/functions/_tide_detect_os.fish new file mode 100644 index 00000000..5d960535 --- /dev/null +++ b/.config/fish/functions/_tide_detect_os.fish @@ -0,0 +1,75 @@ +# Outputs icon, color, bg_color +function _tide_detect_os + set -lx defaultColor 080808 CED7CF + switch (uname | string lower) + case darwin + printf %s\n D6D6D6 333333 # from apple.com header + case freebsd openbsd dragonfly + printf %s\n FFFFFF AB2B28 # https://freebsdfoundation.org/about-us/about-the-foundation/project/ + case 'cygwin*' + printf %s\n FFFFFF 00CCFF # https://answers.microsoft.com/en-us/windows/forum/all/what-is-the-official-windows-8-blue-rgb-or-hex/fd57144b-f69b-42d8-8c21-6ca911646e44 + case linux + if test (uname -o) = Android + echo ﲎ # This character is evil and messes up code display, so it's put on its own line + # https://developer.android.com/distribute/marketing-tools/brand-guidelines + printf %s\n 3DDC84 3C3F41 # fg is from above link, bg is from Android Studio default dark theme + else + _tide_detect_os_linux_cases /etc/os-release ID || + _tide_detect_os_linux_cases /etc/os-release ID_LIKE || + _tide_detect_os_linux_cases /etc/lsb-release DISTRIB_ID || + printf %s\n $defaultColor + end + case '*' + echo -ns '?' + end +end + +function _tide_detect_os_linux_cases -a file key + test -e $file || return + set -l split_file (string split '=' <$file) + set -l key_index (contains --index $key $split_file) || return + set -l value (string trim --chars='"' $split_file[(math $key_index + 1)]) + + # Anything which would have pure white background has been changed to D4D4D4 + # It was just too bright otherwise + switch (string lower $value) + case alpine + printf %s\n FFFFFF 0D597F # from alpine logo + case arch + printf %s\n 1793D1 4D4D4D # from arch wiki header + case centos + printf %s\n 000000 D4D4D4 # https://wiki.centos.org/ArtWork/Brand/Logo, monochromatic + case debian + printf %s\n C70036 D4D4D4 # from debian logo https://www.debian.org/logos/openlogo-nd-100.png + case devuan + printf %s\n $defaultColor # logo is monochromatic + case elementary + printf %s\n 000000 D4D4D4 # https://elementary.io/brand, encouraged to be monochromatic + case fedora + printf %s\n FFFFFF 294172 # from logo https://fedoraproject.org/w/uploads/2/2d/Logo_fedoralogo.png + case gentoo + printf %s\n FFFFFF 54487A # https://wiki.gentoo.org/wiki/Project:Artwork/Colors + case mageia + printf %s\n FFFFFF 262F45 # https://wiki.mageia.org/en/Artwork_guidelines + case manjaro + printf %s\n FFFFFF 35BF5C # from https://gitlab.manjaro.org/artwork/branding/logo/-/blob/master/logo.svg + case mint + printf %s\n FFFFFF 69B53F # extracted from https://linuxmint.com/web/img/favicon.ico + case nixos + printf %s\n FFFFFF 5277C3 # https://github.com/NixOS/nixos-artwork/tree/master/logo + case opensuse-leap opensuse-tumbleweed + printf %s\n 73BA25 173f4f # https://en.opensuse.org/openSUSE:Artwork_brand + case raspbian + printf %s\n FFFFFF A22846 # https://static.raspberrypi.org/files/Raspberry_Pi_Visual_Guidelines_2020.pdf + case rhel + printf %s\n EE0000 000000 # https://www.redhat.com/en/about/brand/standards/color + case sabayon + printf %s\n $defaultColor # Can't find colors, and they are rebranding anyway + case slackware + printf %s\n $defaultColor # Doesn't really have a logo, and the colors are too close to PWD blue anyway + case ubuntu + printf %s\n E95420 D4D4D4 # https://design.ubuntu.com/brand/ + case '*' + return 1 + end +end diff --git a/.config/fish/functions/_tide_find_and_remove.fish b/.config/fish/functions/_tide_find_and_remove.fish new file mode 100644 index 00000000..29f21808 --- /dev/null +++ b/.config/fish/functions/_tide_find_and_remove.fish @@ -0,0 +1,3 @@ +function _tide_find_and_remove -a name list --no-scope-shadowing + contains --index $name $$list | read -l index && set -e "$list"[$index] +end diff --git a/.config/fish/functions/_tide_item_aws.fish b/.config/fish/functions/_tide_item_aws.fish new file mode 100644 index 00000000..7cb6338e --- /dev/null +++ b/.config/fish/functions/_tide_item_aws.fish @@ -0,0 +1,11 @@ +function _tide_item_aws + # AWS_PROFILE overrides AWS_DEFAULT_PROFILE, AWS_REGION overrides AWS_DEFAULT_REGION + set -q AWS_PROFILE && set -l AWS_DEFAULT_PROFILE $AWS_PROFILE + set -q AWS_REGION && set -l AWS_DEFAULT_REGION $AWS_REGION + + if test -n "$AWS_DEFAULT_PROFILE" && test -n "$AWS_DEFAULT_REGION" + _tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE/$AWS_DEFAULT_REGION" + else if test -n "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION" + _tide_print_item aws $tide_aws_icon' ' "$AWS_DEFAULT_PROFILE$AWS_DEFAULT_REGION" + end +end diff --git a/.config/fish/functions/_tide_item_character.fish b/.config/fish/functions/_tide_item_character.fish new file mode 100644 index 00000000..10bb3244 --- /dev/null +++ b/.config/fish/functions/_tide_item_character.fish @@ -0,0 +1,17 @@ +function _tide_item_character + test $_tide_status = 0 && set_color $tide_character_color || set_color $tide_character_color_failure + + set -q add_prefix || echo -ns ' ' + + test "$fish_key_bindings" = fish_default_key_bindings && echo -ns $tide_character_icon || + switch $fish_bind_mode + case insert + echo -ns $tide_character_icon + case default + echo -ns $tide_character_vi_icon_default + case replace replace_one + echo -ns $tide_character_vi_icon_replace + case visual + echo -ns $tide_character_vi_icon_visual + end +end diff --git a/.config/fish/functions/_tide_item_chruby.fish b/.config/fish/functions/_tide_item_chruby.fish new file mode 100644 index 00000000..02d5fbd9 --- /dev/null +++ b/.config/fish/functions/_tide_item_chruby.fish @@ -0,0 +1,3 @@ +function _tide_item_chruby + test -n "$RUBY_VERSION" && _tide_print_item chruby $tide_chruby_icon' ' $RUBY_VERSION +end diff --git a/.config/fish/functions/_tide_item_cmd_duration.fish b/.config/fish/functions/_tide_item_cmd_duration.fish new file mode 100644 index 00000000..f7b9db61 --- /dev/null +++ b/.config/fish/functions/_tide_item_cmd_duration.fish @@ -0,0 +1,11 @@ +function _tide_item_cmd_duration + test $CMD_DURATION -gt $tide_cmd_duration_threshold && time=(math --scale=0 "$CMD_DURATION/3600000" # Hours + math --scale=0 "$CMD_DURATION/60000"%60 # Minutes + math --scale=$tide_cmd_duration_decimals "$CMD_DURATION/1000"%60) if test $time[1] != 0 + _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$time[1]h $time[2]m $time[3]s" + else if test $time[2] != 0 + _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$time[2]m $time[3]s" + else + _tide_print_item cmd_duration $tide_cmd_duration_icon' ' "$time[3]s" + end +end diff --git a/.config/fish/functions/_tide_item_context.fish b/.config/fish/functions/_tide_item_context.fish new file mode 100644 index 00000000..9dfa56d7 --- /dev/null +++ b/.config/fish/functions/_tide_item_context.fish @@ -0,0 +1,9 @@ +function _tide_item_context + if set -q SSH_TTY + tide_context_color=$tide_context_color_ssh _tide_print_item context $USER@$hostname + else if test "$EUID" = 0 + tide_context_color=$tide_context_color_root _tide_print_item context $USER@$hostname + else if test "$tide_context_always_display" = true + tide_context_color=$tide_context_color_default _tide_print_item context $USER@$hostname + end +end diff --git a/.config/fish/functions/_tide_item_docker.fish b/.config/fish/functions/_tide_item_docker.fish new file mode 100644 index 00000000..4eec0bff --- /dev/null +++ b/.config/fish/functions/_tide_item_docker.fish @@ -0,0 +1,5 @@ +function _tide_item_docker + docker context inspect --format '{{.Name}}' | read -l context + contains -- "$context" $tide_docker_default_contexts || + _tide_print_item docker $tide_docker_icon' ' $context +end diff --git a/.config/fish/functions/_tide_item_git.fish b/.config/fish/functions/_tide_item_git.fish new file mode 100644 index 00000000..9fca6d0e --- /dev/null +++ b/.config/fish/functions/_tide_item_git.fish @@ -0,0 +1,67 @@ +function _tide_item_git + if git branch --show-current 2>/dev/null | string replace -r "(.{$tide_git_truncation_length}).+" '$1…' | read -l location + git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir + set location $_tide_location_color$location + else if test $pipestatus[1] != 0 + return + else if git tag --points-at HEAD | string replace -r "(.{$tide_git_truncation_length}).+" '$1…' | read location + git rev-parse --git-dir --is-inside-git-dir | read -fL gdir in_gdir + set location '#'$_tide_location_color$location + else + git rev-parse --git-dir --is-inside-git-dir --short HEAD | read -fL gdir in_gdir location + set location @$_tide_location_color$location + end + + # Operation + if test -d $gdir/rebase-merge + read -f step <$gdir/rebase-merge/msgnum + read -f total_steps <$gdir/rebase-merge/end + test -f $gdir/rebase-merge/interactive && set -f operation rebase-i || set -f operation rebase-m + else if test -d $gdir/rebase-apply + read -f step <$gdir/rebase-apply/next + read -f total_steps <$gdir/rebase-apply/last + if test -f $gdir/rebase-apply/rebasing + set -f operation rebase + else if test -f $gdir/rebase-apply/applying + set -f operation am + else + set -f operation am/rebase + end + else if test -f $gdir/MERGE_HEAD + set -f operation merge + else if test -f $gdir/CHERRY_PICK_HEAD + set -f operation cherry-pick + else if test -f $gdir/REVERT_HEAD + set -f operation revert + else if test -f $gdir/BISECT_LOG + set -f operation bisect + end + + # Git status/stash + Upstream behind/ahead + test $in_gdir = true && set -l _set_dir_opt -C $gdir/.. + # Suppress errors in case we are in a bare repo or there is no upstream + stat=(git $_set_dir_opt --no-optional-locks status --porcelain 2>/dev/null) \ + string match -qr '(0|(?<stash>.*))\n(0|(?<conflicted>.*))\n(0|(?<staged>.*)) +(0|(?<dirty>.*))\n(0|(?<untracked>.*))(\n(0|(?<behind>.*))\t(0|(?<ahead>.*)))?' \ + "$(git $_set_dir_opt stash list 2>/dev/null | count + string match -r ^UU $stat | count + string match -r ^[ADMR]. $stat | count + string match -r ^.[ADMR] $stat | count + string match -r '^\?\?' $stat | count + git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null)" + + if test -n "$operation$conflicted" + set -g tide_git_bg_color $tide_git_bg_color_urgent + else if test -n "$staged$dirty$untracked" + set -g tide_git_bg_color $tide_git_bg_color_unstable + end + + _tide_print_item git $_tide_location_color$tide_git_icon' ' (set_color white; echo -ns $location + set_color $tide_git_color_operation; echo -ns ' '$operation ' '$step/$total_steps + set_color $tide_git_color_upstream; echo -ns ' ⇣'$behind ' ⇡'$ahead + set_color $tide_git_color_stash; echo -ns ' *'$stash + set_color $tide_git_color_conflicted; echo -ns ' ~'$conflicted + set_color $tide_git_color_staged; echo -ns ' +'$staged + set_color $tide_git_color_dirty; echo -ns ' !'$dirty + set_color $tide_git_color_untracked; echo -ns ' ?'$untracked) +end diff --git a/.config/fish/functions/_tide_item_go.fish b/.config/fish/functions/_tide_item_go.fish new file mode 100644 index 00000000..304acc52 --- /dev/null +++ b/.config/fish/functions/_tide_item_go.fish @@ -0,0 +1,3 @@ +function _tide_item_go + test -e go.mod && _tide_print_item go $tide_go_icon' ' (go version | string match -r "[\d.]+") +end diff --git a/.config/fish/functions/_tide_item_java.fish b/.config/fish/functions/_tide_item_java.fish new file mode 100644 index 00000000..88d0ea6e --- /dev/null +++ b/.config/fish/functions/_tide_item_java.fish @@ -0,0 +1,3 @@ +function _tide_item_java + test -e pom.xml && _tide_print_item java $tide_java_icon' ' (java -version &| string match -r "[\d.]+")[1] +end diff --git a/.config/fish/functions/_tide_item_jobs.fish b/.config/fish/functions/_tide_item_jobs.fish new file mode 100644 index 00000000..96cf902c --- /dev/null +++ b/.config/fish/functions/_tide_item_jobs.fish @@ -0,0 +1,3 @@ +function _tide_item_jobs + set -q _tide_jobs && _tide_print_item jobs $tide_jobs_icon +end diff --git a/.config/fish/functions/_tide_item_kubectl.fish b/.config/fish/functions/_tide_item_kubectl.fish new file mode 100644 index 00000000..ab044b33 --- /dev/null +++ b/.config/fish/functions/_tide_item_kubectl.fish @@ -0,0 +1,4 @@ +function _tide_item_kubectl + kubectl config view --minify --output 'jsonpath={.current-context}/{..namespace}' 2>/dev/null | read -l context && + _tide_print_item kubectl $tide_kubectl_icon' ' (string replace -r '/(|default)$' '' $context) +end diff --git a/.config/fish/functions/_tide_item_nix_shell.fish b/.config/fish/functions/_tide_item_nix_shell.fish new file mode 100644 index 00000000..647f6066 --- /dev/null +++ b/.config/fish/functions/_tide_item_nix_shell.fish @@ -0,0 +1,3 @@ +function _tide_item_nix_shell + set -q IN_NIX_SHELL && _tide_print_item nix_shell $tide_nix_shell_icon' ' $IN_NIX_SHELL +end diff --git a/.config/fish/functions/_tide_item_node.fish b/.config/fish/functions/_tide_item_node.fish new file mode 100644 index 00000000..90a929b0 --- /dev/null +++ b/.config/fish/functions/_tide_item_node.fish @@ -0,0 +1,3 @@ +function _tide_item_node + test -e package.json && _tide_print_item node $tide_node_icon' ' (node --version | string trim --chars=v) +end diff --git a/.config/fish/functions/_tide_item_os.fish b/.config/fish/functions/_tide_item_os.fish new file mode 100644 index 00000000..8a6208c6 --- /dev/null +++ b/.config/fish/functions/_tide_item_os.fish @@ -0,0 +1,3 @@ +function _tide_item_os + _tide_print_item os $tide_os_icon +end diff --git a/.config/fish/functions/_tide_item_php.fish b/.config/fish/functions/_tide_item_php.fish new file mode 100644 index 00000000..64fc59b6 --- /dev/null +++ b/.config/fish/functions/_tide_item_php.fish @@ -0,0 +1,3 @@ +function _tide_item_php + test -e composer.json && _tide_print_item php $tide_php_icon' ' (php --version | string match -r 'PHP ([\d.]+)')[2] +end diff --git a/.config/fish/functions/_tide_item_private_mode.fish b/.config/fish/functions/_tide_item_private_mode.fish new file mode 100644 index 00000000..4eb4684d --- /dev/null +++ b/.config/fish/functions/_tide_item_private_mode.fish @@ -0,0 +1,3 @@ +function _tide_item_private_mode + set -q _tide_private_mode && _tide_print_item private_mode $tide_private_mode_icon +end diff --git a/.config/fish/functions/_tide_item_rustc.fish b/.config/fish/functions/_tide_item_rustc.fish new file mode 100644 index 00000000..b898e6f3 --- /dev/null +++ b/.config/fish/functions/_tide_item_rustc.fish @@ -0,0 +1,3 @@ +function _tide_item_rustc + test -e Cargo.toml && _tide_print_item rustc $tide_rustc_icon' ' (rustc --version | string split ' ')[2] +end diff --git a/.config/fish/functions/_tide_item_shlvl.fish b/.config/fish/functions/_tide_item_shlvl.fish new file mode 100644 index 00000000..95dd5ff2 --- /dev/null +++ b/.config/fish/functions/_tide_item_shlvl.fish @@ -0,0 +1,4 @@ +function _tide_item_shlvl + # Non-interactive shells do not increment SHLVL, so we don't need to subtract 1 + test $SHLVL -gt $tide_shlvl_threshold && _tide_print_item shlvl $tide_shlvl_icon' ' $SHLVL +end diff --git a/.config/fish/functions/_tide_item_status.fish b/.config/fish/functions/_tide_item_status.fish new file mode 100644 index 00000000..3a040fd1 --- /dev/null +++ b/.config/fish/functions/_tide_item_status.fish @@ -0,0 +1,15 @@ +function _tide_item_status + if string match -qv 0 $_tide_pipestatus # If there is a failure anywhere in the pipestatus + if test "$_tide_pipestatus" = 1 # If simple failure + contains character $_tide_left_items || tide_status_bg_color=$tide_status_bg_color_failure \ + tide_status_color=$tide_status_color_failure _tide_print_item status $tide_status_icon_failure' ' 1 + else + fish_status_to_signal $_tide_pipestatus | string replace SIG '' | string join '|' | read -l out + test $_tide_status = 0 && _tide_print_item status $tide_status_icon' ' $out || + tide_status_bg_color=$tide_status_bg_color_failure tide_status_color=$tide_status_color_failure \ + _tide_print_item status $tide_status_icon_failure' ' $out + end + else if not contains character $_tide_left_items + _tide_print_item status $tide_status_icon + end +end diff --git a/.config/fish/functions/_tide_item_terraform.fish b/.config/fish/functions/_tide_item_terraform.fish new file mode 100644 index 00000000..60fd3fb1 --- /dev/null +++ b/.config/fish/functions/_tide_item_terraform.fish @@ -0,0 +1,6 @@ +function _tide_item_terraform + if test -d .terraform + terraform workspace show | read -l workspace + test $workspace != default && _tide_print_item terraform $tide_terraform_icon' ' $workspace + end +end diff --git a/.config/fish/functions/_tide_item_time.fish b/.config/fish/functions/_tide_item_time.fish new file mode 100644 index 00000000..b8522bc4 --- /dev/null +++ b/.config/fish/functions/_tide_item_time.fish @@ -0,0 +1,3 @@ +function _tide_item_time + _tide_print_item time (date +$tide_time_format) +end diff --git a/.config/fish/functions/_tide_item_toolbox.fish b/.config/fish/functions/_tide_item_toolbox.fish new file mode 100644 index 00000000..28975d30 --- /dev/null +++ b/.config/fish/functions/_tide_item_toolbox.fish @@ -0,0 +1,3 @@ +function _tide_item_toolbox + test -e /run/.toolboxenv && _tide_print_item toolbox $tide_toolbox_icon' ' $hostname +end diff --git a/.config/fish/functions/_tide_item_vi_mode.fish b/.config/fish/functions/_tide_item_vi_mode.fish new file mode 100644 index 00000000..582855d0 --- /dev/null +++ b/.config/fish/functions/_tide_item_vi_mode.fish @@ -0,0 +1,16 @@ +function _tide_item_vi_mode + test "$fish_key_bindings" != fish_default_key_bindings && switch $fish_bind_mode + case default + tide_vi_mode_bg_color=$tide_vi_mode_bg_color_default tide_vi_mode_color=$tide_vi_mode_color_default \ + _tide_print_item vi_mode $tide_vi_mode_icon_default + case insert + tide_vi_mode_bg_color=$tide_vi_mode_bg_color_insert tide_vi_mode_color=$tide_vi_mode_color_insert \ + _tide_print_item vi_mode $tide_vi_mode_icon_insert + case replace replace_one + tide_vi_mode_bg_color=$tide_vi_mode_bg_color_replace tide_vi_mode_color=$tide_vi_mode_color_replace \ + _tide_print_item vi_mode $tide_vi_mode_icon_replace + case visual + tide_vi_mode_bg_color=$tide_vi_mode_bg_color_visual tide_vi_mode_color=$tide_vi_mode_color_visual \ + _tide_print_item vi_mode $tide_vi_mode_icon_visual + end +end diff --git a/.config/fish/functions/_tide_item_virtual_env.fish b/.config/fish/functions/_tide_item_virtual_env.fish new file mode 100644 index 00000000..0f20ceec --- /dev/null +++ b/.config/fish/functions/_tide_item_virtual_env.fish @@ -0,0 +1,11 @@ +function _tide_item_virtual_env + test -n "$VIRTUAL_ENV" && split_virtual_env=(string split / "$VIRTUAL_ENV") if test $split_virtual_env[-2] = virtualenvs + # pipenv $VIRTUAL_ENV looks like /home/ilan/.local/share/virtualenvs/pipenv_project-EwRYuc3l + # Detect whether we are using pipenv by looking for virtualenvs. If so, remove the hash at the end. + _tide_print_item virtual_env $tide_virtual_env_icon' ' (string split -r -m1 - "$split_virtual_env[-1]")[1] + else if contains -- $split_virtual_env[-1] virtualenv venv .venv env # avoid generic names + _tide_print_item virtual_env $tide_virtual_env_icon' ' $split_virtual_env[-2] + else + _tide_print_item virtual_env $tide_virtual_env_icon' ' $split_virtual_env[-1] + end +end diff --git a/.config/fish/functions/_tide_print_item.fish b/.config/fish/functions/_tide_print_item.fish new file mode 100644 index 00000000..db5c98b2 --- /dev/null +++ b/.config/fish/functions/_tide_print_item.fish @@ -0,0 +1,22 @@ +function _tide_print_item -a item + v=tide_"$item"_bg_color set -f item_bg_color $$v + + if set -e add_prefix + set_color $item_bg_color -b normal + v=tide_"$_tide_side"_prompt_prefix echo -ns $$v + else if test "$item_bg_color" = "$prev_bg_color" + v=tide_"$_tide_side"_prompt_separator_same_color echo -ns $_tide_color_separator_same_color$$v + else if test $_tide_side = left + set_color $prev_bg_color -b $item_bg_color + echo -ns $tide_left_prompt_separator_diff_color + else + set_color $item_bg_color -b $prev_bg_color + echo -ns $tide_right_prompt_separator_diff_color + end + + v=tide_"$item"_color set_color $$v -b $item_bg_color + + echo -ns $_tide_pad $argv[2..] $_tide_pad + + set -g prev_bg_color $item_bg_color +end diff --git a/.config/fish/functions/_tide_pwd.fish b/.config/fish/functions/_tide_pwd.fish new file mode 100644 index 00000000..1680528e --- /dev/null +++ b/.config/fish/functions/_tide_pwd.fish @@ -0,0 +1,37 @@ +set_color -o $tide_pwd_color_anchors | read -l color_anchors +set_color $tide_pwd_color_truncated_dirs | read -l color_truncated +set -l reset_to_color_dirs (set_color normal -b $tide_pwd_bg_color; set_color $tide_pwd_color_dirs) + +set -l unwritable_icon $tide_pwd_icon_unwritable' ' +set -l home_icon $tide_pwd_icon_home' ' +set -l pwd_icon $tide_pwd_icon' ' + +eval "function _tide_pwd + if set -l split_pwd (string replace -r '^$HOME' '~' \$PWD | string split /) + test -w . && set -f split_output \"$pwd_icon\$split_pwd[1]\" \$split_pwd[2..] || + set -f split_output \"$unwritable_icon\$split_pwd[1]\" \$split_pwd[2..] + set split_output[-1] \"$color_anchors\$split_output[-1]$reset_to_color_dirs\" + else + set -f split_output \"$home_icon$color_anchors~\" + end + + string join / \$split_output | string length -V | read -g _tide_pwd_len + + i=1 for dir_section in \$split_pwd[2..-2] + string join -- / \$split_pwd[..\$i] | string replace '~' $HOME | read -l parent_dir # Uses i before increment + + math \$i+1 | read i + + if path is \$parent_dir/\$dir_section/\$tide_pwd_markers + set split_output[\$i] \"$color_anchors\$dir_section$reset_to_color_dirs\" + else if test \$_tide_pwd_len -gt \$dist_btwn_sides + set -l trunc + while string match -qr \"(?<trunc>\$trunc.)\" \$dir_section && v=\$parent_dir/\$trunc*/ set -q v[2] + end + test -n \"\$trunc\" && set split_output[\$i] \"$color_truncated\$trunc$reset_to_color_dirs\" && + string join / \$split_output | string length -V | read _tide_pwd_len + end + end + + string join -- / \"$reset_to_color_dirs\$split_output[1]\" \$split_output[2..] +end" diff --git a/.config/fish/functions/_tide_remove_unusable_items.fish b/.config/fish/functions/_tide_remove_unusable_items.fish new file mode 100644 index 00000000..69065dc8 --- /dev/null +++ b/.config/fish/functions/_tide_remove_unusable_items.fish @@ -0,0 +1,21 @@ +function _tide_remove_unusable_items + # Remove tool-specific items for tools the machine doesn't have installed + set -l removed_items + for item in aws chruby docker git go java kubectl nix_shell node php rustc terraform toolbox virtual_env + set -l cli_names $item + switch $item + case virtual_env + set cli_names python python3 + case nix_shell + set cli_names nix nix-shell + end + type --query $cli_names || set -a removed_items $item + end + + set -U _tide_left_items (for item in $tide_left_prompt_items + contains $item $removed_items || echo $item + end) + set -U _tide_right_items (for item in $tide_right_prompt_items + contains $item $removed_items || echo $item + end) +end diff --git a/.config/fish/functions/_tide_sub_bug-report.fish b/.config/fish/functions/_tide_sub_bug-report.fish new file mode 100644 index 00000000..5f087c88 --- /dev/null +++ b/.config/fish/functions/_tide_sub_bug-report.fish @@ -0,0 +1,73 @@ +function _tide_sub_bug-report + argparse c/clean v/verbose check -- $argv + + set -l fish_path (status fish-path) + + if set -q _flag_clean + HOME=(mktemp -d) $fish_path --init-command "curl --silent \ + https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | + source && fisher install ilancosman/tide@v5" + else if set -q _flag_verbose + set --long | string match -r "^_?tide.*" | # Get only tide variables + string match -r --invert "^_tide_prompt_var.*" # Remove _tide_prompt_var + else + set -l fish_version ($fish_path --version | string match -r "fish, version (\d\.\d\.\d)")[2] + _tide_check_version Fish fish-shell/fish-shell "(\d\.\d\.\d)" $fish_version || return + + set -l tide_version (tide --version | string match -r "tide, version (\d\.\d\.\d)")[2] + _tide_check_version Tide IlanCosman/tide "v(\d\.\d\.\d)" $tide_version || return + + if command --query git + test (git --version | string match -r "git version ([\d\.]*)" | string replace --all . '')[2] -gt 2220 + _tide_check_condition \ + "Your git version is too old." \ + "Tide requires at least version 2.22." \ + "Please update before submitting a bug report." || return + end + + # Check that omf is not installed + not functions --query omf + _tide_check_condition \ + "Tide does not work with oh-my-fish installed." \ + "Please uninstall it before submitting a bug report." || return + + if not set -q _flag_check + set -l fish_startup_time ($fish_path -ic "time $fish_path -c exit" 2>| + string match -r "Executed in(.*)fish" | string trim)[2] + + read --local --prompt-str "What operating system are you using? (e.g Ubuntu 20.04): " os + read --local --prompt-str "What terminal emulator are you using? (e.g Kitty): " terminal_emulator + + printf '%b\n' "\nPlease copy the following information into the issue:\n" \ + "fish version: $fish_version" \ + "tide version: $tide_version" \ + "term: $TERM" \ + "os: $os" \ + "terminal emulator: $terminal_emulator" \ + "fish startup: $fish_startup_time" \ + "fisher plugins: $_fisher_plugins" + end + end +end + +function _tide_check_version -a program_name repo_name regex_to_get_version current_version + curl --silent https://github.com/$repo_name/releases/latest | + string match -r ".*$repo_name/releases/tag/$regex_to_get_version.*" | + read --local --line __ latestVersion + + string match --quiet -r "^$latestVersion" "$current_version" + _tide_check_condition \ + "Your $program_name version is out of date." \ + "The latest is $latestVersion. You have $current_version." \ + "Please update before submitting a bug report." +end + +function _tide_check_condition + if test "$status" != 0 + set_color red + printf '%s\n' $argv + set_color normal + return 1 + end + return 0 +end diff --git a/.config/fish/functions/_tide_sub_configure.fish b/.config/fish/functions/_tide_sub_configure.fish new file mode 100644 index 00000000..cb872901 --- /dev/null +++ b/.config/fish/functions/_tide_sub_configure.fish @@ -0,0 +1,95 @@ +set -g _tide_color_dark_blue 0087AF +set -g _tide_color_dark_green 5FAF00 +set -g _tide_color_gold D7AF00 +set -g _tide_color_green 5FD700 +set -g _tide_color_light_blue 00AFFF + +# Create an empty fake function for each item +for func in _fake(functions --all | string match --entire _tide_item) + function $func + end +end + +for file in (status dirname)/tide/configure/{choices, functions}/**.fish + source $file +end + +function _tide_sub_configure + if test $COLUMNS -lt 55 -o $LINES -lt 21 + echo 'Terminal size too small; must be at least 55 x 21' + return 1 + end + + _tide_detect_os | read -g --line os_branding_icon os_branding_color os_branding_bg_color + + set -g fake_columns $COLUMNS + test $fake_columns -gt 90 && set fake_columns 90 + set -g fake_lines $LINES + + set -g _tide_selected_option + _next_choice all/style +end + +function _next_choice -a nextChoice + set -q _tide_selected_option || return 0 + set -l cmd (string split '/' $nextChoice)[2] + $cmd +end + +function _tide_title -a text + command -q clear && clear + set_color -o + string pad --width (math --scale=0 "$fake_columns/2" + (string length $text)/2) $text + set_color normal +end + +function _tide_option -a symbol text + set -ga _tide_option_list $symbol + + set_color -o + echo "($symbol) $text" + set_color normal +end + +function _tide_menu + set -l list_with_slashes (string join '/' $_tide_option_list) + + echo '(r) Restart from the beginning' + echo '(q) Quit and do nothing'\n + + while true + set_color -o + read --nchars 1 --prompt-str "Choice [$list_with_slashes/r/q] " input + set_color normal + + switch $input + case r + set -e _tide_option_list + _next_choice all/style + break + case q + set -e _tide_selected_option # Skip through all the _next_choices + set -e _tide_option_list + command -q clear && clear + break + case $_tide_option_list + set -e _tide_option_list + set -g _tide_selected_option $input + break + end + end +end + +function _tide_display_prompt -a var_name var_value + test -n "$var_name" && set -g $var_name $var_value + _fake_tide_cache_variables + set -l prompt (_fake_tide_prompt) + + set -l bottom_left_prompt_string_length (string length --visible $prompt[-1]) + set -l right_prompt_string (string pad --width (math $fake_columns-$bottom_left_prompt_string_length) $prompt[1]) + set -l prompt[-1] "$prompt[-1]$right_prompt_string" + + string unescape $prompt[2..] + set_color normal + echo +end diff --git a/.config/fish/functions/fish_mode_prompt.fish b/.config/fish/functions/fish_mode_prompt.fish new file mode 100644 index 00000000..f37cf7dc --- /dev/null +++ b/.config/fish/functions/fish_mode_prompt.fish @@ -0,0 +1 @@ +# Disable default vi prompt diff --git a/.config/fish/functions/fish_prompt.fish b/.config/fish/functions/fish_prompt.fish new file mode 100644 index 00000000..7aef1678 --- /dev/null +++ b/.config/fish/functions/fish_prompt.fish @@ -0,0 +1,87 @@ +function fish_prompt +end # In case this file gets loaded non-interactively, e.g by conda +status is-interactive || exit + +_tide_remove_unusable_items +_tide_cache_variables +source (functions --details _tide_pwd) + +set -l prompt_var _tide_prompt_$fish_pid +set -U $prompt_var # Set var here so if we erase $prompt_var, bg job won't set a uvar + +set_color normal | read -l color_normal +status fish-path | read -l fish_path + +# _tide_repaint prevents us from creating a second background job +function _tide_refresh_prompt --on-variable $prompt_var --on-variable COLUMNS + set -g _tide_repaint + commandline -f repaint +end + +if contains newline $_tide_left_items # two line prompt initialization + test "$tide_prompt_add_newline_before" = true && set -l add_newline '\n' + + set_color $tide_prompt_color_frame_and_connection -b normal | read -l prompt_and_frame_color + + set -l column_offset 5 + test "$tide_left_prompt_frame_enabled" = true && + set -l top_left_frame "$prompt_and_frame_color╭─" && + set -l bot_left_frame "$prompt_and_frame_color╰─" && + set column_offset (math $column_offset-2) + test "$tide_right_prompt_frame_enabled" = true && + set -l top_right_frame "$prompt_and_frame_color─╮" && + set -l bot_right_frame "$prompt_and_frame_color─╯" && + set column_offset (math $column_offset-2) + + eval " +function fish_prompt + _tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint + jobs -q && set -lx _tide_jobs + $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus +CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_2_line_prompt)\" & + builtin disown + + command kill \$_tide_last_pid 2>/dev/null + set -g _tide_last_pid \$last_pid + end + + math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][3]\")+$column_offset | read -lx dist_btwn_sides + + echo -ns $add_newline'$top_left_frame'(string replace @PWD@ (_tide_pwd) \"\$$prompt_var[1][1]\")'$prompt_and_frame_color' + string repeat -Nm(math max 0, \$dist_btwn_sides-\$_tide_pwd_len) '$tide_prompt_icon_connection' + echo -ns \"\$$prompt_var[1][3]$top_right_frame\"\n\"$bot_left_frame\$$prompt_var[1][2]$color_normal \" +end + +function fish_right_prompt + string unescape \"\$$prompt_var[1][4]$bot_right_frame$color_normal\" +end" +else # one line prompt initialization + test "$tide_prompt_add_newline_before" = true && set -l add_newline '\0' + + math 5 -$tide_prompt_min_cols | read -l column_offset + test $column_offset -ge 0 && set column_offset "+$column_offset" + + eval " +function fish_prompt + _tide_status=\$status _tide_pipestatus=\$pipestatus if not set -e _tide_repaint + jobs -q && set -lx _tide_jobs + $fish_path -c \"set _tide_pipestatus \$_tide_pipestatus +CMD_DURATION=\$CMD_DURATION fish_bind_mode=\$fish_bind_mode set $prompt_var (_tide_1_line_prompt)\" & + builtin disown + + command kill \$_tide_last_pid 2>/dev/null + set -g _tide_last_pid \$last_pid + end + + math \$COLUMNS-(string length -V \"\$$prompt_var[1][1]\$$prompt_var[1][2]\")$column_offset | read -lx dist_btwn_sides + string replace @PWD@ (_tide_pwd) $add_newline \$$prompt_var[1][1]'$color_normal ' +end + +function fish_right_prompt + string unescape \"\$$prompt_var[1][2]$color_normal\" +end" +end + +eval "function _tide_on_fish_exit --on-event fish_exit + set -e $prompt_var +end" diff --git a/.config/fish/functions/fisher.fish b/.config/fish/functions/fisher.fish index 47598571..a4666a13 100644 --- a/.config/fish/functions/fisher.fish +++ b/.config/fish/functions/fisher.fish @@ -1,430 +1,240 @@ -set -g fisher_version 3.2.9 +function fisher --argument-names cmd --description "A plugin manager for Fish" + set --query fisher_path || set --local fisher_path $__fish_config_dir + set --local fisher_version 4.4.2 + set --local fish_plugins $__fish_config_dir/fish_plugins -function fisher -a cmd -d "fish package manager" - set -q XDG_CACHE_HOME; or set XDG_CACHE_HOME ~/.cache - set -q XDG_CONFIG_HOME; or set XDG_CONFIG_HOME ~/.config + switch "$cmd" + case -v --version + echo "fisher, version $fisher_version" + case "" -h --help + echo "Usage: fisher install <plugins...> Install plugins" + echo " fisher remove <plugins...> Remove installed plugins" + echo " fisher update <plugins...> Update installed plugins" + echo " fisher update Update all installed plugins" + echo " fisher list [<regex>] List installed plugins matching regex" + echo "Options:" + echo " -v or --version Print version" + echo " -h or --help Print this help message" + echo "Variables:" + echo " \$fisher_path Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~ + case ls list + string match --entire --regex -- "$argv[2]" $_fisher_plugins + case install update remove + isatty || read --local --null --array stdin && set --append argv $stdin + + set --local install_plugins + set --local update_plugins + set --local remove_plugins + set --local arg_plugins $argv[2..-1] + set --local old_plugins $_fisher_plugins + set --local new_plugins + + test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins) + + if ! set --query argv[2] + if test "$cmd" != update + echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1 + else if ! set --query file_plugins + echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1 + end + set arg_plugins $file_plugins + end - set -g fish_config $XDG_CONFIG_HOME/fish - set -g fisher_cache $XDG_CACHE_HOME/fisher - set -g fisher_config $XDG_CONFIG_HOME/fisher + for plugin in $arg_plugins + set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin) + contains -- "$plugin" $new_plugins || set --append new_plugins $plugin + end - set -q fisher_path; or set -g fisher_path $fish_config + if set --query argv[2] + for plugin in $new_plugins + if contains -- "$plugin" $old_plugins + test "$cmd" = remove && + set --append remove_plugins $plugin || + set --append update_plugins $plugin + else if test "$cmd" = install + set --append install_plugins $plugin + else + echo "fisher: Plugin not installed: \"$plugin\"" >&2 && return 1 + end + end + else + for plugin in $new_plugins + contains -- "$plugin" $old_plugins && + set --append update_plugins $plugin || + set --append install_plugins $plugin + end - for path in {$fish_config,$fisher_path}/{functions,completions,conf.d} $fisher_cache - if test ! -d $path - command mkdir -p $path - end - end + for plugin in $old_plugins + contains -- "$plugin" $new_plugins || set --append remove_plugins $plugin + end + end - if test ! -e $fisher_path/completions/fisher.fish - echo "fisher complete" >$fisher_path/completions/fisher.fish - _fisher_complete - end + set --local pid_list + set --local source_plugins + set --local fetch_plugins $update_plugins $install_plugins + set --local fish_path (status fish-path) - if test -e $fisher_path/conf.d/fisher.fish - switch "$version" - case \*-\* - command rm -f $fisher_path/conf.d/fisher.fish - case 2\* - case \* - command rm -f $fisher_path/conf.d/fisher.fish - end - else - switch "$version" - case \*-\* - case 2\* - echo "fisher copy-user-key-bindings" >$fisher_path/conf.d/fisher.fish - end - end + echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal) - switch "$cmd" - case {,self-}complete - _fisher_complete - case copy-user-key-bindings - _fisher_copy_user_key_bindings - case ls - set -e argv[1] - if test -s "$fisher_path/fishfile" - set -l file (_fisher_fmt <$fisher_path/fishfile | _fisher_parse -R | command sed "s|@.*||") - _fisher_ls | _fisher_fmt | command awk -v FILE="$file" " - BEGIN { for (n = split(FILE, f); ++i <= n;) file[f[i]] } \$0 in file && /$argv[1]/ - " | command sed "s|^$HOME|~|" - end - case self-update - _fisher_self_update (status -f) - case self-uninstall - _fisher_self_uninstall - case {,-}-v{ersion,} - echo "fisher version $fisher_version" (status -f | command sed "s|^$HOME|~|") - case {,-}-h{elp,} - _fisher_help - case "" - _fisher_commit -- - case add rm - if not isatty - while read -l arg - set argv $argv $arg - end - end + for plugin in $fetch_plugins + set --local source (command mktemp -d) + set --append source_plugins $source - if test (count $argv) = 1 - echo "fisher: invalid number of arguments" >&2 - _fisher_help >&2 - return 1 - end + command mkdir -p $source/{completions,conf.d,themes,functions} - _fisher_commit $argv - case \* - echo "fisher: unknown flag or command \"$cmd\"" >&2 - _fisher_help >&2 - return 1 - end -end + $fish_path --command " + if test -e $plugin + command cp -Rf $plugin/* $source + else + set temp (command mktemp -d) + set repo (string split -- \@ $plugin) || set repo[2] HEAD -function _fisher_complete - complete -ec fisher - complete -xc fisher -n __fish_use_subcommand -a add -d "Add packages" - complete -xc fisher -n __fish_use_subcommand -a rm -d "Remove packages" - complete -xc fisher -n __fish_use_subcommand -a ls -d "List installed packages matching REGEX" - complete -xc fisher -n __fish_use_subcommand -a --help -d "Show usage help" - complete -xc fisher -n __fish_use_subcommand -a --version -d "$fisher_version" - complete -xc fisher -n __fish_use_subcommand -a self-update -d "Update to the latest version" - for pkg in (fisher ls) - complete -xc fisher -n "__fish_seen_subcommand_from rm" -a $pkg - end -end + if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1]) + set name (string split -- / \$path)[-1] + set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz + else + set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2] + end -function _fisher_copy_user_key_bindings - if functions -q fish_user_key_bindings - functions -c fish_user_key_bindings fish_user_key_bindings_copy - end - function fish_user_key_bindings - for file in $fisher_path/conf.d/*_key_bindings.fish - source $file >/dev/null 2>/dev/null - end - if functions -q fish_user_key_bindings_copy - fish_user_key_bindings_copy - end - end -end + echo Fetching (set_color --underline)\$url(set_color normal) -function _fisher_ls - for pkg in $fisher_config/*/*/* - command readlink $pkg; or echo $pkg - end -end + if curl --silent -L \$url | tar -xzC \$temp -f - 2>/dev/null + command cp -Rf \$temp/*/* $source + else + echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2 + command rm -rf $source + end -function _fisher_fmt - command sed "s|^[[:space:]]*||;s|^$fisher_config/||;s|^~|$HOME|;s|^\.\/*|$PWD/|;s|^https*:/*||;s|^github\.com/||;s|/*\$||" -end + command rm -rf \$temp + end -function _fisher_help - echo "usage: fisher add <package...> Add packages" - echo " fisher rm <package...> Remove packages" - echo " fisher Update all packages" - echo " fisher ls [<regex>] List installed packages matching <regex>" - echo " fisher --help Show this help" - echo " fisher --version Show the current version" - echo " fisher self-update Update to the latest version" - echo " fisher self-uninstall Uninstall from your system" - echo "examples:" - echo " fisher add jethrokuan/z rafaelrinaldi/pure" - echo " fisher add gitlab.com/foo/bar@v2" - echo " fisher add ~/path/to/local/pkg" - echo " fisher add <file" - echo " fisher rm rafaelrinaldi/pure" - echo " fisher ls | fisher rm" - echo " fisher ls fish-\*" -end + set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files + " & -function _fisher_self_update -a file - set -l url "https://raw.githubusercontent.com/jorgebucaran/fisher/master/fisher.fish" - echo "fetching $url" >&2 - command curl -s "$url?nocache" >$file. - - set -l next_version (command awk '{ print $4 } { exit }' <$file.) - switch "$next_version" - case "" $fisher_version - command rm -f $file. - if test -z "$next_version" - echo "fisher: cannot update fisher -- are you offline?" >&2 - return 1 + set --append pid_list (jobs --last --pid) end - echo "fisher is already up-to-date" >&2 - case \* - echo "linking $file" | command sed "s|$HOME|~|" >&2 - command mv -f $file. $file - source $file - echo "updated to fisher $fisher_version -- hooray!" >&2 - _fisher_complete - end -end -function _fisher_self_uninstall - for pkg in (_fisher_ls) - _fisher_rm $pkg - end + wait $pid_list 2>/dev/null - for file in $fisher_cache $fisher_config $fisher_path/{functions,completions,conf.d}/fisher.fish $fisher_path/fishfile - echo "removing $file" - command rm -Rf $file 2>/dev/null - end | command sed "s|$HOME|~|" >&2 + for plugin in $fetch_plugins + if set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source + if set --local index (contains --index -- "$plugin" $install_plugins) + set --erase install_plugins[$index] + else + set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)] + end + end + end - for name in (set -n | command awk '/^fisher_/') - set -e "$name" - end + for plugin in $update_plugins $remove_plugins + if set --local index (contains --index -- "$plugin" $_fisher_plugins) + set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files - functions -e (functions -a | command awk '/^_fisher/') fisher - complete -c fisher --erase -end + if contains -- "$plugin" $remove_plugins + for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var) + emit {$name}_uninstall + end + printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~ + set --erase _fisher_plugins[$index] + end -function _fisher_commit -a cmd - set -e argv[1] - set -l elapsed (_fisher_now) - set -l fishfile $fisher_path/fishfile + command rm -rf (string replace -- \~ ~ $$plugin_files_var) - if test ! -e "$fishfile" - command touch $fishfile - echo "created new fishfile in $fishfile" | command sed "s|$HOME|~|" >&2 - end + functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var) - set -l old_pkgs (_fisher_ls | _fisher_fmt) - for pkg in (_fisher_ls) - _fisher_rm $pkg - end - command rm -Rf $fisher_config - command mkdir -p $fisher_config - - set -l next_pkgs (_fisher_fmt <$fishfile | _fisher_parse -R $cmd (printf "%s\n" $argv | _fisher_fmt)) - set -l actual_pkgs (_fisher_fetch $next_pkgs) - set -l updated_pkgs - for pkg in $old_pkgs - if contains -- $pkg $actual_pkgs - set updated_pkgs $updated_pkgs $pkg - end - end + for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var) + complete --erase --command $name + end - if test -z "$actual_pkgs$updated_pkgs$old_pkgs$next_pkgs" - echo "fisher: nothing to commit -- try adding some packages" >&2 - return 1 - end - - set -l out_pkgs - if test "$cmd" = "rm" - set out_pkgs $next_pkgs - else - for pkg in $next_pkgs - if contains -- (echo $pkg | command sed "s|@.*||") $actual_pkgs - set out_pkgs $out_pkgs $pkg + set --erase $plugin_files_var + end end - end - end - printf "%s\n" (_fisher_fmt <$fishfile | _fisher_parse -W $cmd $out_pkgs | command sed "s|^$HOME|~|") >$fishfile + if set --query update_plugins[1] || set --query install_plugins[1] + command mkdir -p $fisher_path/{functions,themes,conf.d,completions} + end - _fisher_complete + for plugin in $update_plugins $install_plugins + set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] + set --local files $source/{functions,themes,conf.d,completions}/* - command awk -v A=(count $actual_pkgs) -v U=(count $updated_pkgs) -v O=(count $old_pkgs) -v E=(_fisher_now $elapsed) ' - BEGIN { - res = fmt("removed", O - U, fmt("updated", U, fmt("added", A - U))) - printf((res ? res : "done") " in %.2fs\n", E / 1000) - } - function fmt(action, n, s) { - return n ? (s ? s ", " : s) action " " n " package" (n > 1 ? "s" : "") : s - } - ' >&2 -end + if set --local index (contains --index -- $plugin $install_plugins) + set --local user_files $fisher_path/{functions,themes,conf.d,completions}/* + set --local conflict_files -function _fisher_parse -a mode cmd - set -e argv[1..2] - command awk -v FS="[[:space:]]*#+" -v MODE="$mode" -v CMD="$cmd" -v ARGSTR="$argv" ' - BEGIN { - for (n = split(ARGSTR, a, " "); i++ < n;) pkgs[getkey(a[i])] = a[i] - } - !NF { next } { k = getkey($1) } - MODE == "-R" && !(k in pkgs) && $0 = $1 - MODE == "-W" && (/^#/ || k in pkgs || CMD != "rm") { print pkgs[k] (sub($1, "") ? $0 : "") } - MODE == "-W" || CMD == "rm" { delete pkgs[k] } - END { - for (k in pkgs) { - if (CMD != "rm" || MODE == "-W") print pkgs[k] - else print "fisher: cannot remove \""k"\" -- package is not in fishfile" > "/dev/stderr" - } - } - function getkey(s, a) { - return (split(s, a, /@+|:/) > 2) ? a[2]"/"a[1]"/"a[3] : a[1] - } - ' -end + for file in (string replace -- $source/ $fisher_path/ $files) + contains -- $file $user_files && set --append conflict_files $file + end -function _fisher_fetch - set -l pkg_jobs - set -l out_pkgs - set -l next_pkgs - set -l local_pkgs - set -q fisher_user_api_token; and set -l curl_opts -u $fisher_user_api_token - - for pkg in $argv - switch $pkg - case \~\* /\* - set -l path (echo "$pkg" | command sed "s|^~|$HOME|") - if test -e "$path" - set local_pkgs $local_pkgs $path - else - echo "fisher: cannot add \"$pkg\" -- is this a valid file?" >&2 + if set --query conflict_files[1] && set --erase install_plugins[$index] + echo -s "fisher: Cannot install \"$plugin\": please remove or move conflicting files first:" \n" "$conflict_files >&2 + continue + end end - continue - end - command awk -v PKG="$pkg" -v FS=/ ' - BEGIN { - if (split(PKG, tmp, /@+|:/) > 2) { - if (tmp[4]) sub("@"tmp[4], "", PKG) - print PKG "\t" tmp[2]"/"tmp[1]"/"tmp[3] "\t" (tmp[4] ? tmp[4] : "master") - } else { - pkg = split(PKG, _, "/") <= 2 ? "github.com/"tmp[1] : tmp[1] - tag = tmp[2] ? tmp[2] : "master" - print (\ - pkg ~ /^github/ ? "https://codeload."pkg"/tar.gz/"tag : \ - pkg ~ /^gitlab/ ? "https://"pkg"/-/archive/"tag"/"tmp[split(pkg, tmp, "/")]"-"tag".tar.gz" : \ - pkg ~ /^bitbucket/ ? "https://"pkg"/get/"tag".tar.gz" : pkg \ - ) "\t" pkg - } - } - ' | read -l url pkg branch - - if test ! -d "$fisher_config/$pkg" - fish -c " - echo fetching $url >&2 - command mkdir -p $fisher_config/$pkg $fisher_cache/(command dirname $pkg) - if test ! -z \"$branch\" - command git clone $url $fisher_config/$pkg --branch $branch --depth 1 2>/dev/null - or echo fisher: cannot clone \"$url\" -- is this a valid url\? >&2 - else if command curl $curl_opts -Ss -w \"\" $url 2>&1 | command tar -xzf- -C $fisher_config/$pkg 2>/dev/null - command rm -Rf $fisher_cache/$pkg - command mv -f $fisher_config/$pkg/* $fisher_cache/$pkg - command rm -Rf $fisher_config/$pkg - command cp -Rf {$fisher_cache,$fisher_config}/$pkg - else if test -d \"$fisher_cache/$pkg\" - echo fisher: cannot connect to server -- looking in \"$fisher_cache/$pkg\" | command sed 's|$HOME|~|' >&2 - command cp -Rf $fisher_cache/$pkg $fisher_config/$pkg/.. - else - command rm -Rf $fisher_config/$pkg - echo fisher: cannot add \"$pkg\" -- is this a valid package\? >&2 + for file in (string replace -- $source/ "" $files) + command cp -Rf $source/$file $fisher_path/$file end - " >/dev/null & - set pkg_jobs $pkg_jobs (_fisher_jobs --last) - set next_pkgs $next_pkgs "$fisher_config/$pkg" - end - end - if set -q pkg_jobs[1] - while for job in $pkg_jobs - contains -- $job (_fisher_jobs); and break - end - end - for pkg in $next_pkgs - if test -d "$pkg" - set out_pkgs $out_pkgs $pkg - _fisher_add $pkg - end - end - end + set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files - set -l local_prefix $fisher_config/local/$USER - if test ! -d "$local_prefix" - command mkdir -p $local_prefix - end - for pkg in $local_pkgs - set -l target $local_prefix/(command basename $pkg) - if test ! -L "$target" - command ln -sf $pkg $target - set out_pkgs $out_pkgs $pkg - _fisher_add $pkg --link - end - end + set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~) + + contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin + contains -- $plugin $install_plugins && set --local event install || set --local event update - if set -q out_pkgs[1] - _fisher_fetch ( - for pkg in $out_pkgs - if test -s "$pkg/fishfile" - _fisher_fmt <$pkg/fishfile | _fisher_parse -R + printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) " "$$plugin_files_var | string replace -- \~ ~ + + for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~) + source $file + if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file) + emit {$name}_$event + end end - end) - printf "%s\n" $out_pkgs | _fisher_fmt - end -end + end -function _fisher_add -a pkg opts - for src in $pkg/{functions,completions,conf.d}/**.* $pkg/*.fish - set -l target (command basename $src) - switch $src - case $pkg/conf.d\* - set target $fisher_path/conf.d/$target - case $pkg/completions\* - set target $fisher_path/completions/$target - case $pkg/{functions,}\* - switch $target - case uninstall.fish - continue - case {init,key_bindings}.fish - set target $fisher_path/conf.d/(command basename $pkg)\_$target - case \* - set target $fisher_path/functions/$target + command rm -rf $source_plugins + + if set --query _fisher_plugins[1] + set --local commit_plugins + + for plugin in $file_plugins + contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin end - end - echo "linking $target" | command sed "s|$HOME|~|" >&2 - if set -q opts[1] - command ln -sf $src $target - else - command cp -f $src $target - end - switch $target - case \*.fish - source $target >/dev/null 2>/dev/null - end - end -end -function _fisher_rm -a pkg - for src in $pkg/{conf.d,completions,functions}/**.* $pkg/*.fish - set -l target (command basename $src) - set -l filename (command basename $target .fish) - switch $src - case $pkg/conf.d\* - test "$filename.fish" = "$target"; and emit "$filename"_uninstall - set target conf.d/$target - case $pkg/completions\* - test "$filename.fish" = "$target"; and complete -ec $filename - set target completions/$target - case $pkg/{,functions}\* - test "$filename.fish" = "$target"; and functions -e $filename - switch $target - case uninstall.fish - source $src - continue - case {init,key_bindings}.fish - set target conf.d/(command basename $pkg)\_$target - case \* - set target functions/$target + for plugin in $_fisher_plugins + contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin end - end - command rm -f $fisher_path/$target - end - if not functions -q fish_prompt - source "$__fish_datadir$__fish_data_dir/functions/fish_prompt.fish" - end -end -function _fisher_jobs - jobs $argv | command awk '/^[0-9]+\t/ { print $1 }' -end + printf "%s\n" $commit_plugins >$fish_plugins + else + set --erase _fisher_plugins + command rm -f $fish_plugins + end + + set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins) -function _fisher_now -a elapsed - switch (command uname) - case Darwin \*BSD - command perl -MTime::HiRes -e 'printf("%.0f\n", (Time::HiRes::time() * 1000) - $ARGV[0])' $elapsed + test "$total" != "0 0 0" && echo (string join ", " ( + test $total[1] = 0 || echo "Installed $total[1]") ( + test $total[2] = 0 || echo "Updated $total[2]") ( + test $total[3] = 0 || echo "Removed $total[3]") + ) plugin/s case \* - math (command date "+%s%3N") - "0$elapsed" + echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1 + end +end + +if ! set --query _fisher_upgraded_to_4_4 + set --universal _fisher_upgraded_to_4_4 + if functions --query _fisher_list + set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share + command rm -rf $XDG_DATA_HOME/fisher + functions --erase _fisher_{list,plugin_parse} + fisher update >/dev/null 2>/dev/null + else + for var in (set --names | string match --entire --regex '^_fisher_.+_files$') + set $var (string replace -- ~ \~ $$var) + end + functions --erase _fisher_fish_postexec end end diff --git a/.config/fish/functions/fzf_configure_bindings.fish b/.config/fish/functions/fzf_configure_bindings.fish new file mode 100644 index 00000000..addb55c1 --- /dev/null +++ b/.config/fish/functions/fzf_configure_bindings.fish @@ -0,0 +1,46 @@ +# Always installs bindings for insert and default mode for simplicity and b/c it has almost no side-effect +# https://gitter.im/fish-shell/fish-shell?at=60a55915ee77a74d685fa6b1 +function fzf_configure_bindings --description "Installs the default key bindings for fzf.fish with user overrides passed as options." + # no need to install bindings if not in interactive mode or running tests + status is-interactive || test "$CI" = true; or return + + set options_spec h/help 'directory=?' 'git_log=?' 'git_status=?' 'history=?' 'variables=?' 'processes=?' + argparse --max-args=0 --ignore-unknown $options_spec -- $argv 2>/dev/null + if test $status -ne 0 + echo "Invalid option or a positional argument was provided." >&2 + _fzf_configure_bindings_help + return 22 + else if set --query _flag_help + _fzf_configure_bindings_help + return + else + # Initialize with default key sequences and then override or disable them based on flags + # index 1 = directory, 2 = git_log, 3 = git_status, 4 = history, 5 = variables, 6 = processes + set key_sequences \e\cf \e\cl \e\cs \cr \cv \e\cp # \c = control, \e = escape + set --query _flag_directory && set key_sequences[1] "$_flag_directory" + set --query _flag_git_log && set key_sequences[2] "$_flag_git_log" + set --query _flag_git_status && set key_sequences[3] "$_flag_git_status" + set --query _flag_history && set key_sequences[4] "$_flag_history" + set --query _flag_variables && set key_sequences[5] "$_flag_variables" + set --query _flag_processes && set key_sequences[6] "$_flag_processes" + + # If fzf bindings already exists, uninstall it first for a clean slate + if functions --query _fzf_uninstall_bindings + _fzf_uninstall_bindings + end + + for mode in default insert + test -n $key_sequences[1] && bind --mode $mode $key_sequences[1] _fzf_search_directory + test -n $key_sequences[2] && bind --mode $mode $key_sequences[2] _fzf_search_git_log + test -n $key_sequences[3] && bind --mode $mode $key_sequences[3] _fzf_search_git_status + test -n $key_sequences[4] && bind --mode $mode $key_sequences[4] _fzf_search_history + test -n $key_sequences[5] && bind --mode $mode $key_sequences[5] "$_fzf_search_vars_command" + test -n $key_sequences[6] && bind --mode $mode $key_sequences[6] _fzf_search_processes + end + + function _fzf_uninstall_bindings --inherit-variable key_sequences + bind --erase -- $key_sequences + bind --erase --mode insert -- $key_sequences + end + end +end diff --git a/.config/fish/functions/git_pull_all.fish b/.config/fish/functions/git_pull_all.fish new file mode 100644 index 00000000..037f7234 --- /dev/null +++ b/.config/fish/functions/git_pull_all.fish @@ -0,0 +1,7 @@ +function git_pull_all + for branch in (git branch | sed -E 's/^\*/ /' | awk '{print $1}'); + git checkout $branch; + git pull -p; + printf "\n"; + end +end diff --git a/.config/fish/functions/git_sync_all.fish b/.config/fish/functions/git_sync_all.fish new file mode 100644 index 00000000..35a56b6a --- /dev/null +++ b/.config/fish/functions/git_sync_all.fish @@ -0,0 +1,6 @@ +function git_sync_all + for branch in (git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); + git checkout (echo $branch | awk -F'/' '{print $1="\r"; $2="\r"; print;}' | xargs | sed 's/ /\//g'); + git pull -p + end +end diff --git a/.config/fish/functions/mm.fish b/.config/fish/functions/mm.fish new file mode 100644 index 00000000..4c6c470d --- /dev/null +++ b/.config/fish/functions/mm.fish @@ -0,0 +1,153 @@ +function mm --description "MakeMeFish - List all Make targets in the Makefile of the current directory" + + set current_pos 1 + while test (count $argv) -ge $current_pos + # Check if a help flag was passed to mm + set help_flags -- -h --help + if contains -- $argv[$current_pos] $help_flags + echo "" + echo " Usage:" + echo " " (set_color green)"mm"(set_color normal) "will look for a Makefile in the order specified by GNU Make and list all targets in it." + echo " " "To filter for a specific target, just start typing and targets will be filtered as you type." + echo " " (set_color green)"mm <keyword>"(set_color normal) "will start MakeMeFish with an initial, editable query" (set_color green)"<keyword>"(set_color normal) + echo " " (set_color green)"mm -i"(set_color normal) "will start MakeMeFish in interactive mode. When a target is run, you will return to the selection menu." + echo " " (set_color green)"mm -f <filename>"(set_color normal) "to specify what Makefile to load." + echo " " "All flags can be combined in any order." + echo "" + return 0 + else if test $argv[$current_pos] = "-f" + set current_pos (math "$current_pos+1") # skip the next + set filename $argv[$current_pos] + else if test $argv[$current_pos] = "-i" + set interactive 1 + else + if set -q initial_query + set initial_query $initial_query $argv[$current_pos] + else + set initial_query $argv[$current_pos] + end + end + set current_pos (math "$current_pos+1") + end + + function __mm_get_makefile_name -a 'filename' + if test -n "$filename" + set makefile_filenames $filename + else + set makefile_filenames 'GNUmakefile' 'makefile' 'Makefile' + end + for filename in $makefile_filenames + if test -f $filename + echo $filename + break + end + end + end + + # Based on: + # https://github.com/fish-shell/fish-shell/blob/8e418f5205106b11f83fa1956076a9b20c56f0f9/share/completions/make.fish + # and + # https://stackoverflow.com/a/26339924 + function __mm_parse_makefile -a 'filename' + # Ensure correct locale set + set -lx LC_ALL C + + set makeflags -f $filename + + # first awk merges any line that ends with a backslash with the next line + if make --version 2>/dev/null | string match -q 'GNU*' + make $makeflags -pRrq : 2>/dev/null | + awk '{if (sub(/\\\$/,"")) printf "%s", $0; else print $0}' | + awk -F: '/^# Files/,/^# Finished Make data base/ { + if ($1 == "# Not a target") skip = 1; + if ($1 !~ "^[#.\t]") { + if (!skip) print $1; skip=0 + } + }' 2>/dev/null + else + # BSD make + make $makeflags -d g1 -rn >/dev/null 2>| awk -F, '/^#\*\*\* Input graph:/,/^$/ {if ($1 !~ "^#... ") {gsub(/# /,"",$1); print $1}}' 2>/dev/null + end + end + + function __mm_get_targets -a 'filename' + set static_targets + set file_targets + set generated_targets + + set parsed_makefile (__mm_parse_makefile $filename | sort -f) + for row in $parsed_makefile # Loop over all rows in the Makefile + set row (string trim $row) + if test -n "$row" # No blanks plz + if test (string match -r '.\.|\/' $row) # this is a file or path + set file_targets $file_targets $row + else # grep the target and see if it's generated by a function or a true target + set found_in_file (grep "$row:" $filename) + if test -n "$found_in_file" + set static_targets $static_targets $row # true target + else + set generated_targets $generated_targets $row # generated by function + end + end + end + end + + string split " " $static_targets $file_targets $generated_targets + end + + function __mm_fzf_command -a 'filename' -a 'interactive' -a 'make_command' -a 'query' + if [ $interactive -eq 1 ] + set fzf_interactive "--bind \"enter:execute:$make_command {}; echo; echo 'Done'; sleep 1\"" + end + + if test -n "$query" + set fzf_query "--query=$query" + end + set fzf_opts "--read0 + $fzf_query + $fzf_interactive + --height 60% + --layout=reverse + --border + --preview-window='right:60%' + --preview='grep + --color=always -A 10 -B 1 \^{}: $filename; or echo -GENERATED TARGET-'" + + set -q FZF_TMUX; or set FZF_TMUX 0 + set -q FZF_TMUX_HEIGHT; or set FZF_TMUX_HEIGHT 60% + if [ $FZF_TMUX -eq 1 ] + echo "fzf-tmux -d$FZF_TMUX_HEIGHT $fzf_opts" + else + echo "fzf $fzf_opts" + end + end + + if __mm_dependencies + set custom_filename $filename + set filename (__mm_get_makefile_name $filename) + if test -z "$filename" + echo 'No makefile found in the current working directory' + else + set targets (__mm_get_targets $filename) + if test -n "$targets" + if test -n "$custom_filename" + set make_command "make -f $filename" + else + set make_command "make" + end + # Interactive? + if test -n "$interactive"; and test $interactive -eq 1 + string join0 -- $targets | eval (__mm_fzf_command $filename 1 $make_command $initial_query) + else + string join0 -- $targets | eval (__mm_fzf_command $filename 0 $make_command $initial_query) | read -lz result # print targets as a list, pipe them to fzf, put the chosen command in $result + set result (string trim -- $result) # Trim newlines and whitespace from the command + and commandline -- "$make_command $result" # Prepend the make command + commandline -f repaint # Repaint command line + end + else + echo "No targets found in $filename" + end + end + end + +end
\ No newline at end of file diff --git a/.config/fish/functions/prometeo-jenkins.fish b/.config/fish/functions/prometeo-jenkins.fish new file mode 100644 index 00000000..bcd4311b --- /dev/null +++ b/.config/fish/functions/prometeo-jenkins.fish @@ -0,0 +1,3 @@ +function prometeo-jenkins + ssh rgonzalez@172.31.1.184 +end diff --git a/.config/fish/functions/prometeo.fish b/.config/fish/functions/prometeo.fish index d59f5206..0dec9b9d 100644 --- a/.config/fish/functions/prometeo.fish +++ b/.config/fish/functions/prometeo.fish @@ -1,4 +1,4 @@ function prometeo - cd ~/code/prometeo/prometeo + cd ~/code/prometeo/banking_api source .venv/bin/activate.fish end diff --git a/.config/fish/functions/spark.fish b/.config/fish/functions/spark.fish new file mode 100644 index 00000000..0bbe6ff0 --- /dev/null +++ b/.config/fish/functions/spark.fish @@ -0,0 +1,33 @@ +function spark --description Sparklines + argparse --ignore-unknown --name=spark v/version h/help m/min= M/max= -- $argv || return + + if set --query _flag_version[1] + echo "spark, version 1.1.0" + else if set --query _flag_help[1] + echo "Usage: spark <numbers ...>" + echo " stdin | spark" + echo "Options:" + echo " --min=<number> Minimum range" + echo " --max=<number> Maximum range" + echo " -v or --version Print version" + echo " -h or --help Print this help message" + echo "Examples:" + echo " spark 1 1 2 5 14 42" + echo " seq 64 | sort --random-sort | spark" + else if set --query argv[1] + printf "%s\n" $argv | spark --min="$_flag_min" --max="$_flag_max" + else + command awk -v min="$_flag_min" -v max="$_flag_max" ' + { + m = min == "" ? m == "" ? $0 : m > $0 ? $0 : m : min + M = max == "" ? M == "" ? $0 : M < $0 ? $0 : M : max + nums[NR] = $0 + } + END { + n = split("▁ ▂ ▃ ▄ ▅ ▆ ▇ █", sparks, " ") - 1 + while (++i <= NR) + printf("%s", sparks[(M == m) ? 3 : sprintf("%.f", (1 + (nums[i] - m) * n / (M - m)))]) + } + ' && echo + end +end diff --git a/.config/fish/functions/tide.fish b/.config/fish/functions/tide.fish new file mode 100644 index 00000000..87fb8dc4 --- /dev/null +++ b/.config/fish/functions/tide.fish @@ -0,0 +1,27 @@ +function tide --description 'Manage your Tide prompt' + argparse --stop-nonopt v/version h/help -- $argv + + if set -q _flag_version + echo 'tide, version 5.4.0' + else if set -q _flag_help + _tide_help + else if functions --query _tide_sub_$argv[1] + _tide_sub_$argv[1] $argv[2..] + else + _tide_help + return 1 + end +end + +function _tide_help + printf %s\n \ + 'Usage: tide [options] subcommand [options]' \ + '' \ + 'Options:' \ + ' -v or --version print tide version number' \ + ' -h or --help print this help message' \ + '' \ + 'Subcommands:' \ + ' configure run interactive configuration wizard' \ + ' bug-report print info for use in bug reports' +end diff --git a/.config/fish/functions/tide/configure/choices/all/finish.fish b/.config/fish/functions/tide/configure/choices/all/finish.fish new file mode 100644 index 00000000..f60a1285 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/finish.fish @@ -0,0 +1,33 @@ +function finish + set_color red + _tide_title 'Overwrite tide config?' + set_color normal + + _tide_option y Yes + echo + + _tide_menu + switch $_tide_selected_option + case y + _tide_finish + command -q clear && clear + end +end + +function _tide_finish + set -e _tide_selected_option # Skip through all the _next_choices + + # Deal with prompt char/vi mode + contains character $fake_tide_left_prompt_items || set -p fake_tide_left_prompt_items vi_mode + + # Set the real variables + for fakeVar in (set --names | string match -r "^fake_tide.*") + set -U (string replace 'fake_' '' $fakeVar) $$fakeVar + end + + # Make sure old prompt won't display + set -e $_tide_prompt_var 2>/dev/null + + # Re-initialize the prompt + source (functions --details fish_prompt) +end diff --git a/.config/fish/functions/tide/configure/choices/all/icons.fish b/.config/fish/functions/tide/configure/choices/all/icons.fish new file mode 100644 index 00000000..e53bffa5 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/icons.fish @@ -0,0 +1,33 @@ +function icons + _tide_title Icons + + _tide_option 1 'Few icons' + _tide_display_prompt + + _tide_option 2 'Many icons' + _enable_icons + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + _disable_icons + end + _next_choice all/finish +end + +function _enable_icons + set -p fake_tide_left_prompt_items os + set -g fake_tide_pwd_icon + set -g fake_tide_pwd_icon_home + set -g fake_tide_cmd_duration_icon + set -g fake_tide_git_icon +end + +function _disable_icons + _tide_find_and_remove os fake_tide_left_prompt_items + set fake_tide_pwd_icon + set fake_tide_pwd_icon_home + set fake_tide_cmd_duration_icon + set fake_tide_git_icon +end diff --git a/.config/fish/functions/tide/configure/choices/all/prompt_colors.fish b/.config/fish/functions/tide/configure/choices/all/prompt_colors.fish new file mode 100644 index 00000000..90b1a9d9 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/prompt_colors.fish @@ -0,0 +1,26 @@ +function prompt_colors + _tide_title 'Prompt Colors' + + _tide_option 1 'True color' + _tide_display_prompt + + _tide_option 2 '16 colors' + _load_config "$_tide_configure_style"_16color + set -g _tide_16color true + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + _load_config "$_tide_configure_style" + set -e _tide_16color + switch $_tide_configure_style + case lean rainbow + _next_choice all/show_time + case classic + _next_choice classic/classic_prompt_color + end + case 2 + _next_choice all/show_time + end +end diff --git a/.config/fish/functions/tide/configure/choices/all/prompt_connection.fish b/.config/fish/functions/tide/configure/choices/all/prompt_connection.fish new file mode 100644 index 00000000..ae31ef36 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/prompt_connection.fish @@ -0,0 +1,28 @@ +function prompt_connection + _tide_title 'Prompt Connection' + + _tide_option 1 Disconnected + _tide_display_prompt fake_tide_prompt_icon_connection ' ' + + _tide_option 2 Dotted + _tide_display_prompt fake_tide_prompt_icon_connection '·' + + _tide_option 3 Solid + _tide_display_prompt fake_tide_prompt_icon_connection '─' + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_prompt_icon_connection ' ' + case 2 + set -g fake_tide_prompt_icon_connection '·' + case 3 + set -g fake_tide_prompt_icon_connection '─' + end + switch $_tide_configure_style + case lean + _next_choice all/prompt_connection_andor_frame_color + case classic rainbow + _next_choice powerline/powerline_prompt_frame + end +end diff --git a/.config/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish b/.config/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish new file mode 100644 index 00000000..b8803b40 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/prompt_connection_andor_frame_color.fish @@ -0,0 +1,36 @@ +function prompt_connection_andor_frame_color + if test "$_tide_16color" = true || + test "$fake_tide_left_prompt_frame_enabled" = false -a \ + "$fake_tide_right_prompt_frame_enabled" = false -a \ + "$fake_tide_prompt_icon_connection" = ' ' + _next_choice all/prompt_spacing + return 0 + end + + _tide_title "Connection & Frame Color" + + _tide_option 1 Lightest + _tide_display_prompt fake_tide_prompt_color_frame_and_connection 808080 + + _tide_option 2 Light + _tide_display_prompt fake_tide_prompt_color_frame_and_connection 6C6C6C + + _tide_option 3 Dark + _tide_display_prompt fake_tide_prompt_color_frame_and_connection 585858 + + _tide_option 4 Darkest + _tide_display_prompt fake_tide_prompt_color_frame_and_connection 444444 + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_prompt_color_frame_and_connection 808080 + case 2 + set -g fake_tide_prompt_color_frame_and_connection 6C6C6C + case 3 + set -g fake_tide_prompt_color_frame_and_connection 585858 + case 4 + set -g fake_tide_prompt_color_frame_and_connection 444444 + end + _next_choice all/prompt_spacing +end diff --git a/.config/fish/functions/tide/configure/choices/all/prompt_spacing.fish b/.config/fish/functions/tide/configure/choices/all/prompt_spacing.fish new file mode 100644 index 00000000..a5bb98bc --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/prompt_spacing.fish @@ -0,0 +1,21 @@ +function prompt_spacing + _tide_title 'Prompt Spacing' + + _tide_option 1 Compact + _tide_display_prompt + printf \e\[1A # Move cursor up 1 row + _tide_display_prompt + + _tide_option 2 Sparse + _tide_display_prompt + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_prompt_add_newline_before false + case 2 + set -g fake_tide_prompt_add_newline_before true + end + _next_choice all/icons +end diff --git a/.config/fish/functions/tide/configure/choices/all/show_time.fish b/.config/fish/functions/tide/configure/choices/all/show_time.fish new file mode 100644 index 00000000..8cf18436 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/show_time.fish @@ -0,0 +1,31 @@ +function show_time + _tide_title 'Show current time?' + + _tide_option 1 No + _tide_display_prompt + + set -a fake_tide_right_prompt_items time + + _tide_option 2 '24-hour format' + _tide_display_prompt fake_tide_time_format %T + + _tide_option 3 '12-hour format' + _tide_display_prompt fake_tide_time_format '%r' + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_time_format '' + set -e fake_tide_right_prompt_items[-1] + case 2 + set -g fake_tide_time_format %T + case 3 + set -g fake_tide_time_format '%r' + end + switch $_tide_configure_style + case lean + _next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_height + case classic rainbow + _next_choice "$_tide_configure_style"/"$_tide_configure_style"_prompt_separators + end +end diff --git a/.config/fish/functions/tide/configure/choices/all/style.fish b/.config/fish/functions/tide/configure/choices/all/style.fish new file mode 100644 index 00000000..ae52bc52 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/all/style.fish @@ -0,0 +1,57 @@ +function style + _tide_title 'Prompt Style' + + _tide_option 1 Lean + _load_config lean + _tide_display_prompt + + _tide_option 2 Classic + _load_config classic + _tide_display_prompt + + _tide_option 3 Rainbow + _load_config rainbow + _tide_display_prompt + + _tide_style_menu + switch $_tide_selected_option + case 1 + _load_config lean + set -g _tide_configure_style lean + case 2 + _load_config classic + set -g _tide_configure_style classic + case 3 + _load_config rainbow + set -g _tide_configure_style rainbow + end + _next_choice all/prompt_colors +end + +function _load_config -a name + string replace -r '^' 'set -g fake_' <(status dirname)/../../configs/$name.fish | source +end + +function _tide_style_menu # Exactly like _tide_menu except that it doesn't have (r) option + set -l list_with_slashes (string join '/' $_tide_option_list) + + echo '(q) Quit and do nothing'\n + + while true + set_color -o + read --nchars 1 --prompt-str "Choice [$list_with_slashes/q] " input + set_color normal + + switch $input + case q + set -e _tide_selected_option # Skip through all the _next_choices + set -e _tide_option_list + command -q clear && clear + break + case $_tide_option_list + set -e _tide_option_list + set -g _tide_selected_option $input + break + end + end +end diff --git a/.config/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish b/.config/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish new file mode 100644 index 00000000..2189f363 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/classic/classic_prompt_color.fish @@ -0,0 +1,38 @@ +function classic_prompt_color + _tide_title 'Prompt Color' + + _tide_option 1 Lightest + _set_all_items_bg_color 585858 + _tide_display_prompt + + _tide_option 2 Light + _set_all_items_bg_color 444444 + _tide_display_prompt + + _tide_option 3 Dark + _set_all_items_bg_color 303030 + _tide_display_prompt + + _tide_option 4 Darkest + _set_all_items_bg_color 1C1C1C + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + _set_all_items_bg_color 585858 + case 2 + _set_all_items_bg_color 444444 + case 3 + _set_all_items_bg_color 303030 + case 4 + _set_all_items_bg_color 1C1C1C + end + _next_choice all/show_time +end + +function _set_all_items_bg_color -a color + for var in (set --names | string match -r "fake_.*_bg_color.*") + set $var $color + end +end diff --git a/.config/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish b/.config/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish new file mode 100644 index 00000000..17b88e46 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/classic/classic_prompt_separators.fish @@ -0,0 +1,40 @@ +function classic_prompt_separators + _tide_title 'Prompt Separators' + + _tide_option 1 Angled + set -g fake_tide_left_prompt_separator_same_color + set -g fake_tide_right_prompt_separator_same_color + _tide_display_prompt + + _tide_option 2 Vertical + set -g fake_tide_left_prompt_separator_same_color '│' + set -g fake_tide_right_prompt_separator_same_color '│' + _tide_display_prompt + + _tide_option 3 Slanted + set -g fake_tide_left_prompt_separator_same_color '╱' + set -g fake_tide_right_prompt_separator_same_color '╱' + _tide_display_prompt + + _tide_option 4 Round + set -g fake_tide_left_prompt_separator_same_color '' + set -g fake_tide_right_prompt_separator_same_color '' + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_left_prompt_separator_same_color + set -g fake_tide_right_prompt_separator_same_color + case 2 + set -g fake_tide_left_prompt_separator_same_color '│' + set -g fake_tide_right_prompt_separator_same_color '│' + case 3 + set -g fake_tide_left_prompt_separator_same_color '╱' + set -g fake_tide_right_prompt_separator_same_color '╱' + case 4 + set -g fake_tide_left_prompt_separator_same_color '' + set -g fake_tide_right_prompt_separator_same_color '' + end + _next_choice powerline/powerline_prompt_heads +end diff --git a/.config/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish b/.config/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish new file mode 100644 index 00000000..4db04a80 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/lean/lean_prompt_height.fish @@ -0,0 +1,26 @@ +function lean_prompt_height + _tide_title 'Prompt Height' + + _tide_option 1 'One line' + _tide_find_and_remove newline fake_tide_left_prompt_items + set -g fake_tide_left_prompt_suffix '' + _tide_display_prompt + + _tide_option 2 'Two lines' + set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1] + set -g fake_tide_left_prompt_suffix ' ' + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + _tide_find_and_remove newline fake_tide_left_prompt_items + set fake_tide_left_prompt_suffix '' + _next_choice all/prompt_connection_andor_frame_color + case 2 + _tide_find_and_remove newline fake_tide_left_prompt_items + set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items[1..-2] newline $fake_tide_left_prompt_items[-1] + set -g fake_tide_left_prompt_suffix ' ' + _next_choice all/prompt_connection + end +end diff --git a/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_frame.fish b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_frame.fish new file mode 100644 index 00000000..19b35884 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_frame.fish @@ -0,0 +1,46 @@ +function powerline_prompt_frame + _tide_title 'Prompt Frame' + + _tide_option 1 'No frame' + set fake_tide_left_prompt_frame_enabled false + set fake_tide_right_prompt_frame_enabled false + set -a fake_tide_left_prompt_items character + _tide_display_prompt + set -e fake_tide_left_prompt_items[-1] + + _tide_option 2 Left + set fake_tide_left_prompt_frame_enabled true + set fake_tide_right_prompt_frame_enabled false + _tide_display_prompt + + _tide_option 3 Right + set fake_tide_left_prompt_frame_enabled false + set fake_tide_right_prompt_frame_enabled true + set -a fake_tide_left_prompt_items character + _tide_display_prompt + set -e fake_tide_left_prompt_items[-1] + + _tide_option 4 Full + set fake_tide_left_prompt_frame_enabled true + set fake_tide_right_prompt_frame_enabled true + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + set fake_tide_left_prompt_frame_enabled false + set fake_tide_right_prompt_frame_enabled false + set -a fake_tide_left_prompt_items character + case 2 + set fake_tide_left_prompt_frame_enabled true + set fake_tide_right_prompt_frame_enabled false + case 3 + set fake_tide_left_prompt_frame_enabled false + set fake_tide_right_prompt_frame_enabled true + set -a fake_tide_left_prompt_items character + case 4 + set fake_tide_left_prompt_frame_enabled true + set fake_tide_right_prompt_frame_enabled true + end + _next_choice all/prompt_connection_andor_frame_color +end diff --git a/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish new file mode 100644 index 00000000..ac187c9e --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_heads.fish @@ -0,0 +1,40 @@ +function powerline_prompt_heads + _tide_title 'Prompt Heads' + + _tide_option 1 Sharp + set -g fake_tide_left_prompt_suffix + set -g fake_tide_right_prompt_prefix + _tide_display_prompt + + _tide_option 2 Blurred + set -g fake_tide_left_prompt_suffix '▓▒░' + set -g fake_tide_right_prompt_prefix '░▒▓' + _tide_display_prompt + + _tide_option 3 Slanted + set -g fake_tide_left_prompt_suffix '' + set -g fake_tide_right_prompt_prefix '' + _tide_display_prompt + + _tide_option 4 Round + set -g fake_tide_left_prompt_suffix '' + set -g fake_tide_right_prompt_prefix '' + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_left_prompt_suffix + set -g fake_tide_right_prompt_prefix + case 2 + set -g fake_tide_left_prompt_suffix '▓▒░' + set -g fake_tide_right_prompt_prefix '░▒▓' + case 3 + set -g fake_tide_left_prompt_suffix '' + set -g fake_tide_right_prompt_prefix '' + case 4 + set -g fake_tide_left_prompt_suffix '' + set -g fake_tide_right_prompt_prefix '' + end + _next_choice powerline/powerline_prompt_tails +end diff --git a/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_height.fish b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_height.fish new file mode 100644 index 00000000..83fef054 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_height.fish @@ -0,0 +1,30 @@ +function powerline_prompt_height + _tide_title 'Prompt Height' + + _tide_option 1 'One line' + _tide_find_and_remove newline fake_tide_left_prompt_items + set fake_tide_left_prompt_frame_enabled false + set fake_tide_right_prompt_frame_enabled false + _tide_display_prompt + + _tide_option 2 'Two lines' + set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items newline + set fake_tide_left_prompt_frame_enabled true + set fake_tide_right_prompt_frame_enabled true + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + _tide_find_and_remove newline fake_tide_left_prompt_items + set fake_tide_left_prompt_frame_enabled false + set fake_tide_right_prompt_frame_enabled false + _next_choice all/prompt_connection_andor_frame_color + case 2 + _tide_find_and_remove newline fake_tide_left_prompt_items + set -g fake_tide_left_prompt_items $fake_tide_left_prompt_items newline + set fake_tide_left_prompt_frame_enabled true + set fake_tide_right_prompt_frame_enabled true + _next_choice all/prompt_connection + end +end diff --git a/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish new file mode 100644 index 00000000..02f4609d --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/powerline/powerline_prompt_tails.fish @@ -0,0 +1,48 @@ +function powerline_prompt_tails + _tide_title 'Prompt Tails' + + _tide_option 1 Flat + set -g fake_tide_left_prompt_prefix '' + set -g fake_tide_right_prompt_suffix '' + _tide_display_prompt + + _tide_option 2 Blurred + set -g fake_tide_left_prompt_prefix '░▒▓' + set -g fake_tide_right_prompt_suffix '▓▒░' + _tide_display_prompt + + _tide_option 3 Sharp + set -g fake_tide_left_prompt_prefix + set -g fake_tide_right_prompt_suffix + _tide_display_prompt + + _tide_option 4 Slanted + set -g fake_tide_left_prompt_prefix '' + set -g fake_tide_right_prompt_suffix '' + _tide_display_prompt + + _tide_option 5 Round + set -g fake_tide_left_prompt_prefix '' + set -g fake_tide_right_prompt_suffix '' + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_left_prompt_prefix '' + set -g fake_tide_right_prompt_suffix '' + case 2 + set -g fake_tide_left_prompt_prefix '░▒▓' + set -g fake_tide_right_prompt_suffix '▓▒░' + case 3 + set -g fake_tide_left_prompt_prefix + set -g fake_tide_right_prompt_suffix + case 4 + set -g fake_tide_left_prompt_prefix '' + set -g fake_tide_right_prompt_suffix '' + case 5 + set -g fake_tide_left_prompt_prefix '' + set -g fake_tide_right_prompt_suffix '' + end + _next_choice powerline/powerline_prompt_height +end diff --git a/.config/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish b/.config/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish new file mode 100644 index 00000000..29f6ccc8 --- /dev/null +++ b/.config/fish/functions/tide/configure/choices/rainbow/rainbow_prompt_separators.fish @@ -0,0 +1,40 @@ +function rainbow_prompt_separators + _tide_title 'Prompt Separators' + + _tide_option 1 Angled + set -g fake_tide_left_prompt_separator_diff_color + set -g fake_tide_right_prompt_separator_diff_color + _tide_display_prompt + + _tide_option 2 Vertical + set -g fake_tide_left_prompt_separator_diff_color '' + set -g fake_tide_right_prompt_separator_diff_color '' + _tide_display_prompt + + _tide_option 3 Slanted + set -g fake_tide_left_prompt_separator_diff_color '' + set -g fake_tide_right_prompt_separator_diff_color '' + _tide_display_prompt + + _tide_option 4 Round + set -g fake_tide_left_prompt_separator_diff_color '' + set -g fake_tide_right_prompt_separator_diff_color '' + _tide_display_prompt + + _tide_menu + switch $_tide_selected_option + case 1 + set -g fake_tide_left_prompt_separator_diff_color + set -g fake_tide_right_prompt_separator_diff_color + case 2 + set -g fake_tide_left_prompt_separator_diff_color '' + set -g fake_tide_right_prompt_separator_diff_color '' + case 3 + set -g fake_tide_left_prompt_separator_diff_color '' + set -g fake_tide_right_prompt_separator_diff_color '' + case 4 + set -g fake_tide_left_prompt_separator_diff_color '' + set -g fake_tide_right_prompt_separator_diff_color '' + end + _next_choice powerline/powerline_prompt_heads +end diff --git a/.config/fish/functions/tide/configure/configs/classic.fish b/.config/fish/functions/tide/configure/configs/classic.fish new file mode 100644 index 00000000..be106d85 --- /dev/null +++ b/.config/fish/functions/tide/configure/configs/classic.fish @@ -0,0 +1,129 @@ +tide_aws_bg_color 444444 +tide_aws_color FF9900 +tide_aws_icon +tide_character_color $_tide_color_green +tide_character_color_failure FF0000 +tide_character_icon ❯ +tide_character_vi_icon_default ❮ +tide_character_vi_icon_replace ▶ +tide_character_vi_icon_visual V +tide_chruby_bg_color 444444 +tide_chruby_color B31209 +tide_chruby_icon +tide_cmd_duration_bg_color 444444 +tide_cmd_duration_color 87875F +tide_cmd_duration_decimals 0 +tide_cmd_duration_icon +tide_cmd_duration_threshold 3000 +tide_context_always_display false +tide_context_bg_color 444444 +tide_context_color_default D7AF87 +tide_context_color_root $_tide_color_gold +tide_context_color_ssh D7AF87 +tide_docker_bg_color 444444 +tide_docker_color 2496ED +tide_docker_default_contexts default colima +tide_docker_icon +tide_git_bg_color 444444 +tide_git_bg_color_unstable 444444 +tide_git_bg_color_urgent 444444 +tide_git_color_branch $_tide_color_green +tide_git_color_conflicted FF0000 +tide_git_color_dirty $_tide_color_gold +tide_git_color_operation FF0000 +tide_git_color_staged $_tide_color_gold +tide_git_color_stash $_tide_color_green +tide_git_color_untracked $_tide_color_light_blue +tide_git_color_upstream $_tide_color_green +tide_git_icon +tide_git_truncation_length 24 +tide_go_bg_color 444444 +tide_go_color 00ACD7 +tide_go_icon +tide_java_bg_color 444444 +tide_java_color ED8B00 +tide_java_icon +tide_jobs_bg_color 444444 +tide_jobs_color $_tide_color_dark_green +tide_jobs_icon +tide_kubectl_bg_color 444444 +tide_kubectl_color 326CE5 +tide_kubectl_icon ⎈ +tide_left_prompt_frame_enabled true +tide_left_prompt_items pwd git newline +tide_left_prompt_prefix '' +tide_left_prompt_separator_diff_color +tide_left_prompt_separator_same_color +tide_left_prompt_suffix +tide_nix_shell_bg_color 444444 +tide_nix_shell_color 7EBAE4 +tide_nix_shell_icon +tide_node_bg_color 444444 +tide_node_color 44883E +tide_node_icon ⬢ +tide_os_bg_color 444444 +tide_os_color EEEEEE +tide_os_icon $os_branding_icon +tide_php_bg_color 444444 +tide_php_color 617CBE +tide_php_icon +tide_private_mode_bg_color 444444 +tide_private_mode_color FFFFFF +tide_private_mode_icon +tide_prompt_add_newline_before true +tide_prompt_color_frame_and_connection 6C6C6C +tide_prompt_color_separator_same_color 949494 +tide_prompt_icon_connection ' ' +tide_prompt_min_cols 34 +tide_prompt_pad_items true +tide_pwd_bg_color 444444 +tide_pwd_color_anchors $_tide_color_light_blue +tide_pwd_color_dirs $_tide_color_dark_blue +tide_pwd_color_truncated_dirs 8787AF +tide_pwd_icon +tide_pwd_icon_home +tide_pwd_icon_unwritable +tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json +tide_right_prompt_frame_enabled true +tide_right_prompt_items status cmd_duration context jobs node virtual_env rustc java php chruby go kubectl toolbox terraform aws nix_shell +tide_right_prompt_prefix +tide_right_prompt_separator_diff_color +tide_right_prompt_separator_same_color +tide_right_prompt_suffix '' +tide_rustc_bg_color 444444 +tide_rustc_color F74C00 +tide_rustc_icon +tide_shlvl_bg_color 444444 +tide_shlvl_color d78700 +tide_shlvl_icon +tide_shlvl_threshold 1 +tide_status_bg_color 444444 +tide_status_bg_color_failure 444444 +tide_status_color $_tide_color_dark_green +tide_status_color_failure D70000 +tide_status_icon ✔ +tide_status_icon_failure ✘ +tide_terraform_bg_color 444444 +tide_terraform_color 844FBA +tide_terraform_icon +tide_time_bg_color 444444 +tide_time_color 5F8787 +tide_time_format %T +tide_toolbox_bg_color 444444 +tide_toolbox_color 613583 +tide_toolbox_icon ⬢ +tide_vi_mode_bg_color_default 444444 +tide_vi_mode_bg_color_insert 444444 +tide_vi_mode_bg_color_replace 444444 +tide_vi_mode_bg_color_visual 444444 +tide_vi_mode_color_default 949494 +tide_vi_mode_color_insert 87AFAF +tide_vi_mode_color_replace 87AF87 +tide_vi_mode_color_visual FF8700 +tide_vi_mode_icon_default D +tide_vi_mode_icon_insert I +tide_vi_mode_icon_replace R +tide_vi_mode_icon_visual V +tide_virtual_env_bg_color 444444 +tide_virtual_env_color 00AFAF +tide_virtual_env_icon diff --git a/.config/fish/functions/tide/configure/configs/classic_16color.fish b/.config/fish/functions/tide/configure/configs/classic_16color.fish new file mode 100644 index 00000000..3a44cefe --- /dev/null +++ b/.config/fish/functions/tide/configure/configs/classic_16color.fish @@ -0,0 +1,73 @@ +tide_aws_bg_color black +tide_aws_color yellow +tide_character_color brgreen +tide_character_color_failure brred +tide_chruby_bg_color black +tide_chruby_color red +tide_cmd_duration_bg_color black +tide_cmd_duration_color brblack +tide_context_bg_color black +tide_context_color_default yellow +tide_context_color_root bryellow +tide_context_color_ssh yellow +tide_docker_bg_color black +tide_docker_color blue +tide_git_bg_color black +tide_git_bg_color_unstable black +tide_git_bg_color_urgent black +tide_git_color_branch brgreen +tide_git_color_conflicted brred +tide_git_color_dirty bryellow +tide_git_color_operation brred +tide_git_color_staged bryellow +tide_git_color_stash brgreen +tide_git_color_untracked brblue +tide_git_color_upstream brgreen +tide_go_bg_color black +tide_go_color brcyan +tide_java_bg_color black +tide_java_color yellow +tide_jobs_bg_color black +tide_jobs_color green +tide_kubectl_bg_color black +tide_kubectl_color blue +tide_nix_shell_bg_color black +tide_nix_shell_color brblue +tide_node_bg_color black +tide_node_color green +tide_os_bg_color black +tide_os_color brwhite +tide_php_bg_color black +tide_php_color blue +tide_private_mode_bg_color black +tide_private_mode_color brwhite +tide_prompt_color_frame_and_connection brblack +tide_prompt_color_separator_same_color brblack +tide_pwd_bg_color black +tide_pwd_color_anchors brcyan +tide_pwd_color_dirs cyan +tide_pwd_color_truncated_dirs magenta +tide_rustc_bg_color black +tide_rustc_color red +tide_shlvl_bg_color black +tide_shlvl_color yellow +tide_status_bg_color black +tide_status_bg_color_failure black +tide_status_color green +tide_status_color_failure red +tide_terraform_bg_color black +tide_terraform_color magenta +tide_time_bg_color black +tide_time_color brblack +tide_toolbox_bg_color black +tide_toolbox_color magenta +tide_vi_mode_bg_color_default black +tide_vi_mode_bg_color_insert black +tide_vi_mode_bg_color_replace black +tide_vi_mode_bg_color_visual black +tide_vi_mode_color_default white +tide_vi_mode_color_insert cyan +tide_vi_mode_color_replace green +tide_vi_mode_color_visual yellow +tide_virtual_env_bg_color black +tide_virtual_env_color cyan diff --git a/.config/fish/functions/tide/configure/configs/lean.fish b/.config/fish/functions/tide/configure/configs/lean.fish new file mode 100644 index 00000000..7381198c --- /dev/null +++ b/.config/fish/functions/tide/configure/configs/lean.fish @@ -0,0 +1,129 @@ +tide_aws_bg_color normal +tide_aws_color FF9900 +tide_aws_icon +tide_character_color $_tide_color_green +tide_character_color_failure FF0000 +tide_character_icon ❯ +tide_character_vi_icon_default ❮ +tide_character_vi_icon_replace ▶ +tide_character_vi_icon_visual V +tide_chruby_bg_color normal +tide_chruby_color B31209 +tide_chruby_icon +tide_cmd_duration_bg_color normal +tide_cmd_duration_color 87875F +tide_cmd_duration_decimals 0 +tide_cmd_duration_icon +tide_cmd_duration_threshold 3000 +tide_context_always_display false +tide_context_bg_color normal +tide_context_color_default D7AF87 +tide_context_color_root $_tide_color_gold +tide_context_color_ssh D7AF87 +tide_docker_bg_color normal +tide_docker_color 2496ED +tide_docker_default_contexts default colima +tide_docker_icon +tide_git_bg_color normal +tide_git_bg_color_unstable normal +tide_git_bg_color_urgent normal +tide_git_color_branch $_tide_color_green +tide_git_color_conflicted FF0000 +tide_git_color_dirty $_tide_color_gold +tide_git_color_operation FF0000 +tide_git_color_staged $_tide_color_gold +tide_git_color_stash $_tide_color_green +tide_git_color_untracked $_tide_color_light_blue +tide_git_color_upstream $_tide_color_green +tide_git_icon +tide_git_truncation_length 24 +tide_go_bg_color normal +tide_go_color 00ACD7 +tide_go_icon +tide_java_bg_color normal +tide_java_color ED8B00 +tide_java_icon +tide_jobs_bg_color normal +tide_jobs_color $_tide_color_dark_green +tide_jobs_icon +tide_kubectl_bg_color normal +tide_kubectl_color 326CE5 +tide_kubectl_icon ⎈ +tide_left_prompt_frame_enabled false +tide_left_prompt_items pwd git newline character +tide_left_prompt_prefix '' +tide_left_prompt_separator_diff_color ' ' +tide_left_prompt_separator_same_color ' ' +tide_left_prompt_suffix ' ' +tide_nix_shell_bg_color normal +tide_nix_shell_color 7EBAE4 +tide_nix_shell_icon +tide_node_bg_color normal +tide_node_color 44883E +tide_node_icon ⬢ +tide_os_bg_color normal +tide_os_color normal +tide_os_icon $os_branding_icon +tide_php_bg_color normal +tide_php_color 617CBE +tide_php_icon +tide_private_mode_bg_color normal +tide_private_mode_color FFFFFF +tide_private_mode_icon +tide_prompt_add_newline_before true +tide_prompt_color_frame_and_connection 6C6C6C +tide_prompt_color_separator_same_color 949494 +tide_prompt_icon_connection ' ' +tide_prompt_min_cols 34 +tide_prompt_pad_items false +tide_pwd_bg_color normal +tide_pwd_color_anchors $_tide_color_light_blue +tide_pwd_color_dirs $_tide_color_dark_blue +tide_pwd_color_truncated_dirs 8787AF +tide_pwd_icon +tide_pwd_icon_home +tide_pwd_icon_unwritable +tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json +tide_right_prompt_frame_enabled false +tide_right_prompt_items status cmd_duration context jobs node virtual_env rustc java php chruby go kubectl toolbox terraform aws nix_shell +tide_right_prompt_prefix ' ' +tide_right_prompt_separator_diff_color ' ' +tide_right_prompt_separator_same_color ' ' +tide_right_prompt_suffix '' +tide_rustc_bg_color normal +tide_rustc_color F74C00 +tide_rustc_icon +tide_shlvl_bg_color normal +tide_shlvl_color d78700 +tide_shlvl_icon +tide_shlvl_threshold 1 +tide_status_bg_color normal +tide_status_bg_color_failure normal +tide_status_color $_tide_color_dark_green +tide_status_color_failure D70000 +tide_status_icon ✔ +tide_status_icon_failure ✘ +tide_terraform_bg_color normal +tide_terraform_color 844FBA +tide_terraform_icon +tide_time_bg_color normal +tide_time_color 5F8787 +tide_time_format %T +tide_toolbox_bg_color normal +tide_toolbox_color 613583 +tide_toolbox_icon ⬢ +tide_vi_mode_bg_color_default normal +tide_vi_mode_bg_color_insert normal +tide_vi_mode_bg_color_replace normal +tide_vi_mode_bg_color_visual normal +tide_vi_mode_color_default 949494 +tide_vi_mode_color_insert 87AFAF +tide_vi_mode_color_replace 87AF87 +tide_vi_mode_color_visual FF8700 +tide_vi_mode_icon_default D +tide_vi_mode_icon_insert I +tide_vi_mode_icon_replace R +tide_vi_mode_icon_visual V +tide_virtual_env_bg_color normal +tide_virtual_env_color 00AFAF +tide_virtual_env_icon diff --git a/.config/fish/functions/tide/configure/configs/lean_16color.fish b/.config/fish/functions/tide/configure/configs/lean_16color.fish new file mode 100644 index 00000000..a836852b --- /dev/null +++ b/.config/fish/functions/tide/configure/configs/lean_16color.fish @@ -0,0 +1,73 @@ +tide_aws_bg_color normal +tide_aws_color yellow +tide_character_color brgreen +tide_character_color_failure brred +tide_chruby_bg_color normal +tide_chruby_color red +tide_cmd_duration_bg_color normal +tide_cmd_duration_color brblack +tide_context_bg_color normal +tide_context_color_default yellow +tide_context_color_root bryellow +tide_context_color_ssh yellow +tide_docker_bg_color normal +tide_docker_color blue +tide_git_bg_color normal +tide_git_bg_color_unstable normal +tide_git_bg_color_urgent normal +tide_git_color_branch brgreen +tide_git_color_conflicted brred +tide_git_color_dirty bryellow +tide_git_color_operation brred +tide_git_color_staged bryellow +tide_git_color_stash brgreen +tide_git_color_untracked brblue +tide_git_color_upstream brgreen +tide_go_bg_color normal +tide_go_color brcyan +tide_java_bg_color normal +tide_java_color yellow +tide_jobs_bg_color normal +tide_jobs_color green +tide_kubectl_bg_color normal +tide_kubectl_color blue +tide_nix_shell_bg_color normal +tide_nix_shell_color brblue +tide_node_bg_color normal +tide_node_color green +tide_os_bg_color normal +tide_os_color brwhite +tide_php_bg_color normal +tide_php_color blue +tide_private_mode_bg_color normal +tide_private_mode_color brwhite +tide_prompt_color_frame_and_connection brblack +tide_prompt_color_separator_same_color brblack +tide_pwd_bg_color normal +tide_pwd_color_anchors brcyan +tide_pwd_color_dirs cyan +tide_pwd_color_truncated_dirs magenta +tide_rustc_bg_color normal +tide_rustc_color red +tide_shlvl_bg_color normal +tide_shlvl_color yellow +tide_status_bg_color normal +tide_status_bg_color_failure normal +tide_status_color green +tide_status_color_failure red +tide_terraform_bg_color normal +tide_terraform_color magenta +tide_time_bg_color normal +tide_time_color brblack +tide_toolbox_bg_color normal +tide_toolbox_color magenta +tide_vi_mode_bg_color_default normal +tide_vi_mode_bg_color_insert normal +tide_vi_mode_bg_color_replace normal +tide_vi_mode_bg_color_visual normal +tide_vi_mode_color_default white +tide_vi_mode_color_insert cyan +tide_vi_mode_color_replace green +tide_vi_mode_color_visual yellow +tide_virtual_env_bg_color normal +tide_virtual_env_color cyan diff --git a/.config/fish/functions/tide/configure/configs/rainbow.fish b/.config/fish/functions/tide/configure/configs/rainbow.fish new file mode 100644 index 00000000..84f15adb --- /dev/null +++ b/.config/fish/functions/tide/configure/configs/rainbow.fish @@ -0,0 +1,129 @@ +tide_aws_bg_color FF9900 +tide_aws_color 232F3E +tide_aws_icon +tide_character_color $_tide_color_green +tide_character_color_failure FF0000 +tide_character_icon ❯ +tide_character_vi_icon_default ❮ +tide_character_vi_icon_replace ▶ +tide_character_vi_icon_visual V +tide_chruby_bg_color B31209 +tide_chruby_color 000000 +tide_chruby_icon +tide_cmd_duration_bg_color C4A000 +tide_cmd_duration_color 000000 +tide_cmd_duration_decimals 0 +tide_cmd_duration_icon +tide_cmd_duration_threshold 3000 +tide_context_always_display false +tide_context_bg_color 444444 +tide_context_color_default D7AF87 +tide_context_color_root $_tide_color_gold +tide_context_color_ssh D7AF87 +tide_docker_bg_color 2496ED +tide_docker_color 000000 +tide_docker_default_contexts default colima +tide_docker_icon +tide_git_bg_color 4E9A06 +tide_git_bg_color_unstable C4A000 +tide_git_bg_color_urgent CC0000 +tide_git_color_branch 000000 +tide_git_color_conflicted 000000 +tide_git_color_dirty 000000 +tide_git_color_operation 000000 +tide_git_color_staged 000000 +tide_git_color_stash 000000 +tide_git_color_untracked 000000 +tide_git_color_upstream 000000 +tide_git_icon +tide_git_truncation_length 24 +tide_go_bg_color 00ACD7 +tide_go_color 000000 +tide_go_icon +tide_java_bg_color ED8B00 +tide_java_color 000000 +tide_java_icon +tide_jobs_bg_color 444444 +tide_jobs_color 4E9A06 +tide_jobs_icon +tide_kubectl_bg_color 326CE5 +tide_kubectl_color 000000 +tide_kubectl_icon ⎈ +tide_left_prompt_frame_enabled true +tide_left_prompt_items pwd git newline +tide_left_prompt_prefix '' +tide_left_prompt_separator_diff_color +tide_left_prompt_separator_same_color +tide_left_prompt_suffix +tide_nix_shell_bg_color 7EBAE4 +tide_nix_shell_color 000000 +tide_nix_shell_icon +tide_node_bg_color 44883E +tide_node_color 000000 +tide_node_icon ⬢ +tide_os_bg_color $os_branding_bg_color +tide_os_color $os_branding_color +tide_os_icon $os_branding_icon +tide_php_bg_color 617CBE +tide_php_color 000000 +tide_php_icon +tide_private_mode_bg_color F1F3F4 +tide_private_mode_color 000000 +tide_private_mode_icon +tide_prompt_add_newline_before true +tide_prompt_color_frame_and_connection 6C6C6C +tide_prompt_color_separator_same_color 949494 +tide_prompt_icon_connection ' ' +tide_prompt_min_cols 34 +tide_prompt_pad_items true +tide_pwd_bg_color 3465A4 +tide_pwd_color_anchors E4E4E4 +tide_pwd_color_dirs E4E4E4 +tide_pwd_color_truncated_dirs BCBCBC +tide_pwd_icon +tide_pwd_icon_home +tide_pwd_icon_unwritable +tide_pwd_markers .bzr .citc .git .hg .node-version .python-version .ruby-version .shorten_folder_marker .svn .terraform Cargo.toml composer.json CVS go.mod package.json +tide_right_prompt_frame_enabled true +tide_right_prompt_items status cmd_duration context jobs node virtual_env rustc java php chruby go kubectl toolbox terraform aws nix_shell +tide_right_prompt_prefix +tide_right_prompt_separator_diff_color +tide_right_prompt_separator_same_color +tide_right_prompt_suffix '' +tide_rustc_bg_color F74C00 +tide_rustc_color 000000 +tide_rustc_icon +tide_shlvl_bg_color 808000 +tide_shlvl_color 000000 +tide_shlvl_icon +tide_shlvl_threshold 1 +tide_status_bg_color 2E3436 +tide_status_bg_color_failure CC0000 +tide_status_color 4E9A06 +tide_status_color_failure FFFF00 +tide_status_icon ✔ +tide_status_icon_failure ✘ +tide_terraform_bg_color 800080 +tide_terraform_color 000000 +tide_terraform_icon +tide_time_bg_color D3D7CF +tide_time_color 000000 +tide_time_format %T +tide_toolbox_bg_color 613583 +tide_toolbox_color 000000 +tide_toolbox_icon ⬢ +tide_vi_mode_bg_color_default 949494 +tide_vi_mode_bg_color_insert 87AFAF +tide_vi_mode_bg_color_replace 87AF87 +tide_vi_mode_bg_color_visual FF8700 +tide_vi_mode_color_default 000000 +tide_vi_mode_color_insert 000000 +tide_vi_mode_color_replace 000000 +tide_vi_mode_color_visual 000000 +tide_vi_mode_icon_default D +tide_vi_mode_icon_insert I +tide_vi_mode_icon_replace R +tide_vi_mode_icon_visual V +tide_virtual_env_bg_color 444444 +tide_virtual_env_color 00AFAF +tide_virtual_env_icon diff --git a/.config/fish/functions/tide/configure/configs/rainbow_16color.fish b/.config/fish/functions/tide/configure/configs/rainbow_16color.fish new file mode 100644 index 00000000..0a660949 --- /dev/null +++ b/.config/fish/functions/tide/configure/configs/rainbow_16color.fish @@ -0,0 +1,77 @@ +tide_aws_bg_color yellow +tide_aws_color brblack +tide_character_color brgreen +tide_character_color_failure brred +tide_chruby_bg_color red +tide_chruby_color black +tide_cmd_duration_bg_color yellow +tide_cmd_duration_color black +tide_context_bg_color brblack +tide_context_color_default yellow +tide_context_color_root yellow +tide_context_color_ssh yellow +tide_docker_bg_color blue +tide_docker_color black +tide_git_bg_color green +tide_git_bg_color_unstable yellow +tide_git_bg_color_urgent red +tide_git_color_branch black +tide_git_color_conflicted black +tide_git_color_dirty black +tide_git_color_operation black +tide_git_color_staged black +tide_git_color_stash black +tide_git_color_untracked black +tide_git_color_upstream black +tide_go_bg_color brcyan +tide_go_color black +tide_java_bg_color yellow +tide_java_color black +tide_jobs_bg_color brblack +tide_jobs_color green +tide_kubectl_bg_color blue +tide_kubectl_color black +tide_nix_shell_bg_color brblue +tide_nix_shell_color black +tide_node_bg_color green +tide_node_color black +tide_os_bg_color white +tide_os_color black +tide_php_bg_color blue +tide_php_color black +tide_private_mode_bg_color brwhite +tide_private_mode_color black +tide_prompt_color_frame_and_connection brblack +tide_prompt_color_separator_same_color brblack +tide_pwd_bg_color blue +tide_pwd_color_anchors brwhite +tide_pwd_color_dirs brwhite +tide_pwd_color_truncated_dirs white +tide_rustc_bg_color red +tide_rustc_color black +tide_shlvl_bg_color yellow +tide_shlvl_color black +tide_status_bg_color black +tide_status_bg_color_failure red +tide_status_color green +tide_status_color_failure bryellow +tide_terraform_bg_color magenta +tide_terraform_color black +tide_time_bg_color white +tide_time_color black +tide_toolbox_bg_color magenta +tide_toolbox_color black +tide_vi_mode_bg_color_default white +tide_vi_mode_bg_color_insert cyan +tide_vi_mode_bg_color_replace green +tide_vi_mode_bg_color_visual yellow +tide_vi_mode_color_default black +tide_vi_mode_color_insert black +tide_vi_mode_color_replace black +tide_vi_mode_color_visual black +tide_vi_mode_icon_default D +tide_vi_mode_icon_insert I +tide_vi_mode_icon_replace R +tide_vi_mode_icon_visual V +tide_virtual_env_bg_color brblack +tide_virtual_env_color cyan diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish new file mode 100644 index 00000000..4661ab15 --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_cache_variables.fish @@ -0,0 +1,41 @@ +function _fake_tide_cache_variables + # pwd + set_color -o $fake_tide_pwd_color_anchors | read -gx _fake_tide_color_anchors + set -gx _fake_tide_color_truncated_dirs "$(set_color $fake_tide_pwd_color_truncated_dirs)" + set -gx _fake_tide_reset_to_color_dirs (set_color normal -b $fake_tide_pwd_bg_color; set_color $fake_tide_pwd_color_dirs) + + # git + contains git $fake_tide_left_prompt_items $fake_tide_right_prompt_items && + set -gx _fake_tide_location_color "$(set_color $fake_tide_git_color_branch)" + + # private_mode + if contains private_mode $fake_tide_left_prompt_items $fake_tide_right_prompt_items && test -n "$fish_private_mode" + set -gx _fake_tide_private_mode + else + set -e _fake_tide_private_mode + end + + # Same-color-separator color + set -gx _fake_tide_color_separator_same_color "$(set_color $fake_tide_prompt_color_separator_same_color)" + + # two line prompt + if contains newline $fake_tide_left_prompt_items + set_color $fake_tide_prompt_color_frame_and_connection -b normal | read -gx _fake_tide_prompt_and_frame_color + else + set -e _fake_tide_prompt_and_frame_color + end + + # newline before + if test "$fake_tide_prompt_add_newline_before" = true + set -g _fake_tide_add_newline '' + else + set -e _fake_tide_add_newline + end + + # item padding + if test "$fake_tide_prompt_pad_items" = true + set -gx _fake_tide_pad ' ' + else + set -e _fake_tide_pad + end +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_item_character.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_item_character.fish new file mode 100644 index 00000000..73ae0554 --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_item_character.fish @@ -0,0 +1,5 @@ +function _fake_tide_item_character + set_color $fake_tide_character_color + contains newline $fake_tide_left_prompt_items || echo -ns ' ' + echo -ns $fake_tide_character_icon +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish new file mode 100644 index 00000000..5aa13b2b --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_item_cmd_duration.fish @@ -0,0 +1,3 @@ +function _fake_tide_item_cmd_duration + _fake_tide_print_item cmd_duration $fake_tide_cmd_duration_icon' ' 5s +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_item_git.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_item_git.fish new file mode 100644 index 00000000..fb5b957d --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_item_git.fish @@ -0,0 +1,3 @@ +function _fake_tide_item_git + _fake_tide_print_item git (set_color $fake_tide_git_color_branch) $fake_tide_git_icon' ' main +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish new file mode 100644 index 00000000..c614bab2 --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_item_newline.fish @@ -0,0 +1,5 @@ +function _fake_tide_item_newline + set_color $prev_bg_color -b normal + var=fake_tide_"$_fake_tide_side"_prompt_suffix echo $$var + set -g add_prefix +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_item_os.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_item_os.fish new file mode 100644 index 00000000..5255721f --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_item_os.fish @@ -0,0 +1,3 @@ +function _fake_tide_item_os + _fake_tide_print_item os $fake_tide_os_icon +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_item_time.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_item_time.fish new file mode 100644 index 00000000..bbce0b5a --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_item_time.fish @@ -0,0 +1,3 @@ +function _fake_tide_item_time + _fake_tide_print_item time (date +$fake_tide_time_format) +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_print_item.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_print_item.fish new file mode 100644 index 00000000..30cd0245 --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_print_item.fish @@ -0,0 +1,22 @@ +function _fake_tide_print_item -a item + var=fake_tide_"$item"_bg_color set -f item_bg_color $$var + + if set -e add_prefix + set_color $item_bg_color -b normal + var=fake_tide_"$_fake_tide_side"_prompt_prefix echo -ns $$var + else if test "$item_bg_color" = "$prev_bg_color" + var=fake_tide_"$_fake_tide_side"_prompt_separator_same_color echo -ns $_fake_tide_color_separator_same_color$$var + else if test "$_fake_tide_side" = left + set_color $prev_bg_color -b $item_bg_color + echo -ns $fake_tide_left_prompt_separator_diff_color + else + set_color $item_bg_color -b $prev_bg_color + echo -ns $fake_tide_right_prompt_separator_diff_color + end + + var=fake_tide_"$item"_color set_color $$var -b $item_bg_color + + echo -ns $_fake_tide_pad $argv[2..] $_fake_tide_pad + + set -g prev_bg_color $item_bg_color +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_prompt.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_prompt.fish new file mode 100644 index 00000000..11f20caa --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_prompt.fish @@ -0,0 +1,42 @@ +function _fake_tide_prompt + set -g add_prefix + _fake_tide_side=left set -f left (for item in $fake_tide_left_prompt_items + _fake_tide_item_$item + end + if not set -e add_prefix + set_color $prev_bg_color -b normal + echo -ns $fake_tide_left_prompt_suffix + end) + + set -g add_prefix + _fake_tide_side=right set -f right (for item in $fake_tide_right_prompt_items + _fake_tide_item_$item + end + if not set -e add_prefix + set_color $prev_bg_color -b normal + echo -ns $fake_tide_right_prompt_suffix + end) + + if set -q _fake_tide_prompt_and_frame_color # If prompt is two lines + test "$fake_tide_left_prompt_frame_enabled" = true && + set left[1] "$_fake_tide_prompt_and_frame_color╭─$left[1]" && + set left[2] "$_fake_tide_prompt_and_frame_color╰─$left[2]" + test "$fake_tide_right_prompt_frame_enabled" = true && + set right[1] "$right[1]$_fake_tide_prompt_and_frame_color─╮" && + set right[2] "$right[2]$_fake_tide_prompt_and_frame_color─╯" + + # 5 = @PWD@ length which will be replaced + math $fake_columns+5-(string length --visible "$left[1]$right[1]") | read -lx dist_btwn_sides + echo -ns "$right[2]"\n(string replace @PWD@ (_fake_tide_pwd) "$left[1]")$_fake_tide_prompt_and_frame_color + + string repeat --no-newline --max (math max 0, $dist_btwn_sides-$_tide_pwd_len) $fake_tide_prompt_icon_connection + echo -ns "$right[1]"\n"$left[2] " + else + math $fake_columns+5-(string length --visible "$left[1]$right[1]") -$fake_tide_prompt_min_cols | read -lx dist_btwn_sides + string replace @PWD@ (_fake_tide_pwd) "$right[1]" "$left[1] " + end +end + +function _fake_tide_item_pwd + _fake_tide_print_item pwd @PWD@ +end diff --git a/.config/fish/functions/tide/configure/functions/_fake_tide_pwd.fish b/.config/fish/functions/tide/configure/functions/_fake_tide_pwd.fish new file mode 100644 index 00000000..433eafab --- /dev/null +++ b/.config/fish/functions/tide/configure/functions/_fake_tide_pwd.fish @@ -0,0 +1,11 @@ +function _fake_tide_pwd + set -l out ( + set_color $fake_tide_pwd_color_dirs + echo -ns $fake_tide_pwd_icon' ' '~/' + set_color -o $fake_tide_pwd_color_anchors + echo -ns src + set_color normal -b $fake_tide_pwd_bg_color + ) + set -g _tide_pwd_len (string length --visible $out) + echo -ns $out +end |