The Fish Shell Framework
Go to file
Justin Hileman e2c3343ebb Merge pull request #481 from scorphus/issue-328-docs
Docs on how to set variables in `init.fish` (#328)
2017-02-03 07:38:57 -08:00
bin Normalize redirection syntax (#459) 2016-12-17 20:26:46 -06:00
db Added emoji-powerline theme (#469) 2017-01-21 01:57:55 -02:00
docs [generate-themes-doc.fish] Ignore '.git' suffix on theme URLs (#472) 2017-01-21 23:25:00 -02:00
lib Normalize redirection syntax (#459) 2016-12-17 20:26:46 -06:00
pkg oops (#470) 2017-01-06 17:15:36 -06:00
templates Evaluate OMF_PATH at init time to fix #136 (#348) 2016-06-15 15:20:49 -03:00
tests Remove themes doc travis test 2016-01-24 17:51:24 -02:00
tools [generate-themes-doc.fish] Ignore '.git' suffix on theme URLs (#472) 2017-01-21 23:25:00 -02:00
.gitattributes Ensure Fish scripts always use LF line endings, otherwise multiline commands break (#458) 2016-12-17 15:29:27 -06:00
.gitignore Fish-spec plugin 2015-12-19 11:46:09 +00:00
.travis.yml Refactor installer and config setup (#361) 2016-08-08 09:00:17 -05:00
AUTHORS Prepare release 4 (#468) 2017-01-04 14:42:56 -06:00
CHANGELOG.md Prepare release 4 (#468) 2017-01-04 14:42:56 -06:00
CONTRIBUTING.md CONTRIBUTING: give some fresh air (#373) 2016-08-03 08:46:55 -03:00
Dockerfile Normalize redirection syntax (#459) 2016-12-17 20:26:46 -06:00
init.fish Implement update channels to introduce release versioning (#293) 2016-10-20 18:10:13 -05:00
LICENSE chore: bump LICENSE year (#371) 2016-07-24 01:32:25 -03:00
README.md Docs on how to set variables in init.fish (#328) 2017-02-02 22:56:19 -02:00

The Fishshell Framework

MIT License Fish Shell Version Travis Build Status Slack Status

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.

Also in 
🇷🇺
🇨🇳
🇺🇦


Installation

You can get started right away with the default setup by running this in your terminal:

curl -L http://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 http://get.oh-my.fish > install
fish install --path=~/.local/share/omf --config=~/.config/omf

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 http://get.oh-my.fish > install
$ fish install --offline=omf.tar.gz

Run install --help for a complete list of install options you can customize.

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 can use uninstall hooks, so custom cleanup of resources can be done when uninstalling it. 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 search -t|--theme / -pkg|--package <name>

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.

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 channel

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.

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 theme
  • bundle - List of currently installed packages/themes
  • init.fish - Custom script sourced after shell start
  • before.init.fish - Custom script sourced before shell start
  • key_bindings.fish - Custom key bindings where you can use the bind 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.

Setting variables 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

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 hooks, function and completion autoloading. See the packages documentation for more details.