2024-09-18 00:53:06 +00:00
> ⚠️ Oh My Fish has been unmaintained for years, and certain parts of it may not work for you. A few themes and packages are currently broken, and the code is due a significant overhaul. The current set of maintainers have ran out of steam, so if you are interested in becoming a maintainer send an email to *oh-my-fish [at] googlegroups.com*.
2015-11-01 02:05:48 +00:00
< img src = "https://cdn.rawgit.com/oh-my-fish/oh-my-fish/e4f1c2e0219a17e2c748b824004c8d0b38055c16/docs/logo.svg" align = "left" width = "192px" height = "192px" / >
2015-09-27 03:19:20 +00:00
< img align = "left" width = "0" height = "192px" hspace = "10" / >
2015-08-26 17:04:34 +00:00
2015-09-05 15:45:24 +00:00
> The <a href="http://fishshell.com">Fishshell</a> Framework
2015-08-26 15:20:13 +00:00
2022-03-08 22:28:08 +00:00
[![MIT License ](https://img.shields.io/badge/license-MIT-007EC7.svg?style=flat-square )](/LICENSE) [![Fish Shell Version ](https://img.shields.io/badge/fish-≥v2.2.0-007EC7.svg?style=flat-square )](http://fishshell.com) [![Build ](https://github.com/oh-my-fish/oh-my-fish/workflows/Build/badge.svg )](https://github.com/oh-my-fish/oh-my-fish/actions?query=workflow%3ABuild)
2015-09-26 15:59:14 +00:00
2015-08-26 15:20:13 +00:00
2016-01-14 01:07:57 +00:00
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.
2015-08-26 16:49:23 +00:00
2016-07-24 04:25:01 +00:00
> Also in
2020-11-30 18:34:00 +00:00
> <a href="docs/es-ES/README.md">🇪🇸</a>
> <a href="docs/nl-NL/README.md">🇳🇱</a>
> <a href="docs/pt-BR/README.md">🇧🇷</a>
2016-07-24 04:25:01 +00:00
> <a href="docs/ru-RU/README.md">🇷🇺</a>
2017-01-04 19:57:32 +00:00
> <a href="docs/uk-UA/README.md">🇺🇦</a>
2020-11-30 18:34:00 +00:00
> <a href="docs/zh-CN/README.md">🇨🇳</a>
2013-05-17 13:05:41 +00:00
2016-07-24 04:25:01 +00:00
< br >
2015-09-11 12:23:05 +00:00
2018-12-09 00:54:06 +00:00
## Table of contents
* [Installation ](#installation )
* [Getting Started (command descriptions) ](#getting-started )
* [Advanced ](#advanced )
* [Startup ](#startup )
* [Dotfiles ](#dotfiles )
* [Creating Packages ](#creating-packages )
2016-01-14 01:07:57 +00:00
## Installation
2013-05-17 13:05:41 +00:00
2016-08-08 14:00:17 +00:00
You can get started right away with the default setup by running this in your terminal:
```fish
2021-11-05 14:38:37 +00:00
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish
2016-08-08 14:00:17 +00:00
```
This will download the installer script and start the installation. Alternatively, you can download the installer and customize your install:
2015-08-26 17:04:34 +00:00
```fish
2021-11-05 14:38:37 +00:00
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install > install
2016-08-08 17:11:18 +00:00
fish install --path=~/.local/share/omf --config=~/.config/omf
2015-08-26 15:20:13 +00:00
```
2013-05-17 13:05:41 +00:00
2017-04-26 20:00:45 +00:00
You can verify the integrity of the downloaded installer by verifying the script against [this checksum ](bin/install.sha256 ):
```
2023-01-22 18:03:25 +00:00
curl -sL https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install.sha256 | shasum -a 256 --check
2017-04-26 20:00:45 +00:00
```
2016-08-08 14:00:17 +00:00
You can also install Oh My Fish with Git or with an offline source tarball downloaded from the [releases page][releases]:
2015-08-26 15:20:13 +00:00
2015-08-26 17:04:34 +00:00
```fish
2016-08-08 14:00:17 +00:00
# with git
$ git clone https://github.com/oh-my-fish/oh-my-fish
$ cd oh-my-fish
$ bin/install --offline
# with a tarball
2021-11-05 14:38:37 +00:00
$ curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install > install
2016-08-08 14:00:17 +00:00
$ fish install --offline=omf.tar.gz
2015-08-26 15:20:13 +00:00
```
2016-08-08 14:00:17 +00:00
Run `install --help` for a complete list of install options you can customize.
2017-08-24 07:51:18 +00:00
#### Requirements
- **fish** shell, version 2.2 or later
- **git**, version 1.9.5 or later
2017-08-24 08:00:23 +00:00
#### Known Issues
2017-11-24 03:00:04 +00:00
- Due to a regression bug in fish 2.6 with some terminal emulators, right prompts make the shell unusable.
OMF's `default` theme features a right prompt, so it's necessary to use an alternative theme until a fix is released.
2017-08-24 08:00:23 +00:00
(see [#541 ](https://github.com/oh-my-fish/oh-my-fish/issues/541 ))
2016-08-08 14:00:17 +00:00
## Getting Started
2015-08-26 15:20:13 +00:00
Oh My Fish includes a small utility `omf` to fetch and install new packages and themes.
2016-03-11 16:59:06 +00:00
#### `omf update` _`[omf]`_ _`[<package>...]`_
2015-08-26 15:20:13 +00:00
2017-02-05 03:49:39 +00:00
Update Oh My Fish, all package repositories, and all installed packages.
2015-08-26 15:20:13 +00:00
2016-03-11 16:59:06 +00:00
- 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.
2021-03-02 22:41:14 +00:00
#### `omf install` _`[<name>|<url>|<user/repo>]`_
2015-08-26 15:20:13 +00:00
2015-08-30 04:39:42 +00:00
Install one _or more_ packages.
2015-08-26 15:20:13 +00:00
2015-08-30 04:39:42 +00:00
- You can install packages directly by URL via `omf install URL`
2021-03-02 22:41:14 +00:00
- You can install packages from a GitHub repository via `omf install user/repo`
2015-09-05 15:48:55 +00:00
- When called without arguments, install missing packages from [bundle ](#dotfiles ).
2015-08-26 15:20:13 +00:00
2017-02-05 03:49:39 +00:00
#### `omf repositories` _`[list|add|remove]`_
Manage user-installed package repositories. Package repositories are where packages come from used by commands like `omf install` . By default the [official repository ](https://github.com/oh-my-fish/packages-main ) is always installed and available.
2015-09-06 05:38:03 +00:00
#### `omf list`
2015-08-26 15:20:13 +00:00
List installed packages.
2015-09-06 05:38:03 +00:00
#### `omf theme` _`<theme>`_
2015-08-26 15:20:13 +00:00
2016-01-14 01:07:57 +00:00
Apply a theme. To list available themes, type `omf theme` . You can also [preview available themes ](./docs/Themes.md ) before installing.
2015-08-26 15:20:13 +00:00
2015-09-06 05:38:03 +00:00
#### `omf remove` _`<name>`_
2015-08-26 15:20:13 +00:00
2021-03-02 22:41:14 +00:00
Remove a theme or package. If a package was installed via `user/repo` , use `repo` for `name` .
2015-08-26 15:20:13 +00:00
2016-06-01 04:09:38 +00:00
> Packages can use uninstall hooks, so custom cleanup of resources can be done when uninstalling it. See [Uninstall](/docs/en-US/Packages.md#uninstall) for more information.
2015-08-26 15:20:13 +00:00
2016-02-24 01:59:10 +00:00
#### `omf reload`
Reload Oh My Fish and all plugins by using `exec` to replace current shell process with a brand new.
2016-04-27 18:36:00 +00:00
> This command tries to be as safe as possible, mitigating side-effects caused by `exec` and preventing the reload in case of background processes.
2016-02-24 01:59:10 +00:00
2018-09-25 07:30:42 +00:00
#### `omf new plugin | theme` _`<name>`_
2015-08-26 15:20:13 +00:00
2018-09-25 07:30:42 +00:00
Scaffold out a new plugin or theme.
2015-08-26 15:20:13 +00:00
2015-08-27 17:56:01 +00:00
> This creates a new directory under `$OMF_CONFIG/{pkg | themes}/` with a template.
2015-08-26 15:20:13 +00:00
2017-06-13 14:41:23 +00:00
#### `omf search` _`-t|--theme / -p|--package`_ _`<name>`_
2016-05-11 18:29:50 +00:00
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` .
2016-10-20 23:10:13 +00:00
#### `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.
2015-10-02 21:39:12 +00:00
#### `omf doctor`
2015-08-26 15:20:13 +00:00
2016-01-14 01:07:57 +00:00
Use to troubleshoot before [opening an issue][omf-issues-new].
2015-08-26 15:20:13 +00:00
2015-09-06 05:38:03 +00:00
#### `omf destroy`
2015-08-26 15:20:13 +00:00
2015-09-06 02:37:42 +00:00
Uninstall Oh My Fish.
2015-08-26 15:20:13 +00:00
2016-01-14 01:07:57 +00:00
## Advanced
2015-08-26 15:20:13 +00:00
2017-08-24 07:45:49 +00:00
Oh My Fish installer adds a snippet to fish's user config files (`~/.config/fish/conf.d/`) which calls OMF's startup code.
Notice that the scripts in that directory are sourced in the order that the filesystem sees them,
and so it may be necessary to prefix your script files with ordering numbers.
For example: `a_script.fish` will take precedence over the `omf.fish` snippet.
So if `a_script.fish` depends on plugins managed by OMF, consider renaming the script file to `xx_a_script.fish` .
2020-04-10 12:41:51 +00:00
Similarly, to make sure that a script runs before `omf.fish` , you may prefix it with `00_` .
2017-08-24 07:45:49 +00:00
Alternatively, `~/.config/omf/before.init.fish` may be used.
2015-08-26 15:20:13 +00:00
2016-01-14 01:07:57 +00:00
### Startup
2015-08-26 15:20:13 +00:00
2017-08-24 07:45:49 +00:00
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` ](init.fish ) script afterwards, which autoloads packages, themes and your custom init files.
2015-08-26 15:20:13 +00:00
2016-01-14 01:07:57 +00:00
For more information check the [FAQ ](docs/en-US/FAQ.md#what-does-oh-my-fish-do-exactly ).
2015-08-30 04:40:15 +00:00
2016-01-14 01:07:57 +00:00
### Dotfiles
The `$OMF_CONFIG` directory represents the user state of Oh My Fish. It is the perfect
2017-08-24 07:45:49 +00:00
candidate for being added to your dotfiles and/or checked out to version control. There you can find three important files:
2015-08-30 04:40:15 +00:00
- __`theme`__ - The current theme
- __`bundle`__ - List of currently installed packages/themes
2017-08-24 07:45:49 +00:00
- __`channel`__ - The channel from which OMF gets updates (stable / dev)
And you may create and customize these special files:
2015-09-27 22:36:30 +00:00
- __`init.fish`__ - Custom script sourced after shell start
- __`before.init.fish`__ - Custom script sourced before shell start
2016-08-04 14:06:12 +00:00
- __`key_bindings.fish`__ - Custom key bindings where you can use the `bind` command freely
2015-09-27 04:15:49 +00:00
2017-02-03 00:43:54 +00:00
#### 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:
```fish
# Golang developers might need this one
set -xg GOPATH $HOME/gocode
# Python developers otherwise
set -xg PYTHONDONTWRITEBYTECODE 1
```
2016-01-14 01:07:57 +00:00
#### About the bundle
2015-08-30 04:40:15 +00:00
2016-01-14 01:07:57 +00:00
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.
2015-08-30 04:40:15 +00:00
2017-08-24 07:45:49 +00:00
#### Older fish versions
In fish 2.2, there is no `conf.d` directory, so the startup code has to be placed in the fish config file (`~/.config/fish/config.fish`).
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` .
2015-09-06 05:28:12 +00:00
## Creating Packages
2016-06-01 04:09:38 +00:00
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 ](docs/en-US/Packages.md ) for more details.
2015-09-06 05:28:12 +00:00
2015-01-30 00:06:05 +00:00
2016-08-08 14:00:17 +00:00
[fishshell]: http://fishshell.com
2015-09-03 18:35:19 +00:00
[contributors]: https://github.com/oh-my-fish/oh-my-fish/graphs/contributors
[omf-pulls-link]: https://github.com/oh-my-fish/oh-my-fish/pulls
2015-10-02 21:39:12 +00:00
[omf-issues-new]: https://github.com/oh-my-fish/oh-my-fish/issues/new
2016-08-08 14:00:17 +00:00
[releases]: https://github.com/oh-my-fish/oh-my-fish/releases