Merge branch 'master' into screen

pull/264/head
Justin Hileman 2 months ago committed by GitHub
commit 152f04febd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -7,7 +7,8 @@
![bobthefish][btf-screencast]
### Installation
## Installation
Be sure to have Oh My Fish installed. Then just:
@ -24,7 +25,8 @@ You will need a [Powerline-patched font][btf-patching] for this to work, unless
This theme is based loosely on [agnoster][btf-agnoster].
### Features
## Features
* A helpful, but not too distracting, greeting.
* A subtle timestamp hanging out off to the right.
@ -35,7 +37,8 @@ This theme is based loosely on [agnoster][btf-agnoster].
* Visual indication that you can't write to the current directory.
### The Prompt
## The Prompt
* Status flags:
* Previous command failed (**`!`**)
@ -63,93 +66,236 @@ This theme is based loosely on [agnoster][btf-agnoster].
* Abbreviated project-relative path
### Configuration
You can override some of the following default options in your `config.fish`:
## Configuration
You can override theme defaults in a Fish config file (for example `~/.config/fish/conf.d/bobthefish.fish`):
```fish
set -g theme_display_git no
set -g theme_display_git_dirty no
set -g theme_display_git_untracked no
set -g theme_display_git_ahead_verbose yes
set -g theme_display_git_dirty_verbose yes
set -g theme_display_git_stashed_verbose yes
set -g theme_display_git_default_branch yes
set -g theme_git_default_branches master main
set -g theme_git_worktree_support yes
set -g theme_use_abbreviated_branch_name yes
set -g theme_display_vagrant yes
set -g theme_display_docker_machine no
set -g theme_display_k8s_context yes
set -g theme_display_hg yes
set -g theme_display_virtualenv no
set -g theme_display_nix no
set -g theme_display_ruby no
set -g theme_display_node yes
set -g theme_display_user ssh
set -g theme_display_hostname ssh
set -g theme_display_vi no
set -g theme_display_date no
set -g theme_display_cmd_duration yes
set -g theme_title_display_process yes
set -g theme_title_display_path no
set -g theme_title_display_user yes
set -g theme_title_use_abbreviated_path no
set -g theme_date_format "+%a %H:%M"
set -g theme_date_timezone America/Los_Angeles
set -g theme_avoid_ambiguous_glyphs yes
set -g theme_powerline_fonts no
set -g theme_nerd_fonts yes
set -g theme_show_exit_status yes
set -g theme_display_jobs_verbose yes
set -g default_user your_normal_user
set -g theme_color_scheme dark
set -g fish_prompt_pwd_dir_length 0
set -g theme_project_dir_length 1
set -g theme_newline_cursor yes
set -g theme_newline_prompt '$ '
set -g theme_display_user ssh
set -g default_user bobthecow
```
**Git options**
- `theme_display_git_default_branch`. By default theme will hide/collapse the branch name in your prompt when you are using a Git _default branch_ i.e. historically `master` and often `main` now. Set to `yes` to stop these branches from being hidden/collapsed.
- `theme_git_default_branches`. The big cloud repos (GitHub, Bitbucket, GitLab et al.) are moving away from using `master` as the default branch name, and allow you to choose your own. As of version **2.28**, Git also supports custom default branch names via the `init.defaultBranch` config option. If our defaults of `master main` don't suit you, you can add/remove names in thist list i.e. `main trunk`. This ensures correct hiding/collapsing behaviour with custom default branch names (unless option above is activated).
**Title options**
- `theme_title_display_process`. By default theme doesn't show current process name in terminal title. If you want to show it, just set to `yes`.
- `theme_title_display_path`. Use `no` to hide current working directory from title.
- `theme_title_display_user`. Set to `yes` to show the current user in the tab title (unless you're the default user).
- `theme_title_use_abbreviated_path`. Default is `yes`. This means your home directory will be displayed as `~` and `/usr/local` as `/u/local`. Set it to `no` if you prefer full paths in title.
**Prompt options**
- `theme_display_ruby`. Use `no` to completely hide all information about Ruby version. By default Ruby version displayed if there is the difference from default settings.
- `theme_display_node`. If set to `yes`, will display current NVM or FNM node version.
- `theme_display_vagrant`. This feature is disabled by default, use `yes` to display Vagrant status in your prompt. Please note that only the VirtualBox and VMWare providers are supported.
- `theme_display_vi`. By default the vi mode indicator will be shown if vi or hybrid key bindings are enabled. Use `no` to hide the indicator, or `yes` to show the indicator.
- `theme_display_k8s_context`. This feature is disabled by default. Use `yes` to show the current kubernetes context (`> kubectl config current-context`).
- `theme_display_k8s_namespace`. This feature is disabled by default. Use `yes` to show the current kubernetes namespace.
- `theme_display_aws_vault_profile`. This feature is disabled by default. Use `yes` to show the currently executing [AWS Vault](https://github.com/99designs/aws-vault) profile.
- `theme_display_user`. If set to `yes`, display username always, if set to `ssh`, only when an SSH-Session is detected, if set to no, never.
- `theme_display_hostname`. Same behaviour as `theme_display_user`.
- `theme_display_sudo_user`. If set to `yes`, displays the sudo-username in a root shell. For example, when calling `sudo -s` and having this option set to `yes`, the username of the user, who called `sudo -s`, will be displayed.
- `theme_show_exit_status`. Set this option to `yes` to have the prompt show the last exit code if it was non_zero instead of just the exclamation mark.
- `theme_display_jobs_verbose`. If set to `yes` this option displays the number of currently running background jobs next to the percent sign.
- `theme_git_worktree_support`. If you do any git worktree shenanigans, setting this to `yes` will fix incorrect project-relative path display. If you don't do any git worktree shenanigans, leave it disabled. It's faster this way :)
- `theme_use_abbreviated_branch_name`. Set to `yes` to truncate git branch names in the prompt.
- `fish_prompt_pwd_dir_length`. bobthefish respects the Fish `$fish_prompt_pwd_dir_length` setting to abbreviate the prompt path. Set to `0` to show the full path, `1` (default) to show only the first character of each parent directory name, or any other number to show up to that many characters.
- `theme_project_dir_length`. The same as `$fish_prompt_pwd_dir_length`, but for the path relative to the current project root. Defaults to `0`; set to any other number to show an abbreviated path.
- `theme_newline_cursor`. Use `yes` to have cursor start on a new line. By default the prompt is only one line. When working with long directories it may be preferrend to have cursor on the next line. Setting this to `clean` instead of `yes` suppresses the caret on the new line.
- `theme_newline_prompt`. Use a custom prompt with newline cursor. By default this is the chevron right glyph or `>` when powerline fonts are disabled.
**Color scheme options**
See (many) more options below.
### Prompt options
#### `set -g theme_display_vi yes`
By default the vi mode indicator will be shown if vi or hybrid key bindings are enabled. Use `no` to always hide the indicator, or `yes` to always show the indicator.
#### `set -g theme_show_exit_status yes`
Use `yes` to show any non-zero exit code next to the exclamation mark.
#### `set -g theme_display_jobs_verbose yes`
Use `yes` to display the number of currently running background jobs next to the percent sign.
#### `set -g theme_display_user yes`
Set to `yes` to always display the username, to `ssh` to display only when an SSH session is active, or to `no` to never display the username.
#### `set -g default_user your_normal_user`
If a `default_user` is provided, the username will only be shown when it differs from the default.
#### `set -g theme_display_sudo_user yes`
If set to `yes`, displays the sudoer's username in a root shell. For example, when calling `sudo -s` with this option set to `yes`, the user who called `sudo -s` will be displayed.
#### `set -g theme_display_hostname yes`
Set to `yes` to always display the hostname, to `ssh` to display only when an SSH session is active, or to `no` to never display the hostname.
#### `set -g fish_prompt_pwd_dir_length 1`
Bobthefish respects the Fish `$fish_prompt_pwd_dir_length` setting to abbreviate the prompt path; set to `0` to show the full path, `1` (default) to show only the first character of each parent directory name, or any other number to show up to that many characters.
#### `set -g theme_project_dir_length 1`
The same as `$fish_prompt_pwd_dir_length`, but for the path relative to the current project root. Defaults to `0`; set to any other number to show an abbreviated path.
#### `set -g theme_show_project_parent no`
Use `no` to only show the project directory name, and not its parent path, when inside a project.
#### `set -g theme_newline_cursor yes`
Use `yes` to place the cursor on the next line, rather than the same line as the prompt. Setting this to `clean` instead of `yes` suppresses the caret on the new line.
#### `set -g theme_newline_prompt "\$"`
Use a custom prompt with newline cursor. By default this is the chevron right glyph or `>` when powerline fonts are disabled.
#### `set -g theme_avoid_ambiguous_glyphs yes`
You probably don't need this option, unless your terminal doesn't like Unicode. Setting to `yes` will avoid ambiguous-width characters in an attempt to
#### `set -g theme_powerline_fonts no`
Bobthefish really likes Powerline-enhanced fonts. If you can't make that work, set to `no` to use plaintext fallbacks.
#### `set -g theme_nerd_fonts yes`
Bobthefish likes Nerd Fonts even better! Use `yes` if you've got Nerd Font capable fonts.
#### `set -g theme_color_scheme dark`
See below for all the color scheming you can handle.
### Virtual environments and version manager options
#### `set -g theme_display_vagrant yes`
This feature is disabled by default, use `yes` to display Vagrant status in your prompt. Please note that only the VirtualBox and VMWare providers are supported.
#### `set -g theme_display_docker_machine no`
Use `no` to disable the current Docker machine name.
#### `set -g theme_display_ruby no`
Use `no` to disable Ruby version information. By default, the Ruby version is displayed unless it's your system Ruby version.
#### `set -g theme_display_virtualenv no`
Use `no` to disable Python version information. By default, the Python version is shown when it's interesting, along with the Virtualenv or Conda environmenmt.
#### `set -g theme_display_go verbose`
Use `no` to disable the Go version information. Set to `verbose` to show both the required and current Go version.
#### `set -g theme_display_node yes`
This feature is disabled by default. Use `yes`, display the version if an `.nvmrc`, `.node-version` or `package.json` file is found in the parent path. Set to `always` to always display the current NPM, NVM or FNM node version.
#### `set -g theme_display_nix no`
Use `no` to disable Nix environment information.
#### `set -g theme_display_k8s_context yes`
This feature is disabled by default. Use `yes` to show the current Kubernetes context (`> kubectl config current-context`).
#### `set -g theme_display_k8s_namespace yes`
This feature is disabled by default. Use `yes` to show the current Kubernetes namespace.
#### `set -g theme_display_aws_vault_profile yes`
This feature is disabled by default. Use `yes` to show the currently executing [AWS Vault](https://github.com/99designs/aws-vault) profile.
### Git (and other VCS) options
#### `set -g theme_display_git no`
Use `no` to disable Git integration. If you're doing this for performance reasons, try some of the options below before disabling it entirely!
#### `set -g theme_display_git_dirty no`
Use `no` to hide Git dirty state. Set the Git `bash.showDirtyState` option on a per-repository basis to disable it just for especially large repos.
#### `set -g theme_display_git_dirty_verbose yes`
This feature is disabled by default. Use `yes` to show more verbose dirty state information.
#### `set -g theme_display_git_untracked no`
Use `no` to hide Git untracked file state. Set the Git `bash.showUntrackedFiles` option on a per-repository basis to disable it just for especially large repos.
#### `set -g theme_display_git_ahead_verbose yes`
This feature is disabled by default. Use `yes` to show more verbose ahead/behind state information.
#### `set -g theme_display_git_stashed_verbose yes`
This feature is disabled by default. Use `yes` to show more verbose stashed state information.
#### `set -g theme_display_git_default_branch yes`
By default, Bobthefish hides the default branch name (e.g. `main` or `master`). Use `yes` to always show these branche names.
#### `set -g theme_git_default_branches main trunk`
By default, Bobthefish hides default branch names (e.g. `main` or `master`). To hide other branch names, you can set a custom default branch name via the `init.defaultBranch` Git config option, or override the list entirely.
#### `set -g theme_use_abbreviated_branch_name yes`
This feature is disabled by default. Use `yes` to truncate extremely long Git branch names.
#### `set -g theme_git_worktree_support yes`
If you do any Git worktree shenanigans, setting this to `yes` will fix incorrect project-relative paths. If you don't do any Git worktree shenanigans, leave it disabled. It's faster this way :)
#### `set -g theme_display_hg yes`
This feature is disabled by default. Use `yes` to enable Mercurial support in Bobthefish. If you don't use Mercurial, leave it disabled because it's ... not fast.
#### `set -g theme_vcs_ignore_paths /some/path /some/other/path{foo,bar}`
Ignore project paths for Git or Mercurial. Supports glob patterns.
### Right prompt options
The right prompt can be configured with the following options, or overridden entirely by supplying your own `fish_right_prompt` function.
#### `set -g theme_display_date`
Use `no` to disable the date in the right prompt.
#### `set -g theme_date_format +%c`
Customize date formatting. See `man date` for more information.
#### `set -g theme_date_timezone America/Los_Angeles`
Supply a TZ argument variable for date formatting. See `man date` for more information.
#### `set -g theme_display_cmd_duration no`
Use `no` to disable command duration in the right prompt.
### Title options
#### `set -g theme_title_display_process yes`
This feature is disabled by default. Use `yes` to show current process name in the terminal title.
#### `set -g theme_title_display_path no`
Use `no` to hide current working directory from the terminal title.
#### `set -g theme_title_display_user yes`
Use `yes` to show the current user in the tab title (unless you're the default user).
#### `set -g theme_title_use_abbreviated_path no`
By default, directory names will be abbreviated in the terminal title, for example `~` instead of `$HOME` and `/u/local` instead of `/usr/local`. Set to `no` to always show full paths in the title.
### Color schemes
| ![dark][btf-dark] | ![light][btf-light] |
| --------------------------- | --------------------------------------- |
| ![solarized][btf-solarized] | ![solarized-light][btf-solarized-light] |
| ![base16][btf-base16] | ![base16-light][btf-base16-light] |
| ![zenburn][btf-zenburn] | ![terminal-dark][btf-terminal-dark] |
| ![nord][btf-nord] | |
| ![nord][btf-nord] | ![gruvbox-light][gruvbox-light] |
You can use the function `bobthefish_display_colors` to preview the prompts in
any color scheme.
@ -164,9 +310,10 @@ one of the following options to change the prompt colors.
- `base16` (or `base16-dark`), `base16-light`. Dark and light variants of the
default Base16 theme.
- `zenburn`. An adaptation of Zenburn.
- `gruvbox`. An adaptation of gruvbox.
- `gruvbox`, `gruvbox-light`. An adaptation of gruvbox dark and light variants.
- `dracula`. An adaptation of dracula.
- `nord`. An adaptation of nord.
- `catpuccin-latte`, `catpuccin-frappe`, `catpuccin-macchiato`, `catpuccin-mocha`. Adaptations of the Cattpuccin themes.
Some of these may not look right if your terminal does not support 24 bit color,
in which case you can try one of the `terminal` schemes (below). However, if
@ -201,10 +348,8 @@ variables to set the colors of the prompt. See the "Colors" section of
`fish_prompt.fish` for details.
**VCS options**
- `set -g theme_vcs_ignore_paths /some/path /some/other/path{foo,bar}`. Ignore project paths for Git or Mercurial. Supports glob patterns.
### Overrides
## Overrides
You can disable the theme default greeting, vi mode prompt, right prompt, or title entirely — or override with your own — by adding custom functions to `~/.config/fish/functions`:
@ -246,3 +391,4 @@ end
[btf-zenburn]: https://cloud.githubusercontent.com/assets/53660/16141580/06229dd4-3412-11e6-84aa-a48de127b6da.png "zenburn"
[btf-terminal-dark]: https://cloud.githubusercontent.com/assets/53660/16141583/0b3e8eea-3412-11e6-8068-617c5371f6ea.png "terminal-dark"
[btf-nord]: https://user-images.githubusercontent.com/39213657/72811435-f64ca800-3c5f-11ea-8711-dcce8cfc50fb.png "nord"
[gruvbox-light]: https://user-images.githubusercontent.com/458535/97345492-6a207e80-188a-11eb-92df-30f33419238b.png "gruvbox-light"

@ -493,6 +493,48 @@ function __bobthefish_colors -S -a color_scheme -d 'Define colors used by bobthe
set -x color_desk $blue[2] $fg[2] --bold
set -x color_nix $blue[2] $fg[2] --bold
case 'gruvbox-light'
# light medium dark darkest
# ------ ------ ------ -------
set -l red 9d0006 cc241d
set -l green 79740e 98971a
set -l yellow b57614 d79921
set -l aqua 427b58 689d6a
set -l blue 076678 458588
set -l grey a89984 928374
set -l orange af3a03 d65d0e
set -l fg 282828 3c3836 504945 7c6f64
set -l bg d5c4a1 fbf1c7
set -x color_initial_segment_exit $red[1] $bg[2] --bold
set -x color_initial_segment_su $fg[1] $green[2] --bold
set -x color_initial_segment_jobs $fg[1] $aqua[2] --bold
set -x color_path $bg[1] $fg[2]
set -x color_path_basename $bg[1] $fg[2] --bold
set -x color_path_nowrite $red[1] $bg[2]
set -x color_path_nowrite_basename $red[1] $bg[2] --bold
set -x color_repo $green[2] $fg[1]
set -x color_repo_work_tree $bg[1] $fg[2] --bold
set -x color_repo_dirty $orange[2] $bg[2]
set -x color_repo_staged $yellow[1] $bg[1]
set -x color_vi_mode_default $fg[4] $bg[2] --bold
set -x color_vi_mode_insert $blue[1] $bg[2] --bold
set -x color_vi_mode_visual $yellow[1] $bg[2] --bold
set -x color_vagrant $blue[2] $fg[2] --bold
set -x color_k8s $green[2] $fg[2] --bold
set -x color_username $fg[3] $blue[2] --bold
set -x color_hostname $fg[3] $blue[2]
set -x color_rvm $red[2] $bg[2] --bold
set -x color_nvm $green[1] $fg[2] --bold
set -x color_virtualfish $blue[2] $fg[2] --bold
set -x color_virtualgo $blue[2] $fg[2] --bold
set -x color_desk $blue[2] $fg[2] --bold
set -x color_nix $blue[2] $fg[2] --bold
case 'dracula' # https://draculatheme.com
set -l bg 282a36
set -l current_line 44475a
@ -527,7 +569,7 @@ function __bobthefish_colors -S -a color_scheme -d 'Define colors used by bobthe
set -x color_vi_mode_visual $orange $bg --bold
set -x color_vagrant $pink $bg --bold
set -x color_k8s $green $fg --bold
set -x color_k8s $purple $bg --bold
set -x color_aws_vault $comment $yellow --bold
set -x color_aws_vault_expired $comment $red --bold
set -x color_username $selection $cyan --bold
@ -592,6 +634,348 @@ function __bobthefish_colors -S -a color_scheme -d 'Define colors used by bobthe
set -x color_virtualgo $base09 $colorfg --bold
set -x color_desk $base09 $colorfg --bold
case 'catppuccin-latte'
set -l rosewater dc8a78
set -l flamingo dd7878
set -l pink ea76cb
set -l mauve 8839ef
set -l red d20f39
set -l maroon e64553
set -l peach fe640b
set -l yellow df8e1d
set -l green 40a02b
set -l teal 179299
set -l sky 04a5e5
set -l sapphire 209fb5
set -l blue 1e66f5
set -l lavender 7287fd
set -l text 4c4f69
set -l subtext1 5c5f77
set -l subtext0 6c6f85
set -l overlay2 7c7f93
set -l overlay1 8c8fa1
set -l overlay0 9ca0b0
set -l surface2 acb0be
set -l surface1 bcc0cc
set -l surface0 ccd0da
set -l base eff1f5
set -l mantle e6e9ef
set -l crust dce0e8
set -x color_initial_segment_exit $surface2 $red --bold
set -x color_initial_segment_private $surface2 $flamingo
set -x color_initial_segment_su $surface2 $green --bold
set -x color_initial_segment_jobs $surface2 $peach --bold
set -x color_path $surface0 $text
set -x color_path_basename $surface0 $text --bold
set -x color_path_nowrite $surface0 $mauve
set -x color_path_nowrite_basename $surface0 $mauve --bold
set -x color_repo $green $mantle
set -x color_repo_work_tree $surface2 $mantle --bold
set -x color_repo_dirty $red $mantle
set -x color_repo_staged $yellow $mantle
set -x color_vi_mode_default $sky $mantle --bold
set -x color_vi_mode_insert $green $mantle --bold
set -x color_vi_mode_visual $mauve $mantle --bold
set -x color_vagrant $surface2 $text --bold
set -x color_k8s $surface2 $text --bold
set -x color_aws_vault $yellow $mantle --bold
set -x color_aws_vault_expired $red $mantle --bold
set -x color_username $surface2 $yellow --bold
set -x color_hostname $surface2 $yellow
set -x color_rvm $red $mantle --bold
set -x color_node $green $mantle --bold
set -x color_virtualfish $peach $mantle --bold
set -x color_virtualgo $sky $mantle --bold
set -x color_desk $peach $mantle --bold
set -x color_nix $sky $mantle --bold
case 'catppuccin-frappe'
set -l rosewater f2d5cf
set -l flamingo eebebe
set -l pink f4b8e4
set -l mauve ca9ee6
set -l red e78284
set -l maroon ea999c
set -l peach ef9f76
set -l yellow e5c890
set -l green a6d189
set -l teal 81c8be
set -l sky 99d1db
set -l sapphire 85c1dc
set -l blue 8caaee
set -l lavender babbf1
set -l text c6d0f5
set -l subtext1 b5bfe2
set -l subtext0 a5adce
set -l overlay2 949cbb
set -l overlay1 838ba7
set -l overlay0 737994
set -l surface2 626880
set -l surface1 51576d
set -l surface0 414559
set -l base 303446
set -l mantle 292c3c
set -l crust 232634
set -x color_initial_segment_exit $surface2 $red --bold
set -x color_initial_segment_private $surface2 $flamingo
set -x color_initial_segment_su $surface2 $green --bold
set -x color_initial_segment_jobs $surface2 $peach --bold
set -x color_path $surface0 $text
set -x color_path_basename $surface0 $text --bold
set -x color_path_nowrite $surface0 $mauve
set -x color_path_nowrite_basename $surface0 $mauve --bold
set -x color_repo $green $mantle
set -x color_repo_work_tree $surface2 $mantle --bold
set -x color_repo_dirty $red $mantle
set -x color_repo_staged $yellow $mantle
set -x color_vi_mode_default $sky $mantle --bold
set -x color_vi_mode_insert $green $mantle --bold
set -x color_vi_mode_visual $mauve $mantle --bold
set -x color_vagrant $surface2 $text --bold
set -x color_k8s $surface2 $text --bold
set -x color_aws_vault $yellow $mantle --bold
set -x color_aws_vault_expired $red $mantle --bold
set -x color_username $surface2 $yellow --bold
set -x color_hostname $surface2 $yellow
set -x color_rvm $red $mantle --bold
set -x color_node $green $mantle --bold
set -x color_virtualfish $peach $mantle --bold
set -x color_virtualgo $sky $mantle --bold
set -x color_desk $peach $mantle --bold
set -x color_nix $sky $mantle --bold
case 'catppuccin-macchiato'
set -l rosewater f4dbd6
set -l flamingo f0c6c6
set -l pink f5bde6
set -l mauve c6a0f6
set -l red ed8796
set -l maroon ee99a0
set -l peach f5a97f
set -l yellow eed49f
set -l green a6da95
set -l teal 8bd5ca
set -l sky 91d7e3
set -l sapphire 7dc4e4
set -l blue 8aadf4
set -l lavender b7bdf8
set -l text cad3f5
set -l subtext1 b8c0e0
set -l subtext0 a5adcb
set -l overlay2 939ab7
set -l overlay1 8087a2
set -l overlay0 6e738d
set -l surface2 5b6078
set -l surface1 494d64
set -l surface0 363a4f
set -l base 24273a
set -l mantle 1e2030
set -l crust 181926
set -x color_initial_segment_exit $surface2 $red --bold
set -x color_initial_segment_private $surface2 $flamingo
set -x color_initial_segment_su $surface2 $green --bold
set -x color_initial_segment_jobs $surface2 $peach --bold
set -x color_path $surface0 $text
set -x color_path_basename $surface0 $text --bold
set -x color_path_nowrite $surface0 $mauve
set -x color_path_nowrite_basename $surface0 $mauve --bold
set -x color_repo $green $mantle
set -x color_repo_work_tree $surface2 $mantle --bold
set -x color_repo_dirty $red $mantle
set -x color_repo_staged $yellow $mantle
set -x color_vi_mode_default $sky $mantle --bold
set -x color_vi_mode_insert $green $mantle --bold
set -x color_vi_mode_visual $mauve $mantle --bold
set -x color_vagrant $surface2 $text --bold
set -x color_k8s $surface2 $text --bold
set -x color_aws_vault $yellow $mantle --bold
set -x color_aws_vault_expired $red $mantle --bold
set -x color_username $surface2 $yellow --bold
set -x color_hostname $surface2 $yellow
set -x color_rvm $red $mantle --bold
set -x color_node $green $mantle --bold
set -x color_virtualfish $peach $mantle --bold
set -x color_virtualgo $sky $mantle --bold
set -x color_desk $peach $mantle --bold
set -x color_nix $sky $mantle --bold
case 'catppuccin-mocha'
set -l rosewater f5e0dc
set -l flamingo f2cdcd
set -l pink f5c2e7
set -l mauve cba6f7
set -l red f38ba8
set -l maroon eba0ac
set -l peach fab387
set -l yellow f9e2af
set -l green a6e3a1
set -l teal 94e2d5
set -l sky 89dceb
set -l sapphire 74c7ec
set -l blue 89b4fa
set -l lavender b4befe
set -l text cdd6f4
set -l subtext1 bac2de
set -l subtext0 a6adc8
set -l overlay2 9399b2
set -l overlay1 7f849c
set -l overlay0 6c7086
set -l surface2 585b70
set -l surface1 45475a
set -l surface0 313244
set -l base 1e1e2e
set -l mantle 181825
set -l crust 11111b
set -x color_initial_segment_exit $surface2 $red --bold
set -x color_initial_segment_private $surface2 $flamingo
set -x color_initial_segment_su $surface2 $green --bold
set -x color_initial_segment_jobs $surface2 $peach --bold
set -x color_path $surface0 $text
set -x color_path_basename $surface0 $text --bold
set -x color_path_nowrite $surface0 $mauve
set -x color_path_nowrite_basename $surface0 $mauve --bold
set -x color_repo $green $mantle
set -x color_repo_work_tree $surface2 $mantle --bold
set -x color_repo_dirty $red $mantle
set -x color_repo_staged $yellow $mantle
set -x color_vi_mode_default $sky $mantle --bold
set -x color_vi_mode_insert $green $mantle --bold
set -x color_vi_mode_visual $mauve $mantle --bold
set -x color_vagrant $surface2 $text --bold
set -x color_k8s $surface2 $text --bold
set -x color_aws_vault $yellow $mantle --bold
set -x color_aws_vault_expired $red $mantle --bold
set -x color_username $surface2 $yellow --bold
set -x color_hostname $surface2 $yellow
set -x color_rvm $red $mantle --bold
set -x color_node $green $mantle --bold
set -x color_virtualfish $peach $mantle --bold
set -x color_virtualgo $sky $mantle --bold
set -x color_desk $peach $mantle --bold
set -x color_nix $sky $mantle --bold
case 'jellybeans' # https://github.com/nanotech/jellybeans.vim
set -l bg 151515
set -l darker_grey 1c1c1c
set -l dark_grey 262626
set -l grey 888888
set -l blue_grey a0a8b0
set -l light_grey d8dee9
set -l white ffffff
set -l dark_red 902020
set -l red cf6a4c
set -l red_orange ffb964
set -l bright_orange fad07a
set -l pale_gold dad085
set -l pink f0a0c0
set -l lilac c6b6ee
set -l dark_blue 2b5b77
set -l deep_blue 0d61ac
set -l blue 8197bf
set -l bright_blue 7697d6
set -l cyan 8fbfdc
set -l blue_green 668799
set -l green 799d6a
set -l bright_green 70b950
set -l brighter_green 65c254
set -l light_green 99ad6a
set -l dark_green 556633
set -x color_initial_segment_exit $dark_red $white --bold
set -x color_initial_segment_private $light_grey $dark_grey --bold
set -x color_initial_segment_su $red_orange $darker_grey --bold
set -x color_initial_segment_jobs $lilac $darker_grey --bold
set -x color_path $dark_grey $light_grey
set -x color_path_basename $dark_grey $light_grey --bold
set -x color_path_nowrite $dark_grey $red_orange
set -x color_path_nowrite_basename $dark_grey $red_orange --bold
set -x color_repo $light_green $darker_grey
set -x color_repo_work_tree $dark_grey $light_grey --bold
set -x color_repo_dirty $red $darker_grey
set -x color_repo_staged $pale_gold $darker_grey
set -x color_vi_mode_default $bright_blue $darker_grey --bold
set -x color_vi_mode_insert $lilac $darker_grey --bold
set -x color_vi_mode_visual $cyan $darker_grey --bold
set -x color_username $dark_grey $blue_grey --bold
set -x color_hostname $dark_grey $blue_grey
set -x color_vagrant $lilac $darker_grey --bold
set -x color_k8s $pale_gold $darker_grey --bold
set -x color_aws_vault $deep_blue $pale_gold --bold
set -x color_aws_vault_expired $deep_blue $red --bold
set -x color_rvm $pink $darker_grey --bold
set -x color_nvm $bright_green $darker_grey --bold
set -x color_virtualfish $cyan $darker_grey --bold
set -x color_virtualgo $light_green $darker_grey --bold
set -x color_desk $light_grey $darker_grey --bold
set -x color_nix $bright_blue $darker_grey --bold
case 'darcula'
# light medium dark darkest
# ------ ------ ------ ------
set -l grey 808080 616161 595959 424242
set -l red FF4050 F0524F B82421 772E2C
set -l green 4FC414 5C962C 458500 39511F
set -l yellow E5BF00 A68A0D A87B00 5C4F17
set -l blue 1FB0FF 3993D4 1778BD 245980
set -l white F9F9F4 B7C3D0
set -x color_initial_segment_exit $white[2] $red[3] --bold
set -x color_initial_segment_private $white[2] $grey[4]
set -x color_initial_segment_su $white[2] $green[3] --bold
set -x color_initial_segment_jobs $white[2] $blue[3] --bold
set -x color_path $grey[4] $white[2]
set -x color_path_basename $grey[4] $white[1] --bold
set -x color_path_nowrite $grey[4] $red[2]
set -x color_path_nowrite_basename $grey[4] $red[1] --bold
set -x color_repo $green[3] $white[4]
set -x color_repo_work_tree $grey[4] $grey[4] --bold
set -x color_repo_dirty $red[3] $grey[4]
set -x color_repo_staged $yellow[3] $grey[4]
set -x color_vi_mode_default $grey[4] $yellow[2] --bold
set -x color_vi_mode_insert $green[2] $grey[4] --bold
set -x color_vi_mode_visual $yellow[2] $grey[4] --bold
set -x color_vagrant $blue[2] $green[1] --bold
set -x color_k8s $green[2] $grey[4] --bold
set -x color_aws_vault $blue[2] $grey[4] --bold
set -x color_aws_vault_expired $blue[2] $red[1] --bold
set -x color_username $grey[4] $blue[2] --bold
set -x color_hostname $grey[4] $blue[1]
set -x color_rvm $red[2] $grey[4] --bold
set -x color_node $green[3] $white[2] --bold
set -x color_virtualfish $blue[2] $grey[4] --bold
set -x color_virtualgo $blue[2] $grey[4] --bold
set -x color_desk $blue[2] $grey[4] --bold
set -x color_nix $blue[2] $grey[4] --bold
case '*' # default dark theme
# light medium dark
# ------ ------ ------

@ -3,8 +3,11 @@ function bobthefish_display_colors -a color_scheme -d 'Print example prompt colo
set -l color_schemes default light \
solarized solarized-light \
base16 base16-light \
gruvbox zenburn \
gruvbox gruvbox-light zenburn \
dracula nord \
catppuccin-latte catppuccin-frappe \
catppuccin-macchiato catppuccin-mocha \
jellybeans \
terminal terminal-dark-white \
terminal-light terminal-light-black \
terminal2 terminal2-dark-white \
@ -133,6 +136,10 @@ function bobthefish_display_colors -a color_scheme -d 'Print example prompt colo
echo -ns $ruby_glyph rvm ' '
__bobthefish_finish_segments
__bobthefish_start_segment $color_nvm
echo -ns $ruby_glyph nvm ' '
__bobthefish_finish_segments
__bobthefish_start_segment $color_virtualfish
echo -ns $virtualenv_glyph virtualfish ' '
__bobthefish_finish_segments
@ -144,6 +151,7 @@ function bobthefish_display_colors -a color_scheme -d 'Print example prompt colo
__bobthefish_start_segment $color_desk
echo -ns $desk_glyph desk ' '
__bobthefish_finish_segments
echo
__bobthefish_start_segment $color_aws_vault
echo -ns aws-vault ' (' active ') '
@ -153,5 +161,9 @@ function bobthefish_display_colors -a color_scheme -d 'Print example prompt colo
echo -ns aws-vault ' (' expired ') '
__bobthefish_finish_segments
__bobthefish_start_segment $color_k8s
echo -ns $k8s_glyph ' k8s-context'
__bobthefish_finish_segments
echo -e "\n"
end

@ -15,45 +15,8 @@
#
# https://github.com/ryanoasis/nerd-fonts
#
# You can override some default prompt options in your config.fish:
# See README.md for setup and configuration options.
#
# set -g theme_display_git no
# set -g theme_display_git_dirty no
# set -g theme_display_git_untracked no
# set -g theme_display_git_ahead_verbose yes
# set -g theme_display_git_dirty_verbose yes
# set -g theme_display_git_stashed_verbose yes
# set -g theme_display_git_default_branch yes
# set -g theme_git_default_branches main trunk
# set -g theme_git_worktree_support yes
# set -g theme_display_vagrant yes
# set -g theme_display_docker_machine no
# set -g theme_display_k8s_context yes
# set -g theme_display_k8s_namespace no
# set -g theme_display_aws_vault_profile yes
# set -g theme_display_hg yes
# set -g theme_display_virtualenv no
# set -g theme_display_nix no
# set -g theme_display_ruby no
# set -g theme_display_user ssh
# set -g theme_display_hostname ssh
# set -g theme_display_screen yes
# set -g theme_display_screen_verbose no
# set -g theme_display_sudo_user yes
# set -g theme_display_vi no
# set -g theme_display_node yes
# set -g theme_avoid_ambiguous_glyphs yes
# set -g theme_powerline_fonts no
# set -g theme_nerd_fonts yes
# set -g theme_show_exit_status yes
# set -g theme_display_jobs_verbose yes
# set -g default_user your_normal_user
# set -g theme_color_scheme dark
# set -g fish_prompt_pwd_dir_length 0
# set -g theme_project_dir_length 1
# set -g theme_newline_cursor yes
# ==============================
# Helper methods
# ==============================
@ -80,10 +43,13 @@ function __bobthefish_escape_regex -a str -d 'A backwards-compatible `string esc
end
function __bobthefish_git_branch -S -d 'Get the current git branch (or commitish)'
set -l tag (command git describe --tags --exact-match 2>/dev/null)
and echo "$tag_glyph $tag "
set -l branch (command git symbolic-ref HEAD 2>/dev/null | string replace -r '^refs/heads/' '')
and begin
[ -n "$theme_git_default_branches" ]
or set -l theme_git_default_branches master main
or set -l theme_git_default_branches master main (git config init.defaultBranch)
[ "$theme_display_git_master_branch" != 'yes' -a "$theme_display_git_default_branch" != 'yes' ]
and contains $branch $theme_git_default_branches
@ -99,12 +65,11 @@ function __bobthefish_git_branch -S -d 'Get the current git branch (or commitish
and return
end
set -l tag (command git describe --tags --exact-match 2>/dev/null)
and echo "$tag_glyph $tag"
and return
set -l branch (command git show-ref --head -s --abbrev | head -n1 2>/dev/null)
echo "$detached_glyph $branch"
# If we've already shown a tag we don't need to show a detached branch
if [ -z "$tag" ]
set -l branch (command git show-ref --head -s --abbrev | head -n1 2>/dev/null)
echo "$detached_glyph $branch"
end
end
function __bobthefish_hg_branch -S -d 'Get the current hg branch'
@ -160,6 +125,10 @@ function __bobthefish_git_project_dir -S -a real_pwd -d 'Print the current git p
[ -z "$git_toplevel" ]
and return
# Support Git under WSL (see #336)
command -q wslpath
and set git_toplevel (command wslpath $git_toplevel)
# If there are no symlinks, just use git toplevel
switch $real_pwd/
case $git_toplevel/\*
@ -187,7 +156,7 @@ function __bobthefish_git_project_dir -S -a real_pwd -d 'Print the current git p
or return
pushd $git_dir
set git_dir $real_pwd
set git_dir (__bobthefish_pwd)
popd
switch $real_pwd/
@ -359,7 +328,7 @@ function __bobthefish_start_segment -S -d 'Start a prompt segment'
set __bobthefish_current_bg $bg
end
function __bobthefish_path_segment -S -a segment_dir -d 'Display a shortened form of a directory'
function __bobthefish_path_segment -S -a segment_dir -a path_type -d 'Display a shortened form of a directory'
set -l segment_color $color_path
set -l segment_basename_color $color_path_basename
@ -383,7 +352,9 @@ function __bobthefish_path_segment -S -a segment_dir -d 'Display a shortened for
set directory (__bobthefish_basename "$segment_dir")
end
echo -n $parent
[ "$theme_show_project_parent" != "no" -o "$path_type" != "project" ]
and echo -n $parent
set_color -b $segment_basename_color
echo -ns $directory ' '
end
@ -639,12 +610,14 @@ function __bobthefish_prompt_k8s_context -S -d 'Show current Kubernetes context'
[ "$theme_display_k8s_namespace" = 'yes' ]
and set -l namespace (__bobthefish_k8s_namespace)
[ -z $context -o "$context" = 'default' ]
and [ -z $namespace -o "$namespace" = 'default' ]
[ -z "$context" -o "$context" = 'default' ]
and [ -z "$namespace" -o "$namespace" = 'default' ]
and return
set -l segment $k8s_glyph ' ' $context
[ -n "$namespace" ]
set -l segment $k8s_glyph ' '
[ "$context" != 'default' ]
and set segment $segment $context
[ "$namespace" != 'default' ]
and set segment $segment ':' $namespace
__bobthefish_start_segment $color_k8s
@ -660,13 +633,13 @@ function __bobthefish_prompt_aws_vault_profile -S -d 'Show AWS Vault profile'
[ "$theme_display_aws_vault_profile" = 'yes' ]
or return
[ -n "$AWS_VAULT" -a -n "$AWS_SESSION_EXPIRATION" ]
[ -n "$AWS_VAULT" -a -n "$AWS_CREDENTIAL_EXPIRATION" ]
or return
set -l profile $AWS_VAULT
set -l now (date --utc +%s)
set -l expiry (date -d "$AWS_SESSION_EXPIRATION" +%s)
set -l expiry (date -d "$AWS_CREDENTIAL_EXPIRATION" +%s)
set -l diff_mins (math "floor(( $expiry - $now ) / 60)")
set -l diff_time $diff_mins"m"
@ -692,7 +665,7 @@ end
# Polyfill for fish < 2.5.0
if not type -q prompt_hostname
if not set -q __bobthefish_prompt_hostname
set -g __bobthefish_prompt_hostname (hostname | string replace -r '\..*' '')
set -g __bobthefish_prompt_hostname (uname -n | string replace -r '\..*' '')
end
function prompt_hostname
@ -832,10 +805,10 @@ function __bobthefish_prompt_rubies -S -d 'Display current Ruby information'
set -l asdf_current_ruby (asdf current ruby 2>/dev/null)
or return
echo "$asdf_current_ruby" | read -l asdf_ruby_version asdf_provenance
echo "$asdf_current_ruby" | read -l _asdf_plugin asdf_ruby_version asdf_provenance
# If asdf changes their ruby version provenance format, update this to match
[ (string trim -- "$asdf_provenance") = "(set by $HOME/.tool-versions)" ]
[ (string trim -- "$asdf_provenance") = "$HOME/.tool-versions" ]
and return
set ruby_version $asdf_ruby_version
@ -848,6 +821,63 @@ function __bobthefish_prompt_rubies -S -d 'Display current Ruby information'
echo -ns $ruby_glyph $ruby_version ' '
end
function __bobthefish_prompt_golang -S -a real_pwd -d 'Display current Go information'
# setting is 'no', don't display the prompt
[ "$theme_display_go" = 'no' ]
and return
# find the closest go.mod
set -l gomod_version "0"
set -l d $real_pwd
while not [ -z "$d" ]
if [ -e $d/go.mod ]
grep "^go " "$d/go.mod" | read __ gomod_version
break
end
[ "$d" = "/" ]
and return
set d (__bobthefish_dirname $d)
end
# no go.mod, not in a go project, don't display the prompt
if [ "$gomod_version" = "0" ]
return
end
# check if there's a Go executable
set -l no_go_installed "0"
set -l actual_go_version "0"
set -l high_enough_version "0"
if type -fq go
set actual_go_version (go version | string match -r 'go version go(\\d+\\.\\d+)' -g)
if printf "%s\n%s" "$gomod_version" "$actual_go_version" | sort --check=silent --version-sort
set high_enough_version "1"
end
else
set no_go_installed "1"
end
if [ "$high_enough_version" = "1" ]
__bobthefish_start_segment $color_virtualgo
else
__bobthefish_start_segment $color_rvm
end
echo -ns $go_glyph
echo -ns "$gomod_version "
# showing the prompt -- but plain ( for 'yes' ) or verbose?
if [ "$theme_display_go" = "verbose" ]
if [ "$actual_go_version" != "0" ]
# show the prompt with the required version AND the currently available
# version; same color rules as above
echo -ns " ($actual_go_version)"
end
end
end
function __bobthefish_virtualenv_python_version -S -d 'Get current Python version'
switch (python --version 2>&1 | tr '\n' ' ')
case 'Python 2*PyPy*'
@ -862,14 +892,29 @@ function __bobthefish_virtualenv_python_version -S -d 'Get current Python versio
end
function __bobthefish_prompt_virtualfish -S -d "Display current Python virtual environment (only for virtualfish, virtualenv's activate.fish changes prompt by itself) or conda environment."
type -fq python
or return
[ "$theme_display_virtualenv" = 'no' -o -z "$VIRTUAL_ENV" -a -z "$CONDA_DEFAULT_ENV" ]
and return
set -l version_glyph (__bobthefish_virtualenv_python_version)
set -l prompt_style 'default'
if [ "$version_glyph" ]
__bobthefish_start_segment $color_virtualfish
echo -ns $virtualenv_glyph $version_glyph ' '
if string match -q "Python 2*" (python --version 2>&1 | string trim)
set prompt_style 'verbose'
else if [ "$theme_display_virtualenv" = 'verbose' ]
set prompt_style 'verbose'
end
if [ "$prompt_style" = 'verbose' ]
echo -ns $virtualenv_glyph $version_glyph ' '
else
echo -ns $virtualenv_glyph
end
end
if [ "$VIRTUAL_ENV" ]
@ -897,9 +942,42 @@ function __bobthefish_prompt_desk -S -d 'Display current desk environment'
set_color normal
end
function __bobthefish_prompt_find_file_up -S -d 'Find file(s), going up the parent directories'
set -l dir "$argv[1]"
set -l files $argv[2..-1]
if test -z "$dir"
or test -z "$files"
return 1
end
while [ "$dir" ]
for f in $files
if [ -e "$dir/$f" ]
return
end
end
[ "$dir" = '/' ]
and return 1
set dir (__bobthefish_dirname "$dir")
end
return 1
end
function __bobthefish_prompt_node -S -d 'Display current node version'
[ "$theme_display_node" = 'yes' -o "$theme_display_nvm" = 'yes' ]
or return
set -l should_show
if [ "$theme_display_node" = 'always' -o "$theme_display_nvm" = 'yes' ]
set should_show 1
else if [ "$theme_display_node" = 'yes' ]
__bobthefish_prompt_find_file_up "$PWD" package.json .nvmrc .node-version
and set should_show 1
end
[ -z "$should_show" ]
and return
set -l node_manager
set -l node_manager_dir
@ -954,7 +1032,7 @@ function __bobthefish_prompt_hg -S -a hg_root_dir -a real_pwd -d 'Display the ac
set flag_colors $color_repo_dirty
end
__bobthefish_path_segment $hg_root_dir
__bobthefish_path_segment $hg_root_dir project
__bobthefish_start_segment $flag_colors
echo -ns $hg_glyph ' '
@ -1009,7 +1087,7 @@ function __bobthefish_prompt_git -S -a git_root_dir -a real_pwd -d 'Display the
if [ "$theme_display_git_untracked" != 'no' ]
set -l show_untracked (command git config --bool bash.showUntrackedFiles 2>/dev/null)
if [ "$show_untracked" != 'false' ]
set new (command git ls-files --other --exclude-standard --directory --no-empty-directory 2>/dev/null)
set new (command git ls-files --other --exclude-standard --directory --no-empty-directory "$git_root_dir" 2>/dev/null)
if [ "$new" ]
set new "$git_untracked_glyph"
end
@ -1028,7 +1106,7 @@ function __bobthefish_prompt_git -S -a git_root_dir -a real_pwd -d 'Display the
set flag_colors $color_repo_staged
end
__bobthefish_path_segment $git_root_dir
__bobthefish_path_segment $git_root_dir project
__bobthefish_start_segment $flag_colors
echo -ns (__bobthefish_git_branch) $flags ' '
@ -1110,7 +1188,7 @@ function __bobthefish_prompt_git -S -a git_root_dir -a real_pwd -d 'Display the
end
function __bobthefish_prompt_dir -S -a real_pwd -d 'Display a shortened form of the current directory'
__bobthefish_path_segment "$real_pwd"
__bobthefish_path_segment "$real_pwd" pwd
end
@ -1137,6 +1215,8 @@ function fish_prompt -d 'bobthefish, a fish theme optimized for awesome'
# Start each line with a blank slate
set -l __bobthefish_current_bg
set -l real_pwd (__bobthefish_pwd)
# Status flags and input mode
__bobthefish_prompt_status $last_status
@ -1158,11 +1238,11 @@ function fish_prompt -d 'bobthefish, a fish theme optimized for awesome'
__bobthefish_prompt_nix
__bobthefish_prompt_desk
__bobthefish_prompt_rubies
__bobthefish_prompt_golang $real_pwd
__bobthefish_prompt_virtualfish
__bobthefish_prompt_virtualgo
__bobthefish_prompt_node
set -l real_pwd (__bobthefish_pwd)
# VCS
set -l git_root_dir (__bobthefish_git_project_dir $real_pwd)

@ -1,6 +1,4 @@
# You can override some default right prompt options in your config.fish:
# set -g theme_date_format "+%a %H:%M"
# set -g theme_date_timezone America/Los_Angeles
# See "Right prompt options" in README.md for configuration options
function __bobthefish_cmd_duration -S -d 'Show command duration'
[ "$theme_display_cmd_duration" = "no" ]

@ -1,15 +1,11 @@
# You can override some default title options in your config.fish:
# set -g theme_title_display_process no
# set -g theme_title_display_path no
# set -g theme_title_display_user yes
# set -g theme_title_use_abbreviated_path no
# See "Title options" in README.md for configuration options
function __bobthefish_title_user -S -d 'Display actual user if different from $default_user'
if [ "$theme_title_display_user" = 'yes' ]
if [ "$USER" != "$default_user" -o -n "$SSH_CLIENT" ]
set -l IFS .
hostname | read -l hostname __
echo -ns (whoami) '@' $hostname ' '
uname -n | read -l host __
echo -ns (whoami) '@' $host ' '
end
end
end
@ -18,7 +14,7 @@ function fish_title
__bobthefish_title_user
if [ "$theme_title_display_process" = 'yes' ]
echo $_
status current-command
[ "$theme_title_display_path" != 'no' ]
and echo ' '

Loading…
Cancel
Save