# bobthefish: Git-aware Powerline theme for fish

> bobthefish is a Powerline-style fish theme for Oh My Fish users who want compact paths, repository state, language versions, and shell status in one prompt. It offers extensive display controls, but its preferred presentation depends on compatible terminal fonts.

**oh-my-fish/theme-bobthefish** — A Powerline-style, Git-aware fish theme optimized for awesome.

- Repository: https://github.com/oh-my-fish/theme-bobthefish
- Stars: 1,528 · Forks: 228
- Language: Shell
- License: MIT
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/oh-my-fish-theme-bobthefish

## Why bobthefish suits development shells

bobthefish solves a prompt presentation problem rather than a shell execution problem. It replaces the standard fish prompt with a compact summary of the user's location, shell state, runtime environment, and version-control status. Its intended audience is fish users who already work with Oh My Fish and want relevant context without keeping another status window beside the terminal.

The prompt includes a greeting, a timestamp on the right, abbreviated parent directories, the current project or repository name, branch information, and status markers for the working tree. It also reports selected runtime environments, including Ruby, Python virtual environments, Node.js version managers, and Go. Shell-level state appears through markers for a failed previous command, private mode, superuser privileges, background jobs, and vi mode.

This is a dense theme rather than a minimal one. The README says it is based loosely on agnoster, and its feature list emphasizes colored status indicators. That design suits terminals where users can recognize separators, flags, and color changes quickly. It is less suitable when every prompt character consumes meaningful screen space or when the terminal cannot render the required symbols consistently.

## How bobthefish builds repository context

The central mechanism is a prompt assembled from the current directory, shell variables, runtime managers, and version-control state. bobthefish abbreviates parent directory names while preserving the current project name, then adds the path relative to the project root. Fish's `fish_prompt_pwd_dir_length` setting controls the abbreviated path. A value of `0` shows the full path, while `1`, the default, keeps the first character of each parent directory name. Any other number retains up to that many characters.

Inside a Git or Mercurial project, the prompt identifies the repository branch or detached head. Git status uses several glyphs: `*` for a dirty working directory, `…` for untracked files, `~` for staged changes, `$` for stashed changes, `-` for unpulled commits, `+` for unpushed commits, and `±` when unpulled and unpushed commits are both present. Fossil has its own documented status set, including `*`, `…`, and `!` for conflicts.

Mercurial support is narrower. The README explicitly notes that not all listed Git status flags have been implemented for `hg`. Its documentation also states that the project parent path can be hidden with `theme_show_project_parent no`. This makes bobthefish more than a colored directory name, but the different version-control behavior means it should not be treated as a complete replacement for commands such as `git status` or `hg status`.

## Installing bobthefish with Oh My Fish

Oh My Fish must already be installed before bobthefish is added. The README gives this installation command:

```fish
omf install bobthefish
```

After the command completes, the theme should be installed through Oh My Fish. The README does not document a separate activation command such as `omf use bobthefish`, so it should not be added to the documented setup without checking the installed Oh My Fish version.

bobthefish normally depends on a Powerline-patched font. A terminal that cannot use one can select the theme's plaintext fallback:

```fish
set -g theme_powerline_fonts no
```

For a terminal configured with a Nerd Font, the README documents this setting:

```fish
set -g theme_nerd_fonts yes
```

These variables control glyph selection rather than installation itself. If separators or status symbols appear as boxes, occupy incorrect widths, or do not match the README examples, check the active terminal font and these settings first. The README links to Powerline and Nerd Font resources but does not prescribe a particular font package or terminal-specific configuration command.

## Creating a first bobthefish configuration

The README recommends placing overrides in a fish configuration file such as `~/.config/fish/conf.d/bobthefish.fish`. A concise starting configuration can enable Nerd Fonts, select the dark color scheme, show the username during SSH sessions, and identify the default local user:

```fish
set -g theme_nerd_fonts yes
set -g theme_color_scheme dark
set -g theme_display_user ssh
set -g default_user bobthecow
```

Here, `ssh` means the username appears only during an SSH session. Defining `default_user` as `bobthecow` suppresses the username when it matches that value and shows it when the active account differs. Replace `bobthecow` with the relevant local account name rather than copying it as a universal setting.

After saving the file, open a new fish session so configuration is loaded, then enter a Git repository. Based on the documented prompt mechanism, the display should include the project name and applicable branch or status information. Exact spacing depends on the terminal and selected color scheme. The README does not provide a command for dumping bobthefish's resolved configuration, so checking the fish variables directly remains necessary for diagnosing settings that do not take effect.

## Controlling paths, cursor placement, and shell state

The theme gives separate controls for path length, project paths, cursor placement, and shell status. `theme_project_dir_length` abbreviates the portion of the path relative to the project root and defaults to `0`. A nonzero value retains the requested number of characters. Setting `theme_show_project_parent no` limits the project portion to the project directory name, which can shorten prompts inside deeply nested repositories.

