The Fishshell Framework
Oh My Fish provides core infrastructure to allow you to install packages which extend or modify the look of your shell. It's fast, extensible and easy to use.
You can get started right away with the default setup by running this in your terminal:
curl -L https://get.oh-my.fish | fish
This will download the installer script and start the installation. Alternatively, you can download the installer and customize your install:
curl -L https://get.oh-my.fish > install
fish install --path=~/.local/share/omf --config=~/.config/omf
You can verify the integrity of the downloaded installer by verifying the script against this checksum:
92ca680df48640e744b361d376194c5f5f8d6b4f1ac775d22417a0d8a8108767 install
You can also install Oh My Fish with Git or with an offline source tarball downloaded from the releases page:
# with git
$ git clone https://github.com/oh-my-fish/oh-my-fish
$ cd oh-my-fish
$ bin/install --offline
# with a tarball
$ curl -L https://get.oh-my.fish > install
$ fish install --offline=omf.tar.gz
Run install --help
for a complete list of install options you can customize.
Oh My Fish includes a small utility omf
to fetch and install new packages and themes.
Update Oh My Fish, all package repositories, and all installed packages.
- When called without arguments, update core and all installed packages.
- You can choose to update only the core, by running
omf update omf
. - For selective package update, list only the names of packages you wish to update. You may still include "omf" in the list to update the core as well.
Install one or more packages.
- You can install packages directly by URL via
omf install URL
- When called without arguments, install missing packages from bundle.
Manage user-installed package repositories. Package repositories are where packages come from used by commands like omf install
. By default the official repository is always installed and available.
List installed packages.
Apply a theme. To list available themes, type omf theme
. You can also preview available themes before installing.
Remove a theme or package.
Packages can use uninstall hooks, so custom cleanup of resources can be done when uninstalling it. See Uninstall for more information.
Reload Oh My Fish and all plugins by using exec
to replace current shell process with a brand new.
This command tries to be as safe as possible, mitigating side-effects caused by
exec
and preventing the reload in case of background processes.
Scaffold out a new package or theme.
This creates a new directory under
$OMF_CONFIG/{pkg | themes}/
with a template.
Searches Oh My Fish's database for a given package, theme or both. It also supports fuzzy search, so if you are not sure of the name you can simply omf search simple
.
Gets or changes the update channel.
Two channels are available by default: the stable
channel provides stable updates with the latest tagged version of Oh My Fish, and dev
which provides the latest changes under development. The update channel currently set determines what version omf update
will upgrade to.
Use to troubleshoot before opening an issue.
Uninstall Oh My Fish.
Oh My Fish installer places its startup code in your fish config file (~/.config/fish/config.fish
).
Every time you open a new shell, the startup code initializes Oh My Fish installation path and the config path (~/.config/omf
by default), sourcing the init.fish
script afterwards, which autoloads packages, themes and your custom init files.
For more information check the FAQ.
The $OMF_CONFIG
directory represents the user state of Oh My Fish. It is the perfect
candidate for being added to your dotfiles and/or checked out to version control. There are four important files:
theme
- The current themebundle
- List of currently installed packages/themesinit.fish
- Custom script sourced after shell startbefore.init.fish
- Custom script sourced before shell startkey_bindings.fish
- Custom key bindings where you can use thebind
command freely
It's highly recommended that your custom startup commands go into init.fish
file instead of ~/.config/fish/config.fish
, as this allows you to keep the whole $OMF_CONFIG
directory under version control.
If you need startup commands to be run before Oh My Fish begins loading plugins, place them in before.init.fish
instead. If you're unsure, it is usually best to put things in init.fish
.
One of the most common startup commands used in init.fish
is variables definition. Quite likely, such variables need to be available in any shell session. To achieve this, define them globally. For example:
# Golang developers might need this one
set -xg GOPATH $HOME/gocode
# Python developers otherwise
set -xg PYTHONDONTWRITEBYTECODE 1
Every time a package/theme is installed or removed, the bundle
file is updated. You can also edit it manually and run omf install
afterwards to satisfy the changes. Please note that while packages/themes added to the bundle get automatically installed, a package/theme removed from bundle isn't removed from user installation.
Oh My Fish uses an advanced and well defined plugin architecture to ease plugin development, including init/uninstall hooks, function and completion autoloading. See the packages documentation for more details.