Discover, install, and configure shell plugins with Fig Plugin Store →

Oh My Zsh

A community-driven framework for managing your zsh configuration

160.6k stars
25.3k forks

Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.

Sounds boring. Let's try again.

Oh My Zsh will not make you a 10x developer…but you may feel like one.

Once installed, your terminal shell will become the talk of the town or your money back! With each keystroke in your command prompt, you'll take advantage of the hundreds of powerful plugins and beautiful themes. Strangers will come up to you in cafés and ask you, "that is amazing! are you some sort of genius?"

Finally, you'll begin to get the sort of attention that you have always felt you deserved. …or maybe you'll use the time that you're saving to start flossing more often. 😬

Getting Started

Prerequisites

  • A Unix-like operating system: macOS, Linux, BSD. On Windows: WSL2 is preferred, but cygwin or msys also mostly work.
  • Zsh should be installed (v4.3.9 or more recent is fine but we prefer 5.0.8 and newer). If not pre-installed (run zsh --version to confirm), check the following wiki instructions here: Installing ZSH
  • curl or wget should be installed
  • git should be installed (recommended v2.4.11 or higher)

Manual inspection

It's a good idea to inspect the install script from projects you don't yet know. You can see the install script at the following URL:

https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh

Using Oh My Zsh

Plugins

Oh My Zsh comes with a shitload of plugins for you to take advantage of.

Click here to see all Plugins

Deprecated Plugins:

  • cargo: moved to the rust plugin.
  • npx: new npm versions (>=7.0.0) do not provide the same functionality.
  • osx: renamed to macos.
  • rustup: moved to the rust plugin.

Removed Plugins

  • cloudapp: removed due to deprecated API.
  • django: removed because Zsh provides a better completion for Django.
  • fedora: use dnf instead.
  • git-remote-branch: not actively maintained.
  • go: use golang instead.
  • nyan: the service that the plugin relied on is no longer available.
  • zsh_reload: functionality baked into the CLI with omz reload.

To see the plugins in the git repo, see https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins

Enabling Plugins

Go to the configurations tab, go to the Plugins configuration, and select the plugins you want to install.

Popular plugins include: git, macos, ruby etc

Using Plugins

Each plugin includes a README, documenting it. This README should show the aliases (if the plugin adds any) and extra goodies that are included in that particular plugin.

Themes

We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme happy. We have over one hundred and fifty themes now bundled.

Click here to see screenshots of all the themes

robbyrussell

The default that Robby Russell uses.

robbyrussell


The rest of the themes, in alphabetical order:

A

af-magic

af-magic

afowler

afowler

agnoster

agnoster

Official repository

Additional setup:

  • Install one of the patched fonts from Vim-Powerline or patch your own for the special characters.
  • Optionally set DEFAULT_USER to your regular username followed by prompt_context(){} in ~/.zshrc to hide the “user@hostname” info when you’re logged in as yourself on your local machine.

alanpeabody

alanpeabody

amuse

amuse

(You might need to install one of the patched powerline fonts for it to look the same)

apple

apple

arrow

arrow

aussiegeek

aussiegeek

avit

avit

awesomepanda

awesomepanda

B

bira

bira

blinks

bureau

bureau

To use: In the right prompt you see git status and (if you use nvm) the Node.js version.

C

candy

candy

clean

clean

cloud

cloud

crcandy

crcandy

crunch

crunch

cypher

cypher

D

dallas

dallas

darkblood

darkblood

daveverwer

daveverwer

dieter

dieter

dogenpunk

dogenpunk

dpoggi

dpoggi

dst

dst

dstufft

dstufft

duellj

duellj

E

eastwood

eastwood

edvardm

edvardm

emotty

emotty

essembeh

essembeh

evan

evan

F

fino-time

fino-time

fino

fino

fishy

fishy

The fish shell prompt with git support

flazz

flazz

Has git and vi-command mode support (when enabled)

fletcherm

fletcherm

fox

fox

frisk

frisk

frontcube

frontcube

funky

funky

It’s funky…

fwalch

fwalch

G

gallifrey

gallifrey

gallois

gallois

garyblessington

garyblessington

gentoo

gentoo

geoffgarside

geoffgarside

gianu

gianu

gnzh

gnzh

gozilla

gozilla

H

half-life

half-life

humza

humza

I

imajes

imajes

intheloop

intheloop

itchy

itchy

J

jaischeema

jaischeema

jbergantine

jbergantine

jispwoso

jispwoso

jnrowe

jnrowe

jonathan

jonathan

josh

josh

jreese

jreese

jtriley

jtriley

juanghurtado

juanghurtado

junkfood

junkfood

Totally ripped off Dallas theme

More Info

K

kafeitu

kafeitu

kardan

kardan

kennethreitz

kennethreitz

kolo

kolo

kphoen

kphoen

L

lambda

lambda

linuxonly

linuxonly

(As the name states, this only works on Linux)

lukerandall

lukerandall

M

macovsky

macovsky

maran

maran

mgutz

mgutz

mh

mh

michelebologna

michelebologna

mikeh

mikeh

miloshadzic

miloshadzic

minimal

minimal

mortalscumbag

mortalscumbag

Also tells you when logged in over ssh

mrtazz

mrtazz

murilasso

murilasso

muse

muse

N

nanotech

nanotech

nebirhos

nebirhos

nicoulaj

nicoulaj

norm

norm

O

obraun

obraun

P

peepcode

peepcode

