bin | ||
db | ||
docs | ||
lib | ||
pkg | ||
templates | ||
tests | ||
tools | ||
.gitignore | ||
.travis.yml | ||
AUTHORS | ||
CONTRIBUTING.md | ||
Dockerfile | ||
init.fish | ||
LICENSE | ||
README.md |
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.
Installation
curl -L https://github.com/oh-my-fish/oh-my-fish/raw/master/bin/install | fish
omf help
Or download and run it yourself:
curl -L https://github.com/oh-my-fish/oh-my-fish/raw/master/bin/install > install
fish install
Getting Started
Oh My Fish includes a small utility omf
to fetch and install new packages and themes.
omf update
[omf]
[<package>...]
Update the framework and 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.
omf install
[<name>|<url>]
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.
omf list
List installed packages.
omf theme
<theme>
Apply a theme. To list available themes, type omf theme
. You can also preview available themes before installing.
omf remove
<name>
Remove a theme or package.
Packages subscribed to
uninstall_<pkg>
events are notified before the package is removed, so custom cleanup of resources can be done. See Uninstall for more information.
omf reload
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.
omf new pkg | theme
<name>
Scaffold out a new package or theme.
This creates a new directory under
$OMF_CONFIG/{pkg | themes}/
with a template.
omf submit
pkg/<name>
[<url>]
Add a new package. To add a theme, use omf submit
themes/<name>
<url>
.
Please note that the [<url>]
portion of the command should be the url to your repo on github. For example, with the example
plugin, the command run should be omf submit pkg/example https://github.com/oh-my-fish/example
.
Make sure to send us a PR to update the registry.
omf doctor
Use to troubleshoot before opening an issue.
omf destroy
Uninstall Oh My Fish.
Advanced
Oh My Fish installer places its startup code in your fish config file (~/.config/fish/config.fish
).
Startup
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.
Dotfiles
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 start
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
.
About the bundle
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.
Creating Packages
Oh My Fish uses an advanced and well defined plugin architecture to ease plugin development, including init/uninstall events and function autoloading. See the documentation for more details.