Merge branch 'master' into color-scheme-catppuccin

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

@ -7,7 +7,8 @@
![bobthefish][btf-screencast] ![bobthefish][btf-screencast]
### Installation
## Installation
Be sure to have Oh My Fish installed. Then just: 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]. This theme is based loosely on [agnoster][btf-agnoster].
### Features
## Features
* A helpful, but not too distracting, greeting. * A helpful, but not too distracting, greeting.
* A subtle timestamp hanging out off to the right. * 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. * Visual indication that you can't write to the current directory.
### The Prompt
## The Prompt
* Status flags: * Status flags:
* Previous command failed (**`!`**) * Previous command failed (**`!`**)
@ -63,93 +66,236 @@ This theme is based loosely on [agnoster][btf-agnoster].
* Abbreviated project-relative path * 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 ```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_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 theme_color_scheme dark
set -g fish_prompt_pwd_dir_length 0 set -g theme_display_user ssh
set -g theme_project_dir_length 1 set -g default_user bobthecow
set -g theme_newline_cursor yes
set -g theme_newline_prompt '$ '
``` ```
**Git options**
See (many) more options below.
- `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** ### Prompt 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`. #### `set -g theme_display_vi 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). 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.
- `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.
#### `set -g theme_show_exit_status yes`
**Prompt options**
Use `yes` to show any non-zero exit code next to the exclamation mark.
- `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 `always`, will display current NPM, NVM or FNM node version. If set to `yes`, will display the version if an `.nvmrc`, `.node-version` or `package.json` file is found in the parent directories. #### `set -g theme_display_jobs_verbose yes`
- `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. Use `yes` to display the number of currently running background jobs next to the percent sign.
- `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. #### `set -g theme_display_user yes`
- `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. 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.
- `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. #### `set -g default_user your_normal_user`
- `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. If a `default_user` is provided, the username will only be shown when it differs from the default.
- `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. #### `set -g theme_display_sudo_user yes`
- `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. 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.
- `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. #### `set -g theme_display_hostname yes`
**Color scheme options** 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] | | ![dark][btf-dark] | ![light][btf-light] |
| --------------------------- | --------------------------------------- | | --------------------------- | --------------------------------------- |
| ![solarized][btf-solarized] | ![solarized-light][btf-solarized-light] | | ![solarized][btf-solarized] | ![solarized-light][btf-solarized-light] |
| ![base16][btf-base16] | ![base16-light][btf-base16-light] | | ![base16][btf-base16] | ![base16-light][btf-base16-light] |
| ![zenburn][btf-zenburn] | ![terminal-dark][btf-terminal-dark] | | ![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 You can use the function `bobthefish_display_colors` to preview the prompts in
any color scheme. any color scheme.
@ -164,7 +310,7 @@ one of the following options to change the prompt colors.
- `base16` (or `base16-dark`), `base16-light`. Dark and light variants of the - `base16` (or `base16-dark`), `base16-light`. Dark and light variants of the
default Base16 theme. default Base16 theme.
- `zenburn`. An adaptation of Zenburn. - `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. - `dracula`. An adaptation of dracula.
- `nord`. An adaptation of nord. - `nord`. An adaptation of nord.
- `catpuccin-latte`, `catpuccin-frappe`, `catpuccin-macchiato`, `catpuccin-mocha`. Adaptations of the Cattpuccin themes. - `catpuccin-latte`, `catpuccin-frappe`, `catpuccin-macchiato`, `catpuccin-mocha`. Adaptations of the Cattpuccin themes.
@ -202,10 +348,8 @@ variables to set the colors of the prompt. See the "Colors" section of
`fish_prompt.fish` for details. `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`: 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`:
@ -247,3 +391,4 @@ end
[btf-zenburn]: https://cloud.githubusercontent.com/assets/53660/16141580/06229dd4-3412-11e6-84aa-a48de127b6da.png "zenburn" [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-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" [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"

@ -482,6 +482,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_desk $blue[2] $fg[2] --bold
set -x color_nix $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 case 'dracula' # https://draculatheme.com
set -l bg 282a36 set -l bg 282a36
set -l current_line 44475a set -l current_line 44475a
@ -819,6 +861,108 @@ function __bobthefish_colors -S -a color_scheme -d 'Define colors used by bobthe
set -x color_desk $peach $mantle --bold set -x color_desk $peach $mantle --bold
set -x color_nix $sky $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 case '*' # default dark theme
# light medium dark # light medium dark
# ------ ------ ------ # ------ ------ ------

@ -3,10 +3,11 @@ function bobthefish_display_colors -a color_scheme -d 'Print example prompt colo
set -l color_schemes default light \ set -l color_schemes default light \
solarized solarized-light \ solarized solarized-light \
base16 base16-light \ base16 base16-light \
gruvbox zenburn \ gruvbox gruvbox-light zenburn \
dracula nord \ dracula nord \
catppuccin-latte catppuccin-frappe \ catppuccin-latte catppuccin-frappe \
catppuccin-macchiato catppuccin-mocha \ catppuccin-macchiato catppuccin-mocha \
jellybeans \
terminal terminal-dark-white \ terminal terminal-dark-white \
terminal-light terminal-light-black \ terminal-light terminal-light-black \
terminal2 terminal2-dark-white \ terminal2 terminal2-dark-white \
@ -131,6 +132,10 @@ function bobthefish_display_colors -a color_scheme -d 'Print example prompt colo
echo -ns $ruby_glyph rvm ' ' echo -ns $ruby_glyph rvm ' '
__bobthefish_finish_segments __bobthefish_finish_segments
__bobthefish_start_segment $color_nvm
echo -ns $ruby_glyph nvm ' '
__bobthefish_finish_segments
__bobthefish_start_segment $color_virtualfish __bobthefish_start_segment $color_virtualfish
echo -ns $virtualenv_glyph virtualfish ' ' echo -ns $virtualenv_glyph virtualfish ' '
__bobthefish_finish_segments __bobthefish_finish_segments

@ -15,42 +15,8 @@
# #
# https://github.com/ryanoasis/nerd-fonts # 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_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 # Helper methods
@ -78,10 +44,13 @@ function __bobthefish_escape_regex -a str -d 'A backwards-compatible `string esc
end end
function __bobthefish_git_branch -S -d 'Get the current git branch (or commitish)' 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/' '') set -l branch (command git symbolic-ref HEAD 2>/dev/null | string replace -r '^refs/heads/' '')
and begin and begin
[ -n "$theme_git_default_branches" ] [ -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' ] [ "$theme_display_git_master_branch" != 'yes' -a "$theme_display_git_default_branch" != 'yes' ]
and contains $branch $theme_git_default_branches and contains $branch $theme_git_default_branches
@ -97,12 +66,11 @@ function __bobthefish_git_branch -S -d 'Get the current git branch (or commitish
and return and return
end end
set -l tag (command git describe --tags --exact-match 2>/dev/null) # If we've already shown a tag we don't need to show a detached branch
and echo "$tag_glyph $tag" if [ -z "$tag" ]
and return set -l branch (command git show-ref --head -s --abbrev | head -n1 2>/dev/null)
echo "$detached_glyph $branch"
set -l branch (command git show-ref --head -s --abbrev | head -n1 2>/dev/null) end
echo "$detached_glyph $branch"
end end
function __bobthefish_hg_branch -S -d 'Get the current hg branch' function __bobthefish_hg_branch -S -d 'Get the current hg branch'
@ -158,6 +126,10 @@ function __bobthefish_git_project_dir -S -a real_pwd -d 'Print the current git p
[ -z "$git_toplevel" ] [ -z "$git_toplevel" ]
and return 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 # If there are no symlinks, just use git toplevel
switch $real_pwd/ switch $real_pwd/
case $git_toplevel/\* case $git_toplevel/\*
@ -357,7 +329,7 @@ function __bobthefish_start_segment -S -d 'Start a prompt segment'
set __bobthefish_current_bg $bg set __bobthefish_current_bg $bg
end 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_color $color_path
set -l segment_basename_color $color_path_basename set -l segment_basename_color $color_path_basename
@ -381,7 +353,9 @@ function __bobthefish_path_segment -S -a segment_dir -d 'Display a shortened for
set directory (__bobthefish_basename "$segment_dir") set directory (__bobthefish_basename "$segment_dir")
end end
echo -n $parent [ "$theme_show_project_parent" != "no" -o "$path_type" != "project" ]
and echo -n $parent
set_color -b $segment_basename_color set_color -b $segment_basename_color
echo -ns $directory ' ' echo -ns $directory ' '
end end
@ -660,13 +634,13 @@ function __bobthefish_prompt_aws_vault_profile -S -d 'Show AWS Vault profile'
[ "$theme_display_aws_vault_profile" = 'yes' ] [ "$theme_display_aws_vault_profile" = 'yes' ]
or return or return
[ -n "$AWS_VAULT" -a -n "$AWS_SESSION_EXPIRATION" ] [ -n "$AWS_VAULT" -a -n "$AWS_CREDENTIAL_EXPIRATION" ]
or return or return
set -l profile $AWS_VAULT set -l profile $AWS_VAULT
set -l now (date --utc +%s) 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_mins (math "floor(( $expiry - $now ) / 60)")
set -l diff_time $diff_mins"m" set -l diff_time $diff_mins"m"
@ -848,6 +822,63 @@ function __bobthefish_prompt_rubies -S -d 'Display current Ruby information'
echo -ns $ruby_glyph $ruby_version ' ' echo -ns $ruby_glyph $ruby_version ' '
end 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' function __bobthefish_virtualenv_python_version -S -d 'Get current Python version'
switch (python --version 2>&1 | tr '\n' ' ') switch (python --version 2>&1 | tr '\n' ' ')
case 'Python 2*PyPy*' case 'Python 2*PyPy*'
@ -862,14 +893,29 @@ function __bobthefish_virtualenv_python_version -S -d 'Get current Python versio
end 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." 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" ] [ "$theme_display_virtualenv" = 'no' -o -z "$VIRTUAL_ENV" -a -z "$CONDA_DEFAULT_ENV" ]
and return and return
set -l version_glyph (__bobthefish_virtualenv_python_version) set -l version_glyph (__bobthefish_virtualenv_python_version)
set -l prompt_style 'default'
if [ "$version_glyph" ] if [ "$version_glyph" ]
__bobthefish_start_segment $color_virtualfish __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 end
if [ "$VIRTUAL_ENV" ] if [ "$VIRTUAL_ENV" ]
@ -987,7 +1033,7 @@ function __bobthefish_prompt_hg -S -a hg_root_dir -a real_pwd -d 'Display the ac
set flag_colors $color_repo_dirty set flag_colors $color_repo_dirty
end end
__bobthefish_path_segment $hg_root_dir __bobthefish_path_segment $hg_root_dir project
__bobthefish_start_segment $flag_colors __bobthefish_start_segment $flag_colors
echo -ns $hg_glyph ' ' echo -ns $hg_glyph ' '
@ -1028,7 +1074,7 @@ function __bobthefish_prompt_git -S -a git_root_dir -a real_pwd -d 'Display the
if [ "$theme_display_git_untracked" != 'no' ] if [ "$theme_display_git_untracked" != 'no' ]
set -l show_untracked (command git config --bool bash.showUntrackedFiles 2>/dev/null) set -l show_untracked (command git config --bool bash.showUntrackedFiles 2>/dev/null)
if [ "$show_untracked" != 'false' ] 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" ] if [ "$new" ]
set new "$git_untracked_glyph" set new "$git_untracked_glyph"
end end
@ -1047,7 +1093,7 @@ function __bobthefish_prompt_git -S -a git_root_dir -a real_pwd -d 'Display the
set flag_colors $color_repo_staged set flag_colors $color_repo_staged
end end
__bobthefish_path_segment $git_root_dir __bobthefish_path_segment $git_root_dir project
__bobthefish_start_segment $flag_colors __bobthefish_start_segment $flag_colors
echo -ns (__bobthefish_git_branch) $flags ' ' echo -ns (__bobthefish_git_branch) $flags ' '
@ -1129,7 +1175,7 @@ function __bobthefish_prompt_git -S -a git_root_dir -a real_pwd -d 'Display the
end end
function __bobthefish_prompt_dir -S -a real_pwd -d 'Display a shortened form of the current directory' 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 end
@ -1156,6 +1202,8 @@ function fish_prompt -d 'bobthefish, a fish theme optimized for awesome'
# Start each line with a blank slate # Start each line with a blank slate
set -l __bobthefish_current_bg set -l __bobthefish_current_bg
set -l real_pwd (__bobthefish_pwd)
# Status flags and input mode # Status flags and input mode
__bobthefish_prompt_status $last_status __bobthefish_prompt_status $last_status
@ -1174,11 +1222,11 @@ function fish_prompt -d 'bobthefish, a fish theme optimized for awesome'
__bobthefish_prompt_nix __bobthefish_prompt_nix
__bobthefish_prompt_desk __bobthefish_prompt_desk
__bobthefish_prompt_rubies __bobthefish_prompt_rubies
__bobthefish_prompt_golang $real_pwd
__bobthefish_prompt_virtualfish __bobthefish_prompt_virtualfish
__bobthefish_prompt_virtualgo __bobthefish_prompt_virtualgo
__bobthefish_prompt_node __bobthefish_prompt_node
set -l real_pwd (__bobthefish_pwd)
# VCS # VCS
set -l git_root_dir (__bobthefish_git_project_dir $real_pwd) 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: # See "Right prompt options" in README.md for configuration options
# set -g theme_date_format "+%a %H:%M"
# set -g theme_date_timezone America/Los_Angeles
function __bobthefish_cmd_duration -S -d 'Show command duration' function __bobthefish_cmd_duration -S -d 'Show command duration'
[ "$theme_display_cmd_duration" = "no" ] [ "$theme_display_cmd_duration" = "no" ]

@ -1,8 +1,4 @@
# You can override some default title options in your config.fish: # See "Title options" in README.md for configuration options
# 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
function __bobthefish_title_user -S -d 'Display actual user if different from $default_user' function __bobthefish_title_user -S -d 'Display actual user if different from $default_user'
if [ "$theme_title_display_user" = 'yes' ] if [ "$theme_title_display_user" = 'yes' ]

Loading…
Cancel
Save