Cursor placement is controlled by `theme_newline_cursor`. The value `yes` places the cursor on the line after the prompt, while `clean` suppresses the caret on that new line. The `theme_newline_prompt` variable can set a custom marker for that layout. Its default is the chevron-right glyph, or `>` when Powerline fonts are disabled.

Command and session state are configurable as well. `theme_show_exit_status yes` displays a non-zero exit code beside the exclamation mark. `theme_display_jobs_verbose yes` displays the number of running background jobs next to the percent sign. The vi indicator can be forced on with `theme_display_vi yes` or hidden with `no`; by default, it appears when vi or hybrid key bindings are enabled.

`theme_avoid_ambiguous_glyphs yes` avoids ambiguous-width characters when a terminal does not handle them correctly. This changes the prompt's symbols but does not guarantee correct rendering in every font, locale, and terminal combination.

## Runtime versions and environment indicators

bobthefish can surface language and tool context, but each integration is independently configurable. Ruby version information is shown by default unless it is the system Ruby version. The documented command to disable it is:

```fish
set -g theme_display_ruby no
```

Python information is shown when the theme considers the environment relevant, including virtualenv or Conda context. `set -g theme_display_virtualenv no` disables that display. The README also advises setting `VIRTUAL_ENV_DISABLE_PROMPT` because the default virtualenv prompt does not work well with fish. fish users should add that setting to their shell environment if they rely on the integration.

Node.js support is disabled by default and can be enabled with `theme_display_node yes`. The README connects this feature with NVM, FNM, `.nvmrc`, and `.node-version`. Go output can be disabled with `theme_display_go no`, while `verbose` shows both the required and current Go versions. Screen session information can be hidden through `theme_display_screen no`.

Docker Machine information is available, while Vagrant status is disabled by default. Enabling `theme_display_vagrant yes` exposes Vagrant state, but the README limits the documented providers to VirtualBox and VMWare. These integrations make the prompt useful in heterogeneous development environments, although each additional environment increases the amount of information that can compete for terminal width.

## Compatibility limits, licensing, and upgrade status

The main constraints are Oh My Fish dependency, terminal rendering, and uneven version-control coverage. bobthefish is documented as an Oh My Fish package installed with `omf install bobthefish`, not as a standalone theme installer. Its preferred appearance requires compatible patched fonts, although `theme_powerline_fonts no` provides a plaintext fallback. Merchandise, browser rendering, and synchronization scenarios are outside the repository's stated scope.

Git has the most detailed documented status vocabulary. Fossil covers dirty, untracked, and conflict states. The README explicitly says that not all listed markers are implemented for Mercurial. A developer who depends on precise `hg` state should check the actual prompt against `hg status` before relying on it.

The project uses the MIT license. That license permits use, copying, modification, and distribution subject to its conditions, but it does not guarantee compatibility with a future fish or Oh My Fish release. The repository is not archived, and the last push was on 2026-05-20. It has no GitHub releases, so there is no release-note history for checking upgrade changes. The repository layout places shell implementation files under `functions/` and `hooks/`, with `LICENSE` and `README.md` at the top level.

## Conclusion

Adopt bobthefish if you use fish through Oh My Fish and want a dense, configurable prompt with repository context. Do not adopt it if you need a terminal-independent plain-text theme or expect every Mercurial status indicator to behave like its Git equivalent. Verify first that Oh My Fish is installed, that the terminal renders the configured glyphs correctly, and that the theme file under `~/.config/fish/conf.d/bobthefish.fish` is loaded by fish.

## FAQ

### How do I install bobthefish?

Install Oh My Fish first, then run `omf install bobthefish`. Configure a Powerline-patched font, or set `theme_powerline_fonts` to `no` to use plaintext fallback glyphs.

### How do I enable Nerd Fonts in bobthefish?

Set `theme_nerd_fonts` to `yes` in a fish configuration file such as `~/.config/fish/conf.d/bobthefish.fish`. The terminal itself must already use a compatible Nerd Font.

### How do I hide the username in the bobthefish prompt?

Set `theme_display_user` to `no`. Set it to `ssh` to show the username only during SSH sessions, or define `default_user` so the name appears when it differs from that account.

## Sources

- [Issues](https://github.com/oh-my-fish/theme-bobthefish/issues)
- [License: MIT](https://github.com/oh-my-fish/theme-bobthefish/blob/master/LICENSE)
- [oh-my-fish/theme-bobthefish on GitHub](https://github.com/oh-my-fish/theme-bobthefish)
- [README](https://github.com/oh-my-fish/theme-bobthefish/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/oh-my-fish-theme-bobthefish
