--- id: customize title: Customize sidebar_label: 💅🏼 Customize --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem" The standard initialization sets Oh My Posh' default theme. This configuration is embedded and thus kept up-to-date with Oh My Posh. To set a new config/theme you need to change the `--config` option of the `oh-my-posh init ` line in your `profile` or `.rc` script (see [prompt][prompt]) and point it to the location of a predefined [theme][themes] or custom configuration. There are two possible values the `--config` flag can handle: - a path to a local configuration file ```powershell oh-my-posh init pwsh --config 'C:/Users/Posh/jandedobbeleer.omp.json' | Invoke-Expression ``` - a URL pointing to a remote config ```powershell oh-my-posh init pwsh --config 'https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/jandedobbeleer.omp.json' | Invoke-Expression ``` ### Get inspiration The Windows and homebrew installers also bundle the **predefined configurations** ([themes][themes]). You can use the following way to reference them directly. This will keep them up-to-date and compatible with future updates. For example, to use the [jandedobbeleer][jandedobbeleer] theme, alter the init line like this (`powershell`): ```powershell oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | Invoke-Expression ``` When using homebrew, all themes are installed alongside Oh My Posh in `$(brew --prefix oh-my-posh)/themes`. To use any of the themes, use the following syntax (`zsh`): ```bash eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/jandedobbeleer.omp.json)" ``` ### Config syntax The examples below use a local path to the [jandedobbeleer][jandedobbeleer] theme, adjust the `--config` value to reflect your use-case. ```powershell oh-my-posh init pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression ``` Once altered, reload your profile for the changes to take effect. ```powershell . $PROFILE ``` :::info When the above command gives an error, make sure to create the profile first and add the `oh-my-posh init` above. ```powershell New-Item -Path $PROFILE -Type File -Force ``` In this scenario, it can also be that PowerShell blocks running local scripts. To solve that, set PowerShell to only require remote scripts to be signed using `Set-ExecutionPolicy RemoteSigned`, or [sign the profile][sign]. ::: ```lua title="oh-my-posh.lua" load(io.popen('oh-my-posh init cmd --config C:/Users/Posh/jandedobbeleer.omp.json'):read("*a"))() ``` :::caution Use the full path to the config file, not the relative path. You can make use of **forward slashes** to avoid having to use double backslashes. ::: Once altered, restart cmd for the changes to take effect. ```bash eval "$(oh-my-posh init zsh --config ~/jandedobbeleer.omp.json)" ``` Once altered, reload your profile for the changes to take effect. ```bash exec zsh ``` :::caution Git bash Use the full path to the config file, not the relative path or `~` as a shorthand for `$HOME`. ::: ```bash eval "$(oh-my-posh init bash --config ~/jandedobbeleer.omp.json)" ``` Once altered, reload your profile for the changes to take effect. ```bash exec bash ``` :::caution Oh My Posh requires fish v3.4.0 or higher. ::: ```bash oh-my-posh init fish --config ~/jandedobbeleer.omp.json | source ``` Once altered, reload your config for the changes to take effect. ```bash . ~/.config/fish/config.fish ``` :::caution Oh My Posh requires Nushell v0.73.0 or higher. ::: Add the following line to the Nushell env file (`$nu.env-path`): ```bash oh-my-posh init nu --config ~/jandedobbeleer.omp.json ``` This saves the initialization script to `~/.oh-my-posh.nu`. Now, edit the Nushell config file (`$nu.config-path`) and add the following line at the bottom: ```bash source ~/.oh-my-posh.nu ``` If you want to save the initialization script elsewhere, you can change the first line to something like this: ```bash oh-my-posh init nu --config ~/jandedobbeleer.omp.json --print | save /mylocation/myscript.nu --force ``` And change the `source` line to: ```bash source /mylocation/myscript.nu ``` Once altered, restart Nushell for the changes to take effect. :::tip wsl When using oh-my-posh in Windows and the WSL, know that you can **share your theme with the WSL** by pointing to a theme in your Windows user's home folder. Inside the WSL, you can find your Windows user's home folder here: `/mnt/c/Users/`. ::: ### Adjust a theme Maybe there's a theme you like, but you don't fancy the colors. Or, maybe there's a segment you want to tweak/add, or replace some of the icons with a different one. Whatever the case, **read through available options first**, by starting with the [configuration guide][configuration]. You can export the current theme (default, or set via `--config`) to the format you like (`json`, `yaml`, or `toml`) which can be used to tweak and store as your own custom theme. ```bash oh-my-posh config export --output ~/.mytheme.omp.json ``` :::caution Be careful not to adjust the theme files in their original location as they're updated together with Oh My Posh which will remove your customizations. Always copy, or export them and save the new configuration outside of the Oh My Posh internal themes folder. ::: ### Read the docs To fully understand how to customize a theme, read through the documentation in the configuration and segments sections. The [configuration][configuration] section covers the basic building blocks and concepts of Oh My Posh themes, while the segments section covers how to configure each available segment. [themes]: themes.md [configuration]: configuration/overview.mdx [prompt]: prompt.mdx [jandedobbeleer]: /docs/themes#jandedobbeleer [json-schema]: https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json [homebrew-problem]: https://github.com/JanDeDobbeleer/oh-my-posh/discussions/2644 [sign]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_signing?view=powershell-7.3#methods-of-signing-scripts