oh-my-posh/website/docs/installation/customize.mdx
Jan De Dobbeleer bb15f078bb feat: support tcsh
resolves #3500
2023-02-17 10:17:52 +01:00

269 lines
7.4 KiB
Plaintext

---
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 <shell>`
line in your `profile` or `.<shell>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.
<Tabs
defaultValue="windows"
groupId="shell"
values={[
{ label: 'windows', value: 'windows', },
{ label: 'homebrew', value: 'homebrew', },
]
}>
<TabItem value="windows">
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
```
</TabItem>
<TabItem value="homebrew">
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)"
```
</TabItem>
</Tabs>
### Config syntax
The examples below use a local path to the [jandedobbeleer][jandedobbeleer] theme, adjust the `--config` value
to reflect your use-case.
<Tabs
defaultValue="powershell"
groupId="shell"
values={[
{ label: 'powershell', value: 'powershell', },
{ label: 'cmd', value: 'cmd', },
{ label: 'zsh', value: 'zsh', },
{ label: 'bash', value: 'bash', },
{ label: 'fish', value: 'fish', },
{ label: 'nu', value: 'nu', },
{ label: 'tcsh', value: 'tcsh', },
]
}>
<TabItem value="powershell">
Adjust or add the following line in your `$PROFILE`:
```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].
:::
</TabItem>
<TabItem value="cmd">
Adjust or add the following line in `oh-my-posh.lua`:
```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.
</TabItem>
<TabItem value="zsh">
Adjust or add the following line to `~/.zshrc`:
```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
```
</TabItem>
<TabItem value="bash">
:::caution Git bash
Use the full path to the config file, not the relative path or `~` as a shorthand for `$HOME`.
:::
Adjust or add the following line in `~/.bashrc` (could be `~/.profile` or `~/.bash_profile` depending on your environment):
```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
```
</TabItem>
<TabItem value="fish">
:::caution
Oh My Posh requires fish v3.4.0 or higher.
:::
Adjust or add the following line in `~/.config/fish/config.fish`:
```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
```
</TabItem>
<TabItem value="nu">
:::caution
Oh My Posh requires Nushell v0.73.0 or higher.
:::
Adjust or 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.
</TabItem>
<TabItem value="tcsh">
Adjust or add the following line at the end of `~/.tcshrc`:
```bash
eval `oh-my-posh init tcsh --config ~/jandedobbeleer.omp.json`
```
Once added, reload your profile for the changes to take effect.
```bash
exec tcsh
```
</TabItem>
</Tabs>
:::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/<WINDOWSUSERNAME>`.
:::
### 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