philips

philips

pmcgee

pmcgee

pygmalion

pygmalion

R

re5et

re5et

refined

refined

rgm

rgm

risto

risto

rixius

rixius

rkj-repos

rkj

S

sammy

sammy

simonoff

simonoff

simple

simple

skaro

skaro

smt

smt

Soliah

Soliah

sonicradish

sonicradish

sorin

sorin

sporty_256

sporty_256

steeef

steeef

strug

strug

sunaku

sunaku

Exit status if nonzero, status & branch if git, pwd always.

sunrise

sunrise

Lightweight prompt with exit status and git status consistent mode line.

superjarin

superjarin

Git status, git branch, and ruby, all in a no muss, no fuss prompt! Works with RVM, chruby, and rbenv (just activate the corresponding plugin).

suvash

suvash

Username, host, directory, git branch and rvm gemset

T

takashiyoshida

takashiyoshida

terminalparty

terminalparty

There is a party every day.

theunraveler

theunraveler

Minimal, informative when it needs to be.

tjkirch

tjkirch

Based on dst, plus a lightning bolt and return codes.

tonotdo

tonotdo

trapd00r

trapd00r

W

wedisagree

wedisagree

Instructions to further customize the theme are available as comments in the theme file.

wezm

wezm

wezm+

wezm+

wuffers

wuffers

X

xiong-chiamiov

xiong-chiamiov-plus

xiong-chiamiov-plus

xiong-chiamiov

Y

ys

ys

Clean, simple, compatible and meaningful.Tested on Linux, Unix and Windows under ANSI colors. It is recommended to use with a dark background.

More info

Z

zhann

zhann


More themes

You can find more themes here.

Agnoster theme

Selecting a Theme

Once you find a theme that you'd like to use go to the configurations tab, go to the Theme configuration, and select the theme you'd like.

The default theme is robbyrussell. It's not the fanciest one. It's not the simplest one. It's just the right one (for him).

Randomly select a Theme

If you're feeling feisty, you can let the computer select one randomly for you each time you open a new terminal window.

  1. Set the Theme configuration to random
  2. [Optional] If you want random to only select from a list of your favorite themes, choose those themes in your Random Theme Candidates configuration variable
  3. [Optional] If you want random to ignore from a list of themes, choose those themes in your Ignored Random Theme Candidates configuration variable

Extra notes

  1. Several themes require installing the Powerline Fonts in order to render properly._
  2. In case you did not find a suitable theme for your needs, please have a look at the wiki for more of them.

FAQ

If you have some more questions or issues, you might find a solution in our FAQ.

Advanced Topics

If you're the type that likes to get their hands dirty, these sections might resonate.

Advanced Installation

Some users may want to manually install Oh My Zsh, or change the default path or other settings that the installer accepts (these settings are also documented at the top of the install script).

Custom Directory

The default location is ~/.oh-my-zsh (hidden in your home directory, you can access it with cd ~/.oh-my-zsh)

If you'd like to change the install directory with the ZSH environment variable, either by running export ZSH=/your/path before installing, or by setting it before the end of the install pipeline like this:

ZSH="$HOME/.dotfiles/oh-my-zsh" sh install.sh

Custom Plugins and Themes

If you want to override any of the default behaviors, just add a new file (ending in .zsh) in the custom/ directory.

If you have many functions that go well together, you can put them as a XYZ.plugin.zsh file in the custom/plugins/ directory and then enable this plugin.

If you would like to override the functionality of a plugin distributed with Oh My Zsh, create a plugin of the same name in the custom/plugins/ directory and it will be loaded instead of the one in plugins/.

Getting Updates

By default, you will be prompted to check for updates every 2 weeks. You can choose other update modes by adding a line to your ~/.zshrc file, before Oh My Zsh is loaded:

  1. Automatic update without confirmation prompt:
   zstyle ':omz:update' mode auto
  1. Just offer a reminder every few days, if there are updates available:
   zstyle ':omz:update' mode reminder
  1. To disable automatic updates entirely:
   zstyle ':omz:update' mode disabled

NOTE: you can control how often Oh My Zsh checks for updates with the following setting:

# This will check for updates every 7 days
zstyle ':omz:update' frequency 7
# This will check for updates every time you open the terminal (not recommended)
zstyle ':omz:update' frequency 0

Manual Updates

If you'd like to update at any point in time (maybe someone just released a new plugin and you don't want to wait a week?) you just need to run:

omz update

Magic! 🎉

How do I contribute to Oh My Zsh?

Before you participate in our delightful community, please read the code of conduct.

I'm far from being a Zsh expert and suspect there are many ways to improve – if you have ideas on how to make the configuration easier to maintain (and faster), don't hesitate to fork and send pull requests!

We also need people to test out pull-requests. So take a look through the open issues and help where you can.

See Contributing for more details.

Do NOT send us themes

We have (more than) enough themes for the time being. Please add your theme to the external themes wiki page.

Contributors

Oh My Zsh has a vibrant community of happy users and delightful contributors. Without all the time and help from our contributors, it wouldn't be so awesome.

Thank you so much!

Follow Us

We're on social media:

Merchandise

We have stickers, shirts, and coffee mugs available for you to show off your love of Oh My Zsh. Again, you will become the talk of the town!

License

Oh My Zsh is released under the MIT license.

About Planet Argon

Planet Argon

Oh My Zsh was started by the team at Planet Argon, a Ruby on Rails development agency. Check out our other open source projects.