---
title: "Oh My Fish (OMF) - Install Themes & Plugins"
description: "How to install and use Oh My Fish framework for Fish Shell, including themes, plugins, and when to consider Fisher as an alternative."
date: 2026-02-24
categories: ["vps"]
tags: ["fish-shell"]
---

import Notice from "@components/widgets/Notice.astro";

Oh My Fish (OMF) is a framework for Fish Shell, similar to what Oh My Zsh is for Zsh. It gives you a command-line tool (`omf`) for installing themes and plugins from a curated repository. I used it briefly before switching to Fisher, and I'll be upfront about why.

<Notice type="warning" title="OMF maintenance status">
Oh My Fish's GitHub page carries a warning that the project has been unmaintained for years and some packages are broken. It still works for many use cases, but if you're starting fresh, [Fisher](/best-fish-shell-plugins/) is the more actively maintained option. I'm covering OMF here because it's still widely referenced in guides and forums.
</Notice>

## Install Oh My Fish

Make sure you have [Fish Shell installed](/install-fish-shell-ubuntu/) first. Then:

```fish
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish
```

The installer downloads OMF and sets it up in `~/.local/share/omf/` with config in `~/.config/omf/`.

To verify:

```fish
omf version
```

### Offline installation

If you need to install without internet access (servers, air-gapped environments):

```bash
git clone https://github.com/oh-my-fish/oh-my-fish
cd oh-my-fish
bin/install --offline
```

## OMF basics

All management happens through the `omf` command.

### Install a package or theme

```fish
omf install bobthefish
omf install z
omf install bass
```

### List installed packages

```fish
omf list
```

### Apply a theme

```fish
omf theme bobthefish
```

To see available themes:

```fish
omf theme
```

### Update everything

```fish
omf update
```

### Remove a package

```fish
omf remove z
```

### Uninstall OMF entirely

```fish
omf destroy
```

## Popular OMF themes

These are themes that still work well despite OMF's maintenance gaps.

### bobthefish

The most popular OMF theme. It's a Powerline-style prompt showing git status, virtual environments, Node version, and more. Needs a Nerd Font or Powerline font.

```fish
omf install bobthefish
```

Configure it through environment variables:

```fish
set -g theme_display_git yes
set -g theme_display_git_dirty yes
set -g theme_display_docker_machine yes
set -g theme_color_scheme dracula
set -g theme_nerd_fonts yes
```

### agnoster

A port of the Zsh Agnoster theme. Two-line prompt with Powerline characters, git info, and virtualenv support.

```fish
omf install agnoster
```

### clearance

A clean, minimal theme. No special fonts needed.

```fish
omf install clearance
```

### lambda

Minimal theme with a λ prompt character.

```fish
omf install lambda
```

You can preview OMF themes (with screenshots) in the [Oh My Fish themes documentation](https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md).

## Useful OMF plugins

### bass

Runs Bash scripts and captures their environment variable changes. Useful for tools that only support Bash configuration:

```fish
omf install bass
bass source ~/.nvm/nvm.sh
```

This is one of the more genuinely useful OMF packages. It bridges the gap between [Fish's non-POSIX syntax](/fish-shell-vs-bash-vs-zsh/) and Bash-only tools.

### z

Directory jumping similar to [zoxide](/zoxide/). Tracks the directories you visit and lets you jump to them with partial names:

```fish
omf install z
z projects
```

I'd recommend zoxide over this — it's faster, works across shells, and is actively maintained. But if you want everything through OMF, the z plugin works.

### fish-spec

A testing framework for Fish functions. Useful if you write Fish plugins or complex functions:

```fish
omf install fish-spec
```

### extract

A universal archive extraction tool. `extract file.tar.gz` instead of remembering tar flags:

```fish
omf install extract
```

## OMF configuration files

OMF uses two config files:

**`~/.config/omf/bundle`** — lists installed packages:

```
package bass
package z
theme bobthefish
```

**`~/.config/omf/init.fish`** — runs at startup. Add your OMF-specific configuration here:

```fish
# ~/.config/omf/init.fish
set -g theme_nerd_fonts yes
set -g theme_color_scheme dracula
```

Sharing your `~/.config/omf/` directory across machines lets you replicate your setup with `omf install`.

## OMF vs Fisher

This is the real question. Here's how they compare:

| | Oh My Fish | Fisher |
|---|---|---|
| Status | Unmaintained | Actively maintained |
| Approach | Framework (has its own init) | Plugin manager only |
| Startup impact | Adds some overhead | Zero overhead |
| Plugin format | OMF-specific packages | Standard Fish plugins |
| Compatibility | OMF packages only | OMF packages + any Fish plugin |
| Config | `omf` commands + config files | `fisher` commands + fish_plugins file |
| Themes | Built-in theme system | Install prompt plugins directly |

Fisher is faster, maintained, and can install OMF-compatible packages. The main reason to use OMF today is if you already have a working OMF setup and don't want to migrate.

### Migrating from OMF to Fisher

If you want to switch:

1. Note your installed packages: `omf list`
2. Install Fisher:
   ```fish
   curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
   ```
3. Install equivalents through Fisher. Most OMF packages can be installed directly:
   ```fish
   fisher install oh-my-fish/theme-bobthefish
   ```
4. Uninstall OMF: `omf destroy`

Fisher can install packages from the OMF repository by using the `oh-my-fish/` prefix. Not every package works, but the popular ones do.

## Creating OMF packages

If you want to create your own package or theme:

```fish
omf new plugin my-plugin
omf new theme my-theme
```

This creates a scaffold in `~/.config/omf/pkg/my-plugin/` or `~/.config/omf/themes/my-theme/`.

Plugin structure:

```
my-plugin/
├── completions/
│   └── my-plugin.fish
├── functions/
│   └── my-plugin.fish
├── init.fish
└── uninstall.fish
```

`init.fish` runs when the plugin loads. `uninstall.fish` runs when it's removed.

## Troubleshooting

**OMF commands not found** — restart your shell after installation, or run `source ~/.config/fish/conf.d/omf.fish`.

**Theme not changing** — some themes need a Nerd Font. Install MesloLGS NF and set it in your terminal.

**Plugin errors after update** — OMF's unmaintained status means some plugins may break. Check the plugin's GitHub page for patches, or find a Fisher-compatible alternative.

## Related guides

- [Best Fish Shell plugins (Fisher)](/best-fish-shell-plugins/) — the recommended plugin manager
- [Fish Shell themes and prompts](/fish-shell-themes-prompts/) — Tide, Starship, Pure, Hydro
- [Fish Shell vs Zsh](/fish-shell-vs-zsh/) — if you're comparing OMF to Oh My Zsh
- [Best Oh My Zsh plugins](/best-oh-my-zsh-plugins/) — the Zsh equivalent
- [Install Fish Shell on Ubuntu](/install-fish-shell-ubuntu/) — getting started
- [Fish Shell on macOS](/fish-shell-macos-setup/) — Mac setup