feat: pwsh module as install facilitator

This commit is contained in:
Jan De Dobbeleer 2021-11-27 20:35:40 +01:00 committed by Jan De Dobbeleer
parent 0ee320491d
commit a357becb85
9 changed files with 72 additions and 340 deletions

View file

@ -3,12 +3,12 @@ At this point, you're good to go. The `jandedobbeleer.omp.json` theme displays t
in your prompt, so 9/10 you'll be more than happy with it. However, if you want to explore additional
functionality, going through the additional steps below will help you get started.
#### Change the theme
### Change the theme
We downloaded all the themes and set `jandedobbeleer.omp.json` as the one to use.
However, there are [a lot more][themes] to be discovered and maybe there are some you like better.
#### Override the theme settings
## Override the theme settings
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 all

View file

@ -11,7 +11,7 @@ import Customize from "./install-customize.md";
import CustomizeCmd from "./install-customize-cmd.mdx";
import InstallHomebrew from "./install-homebrew.mdx";
### Setup your terminal
## Setup your terminal
Oh My Posh uses ANSI color codes under the hood, these should work in every terminal,
but you may have to set the environment variable `$TERM` to `xterm-256color` for it to work.
@ -20,7 +20,7 @@ but you may have to set the environment variable `$TERM` to `xterm-256color` for
<Shells />
### Customize
## Customize
<Customize />

View file

@ -11,7 +11,7 @@ import Customize from "./install-customize.md";
import CustomizeCmd from "./install-customize-cmd.mdx";
import InstallHomebrew from "./install-homebrew.mdx";
### Setup your terminal
## Setup your terminal
As the standard terminal has issues displaying the ANSI characters correctly, we advise using
[iTerm2][iterm2] or any other modern day MacOS terminal that supports ANSI characters.
@ -20,7 +20,7 @@ As the standard terminal has issues displaying the ANSI characters correctly, we
<Shells />
### Customize
## Customize
<Customize />

View file

@ -1,93 +0,0 @@
---
id: pwsh
title: PowerShell
sidebar_label: 🐚 PowerShell
---
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import Customize from "./install-customize.md";
:::info
This guide is for usage inside PowerShell only. If you plan to use Oh My Posh inside other shells as well,
have a look at the platform-specific install instructions.
:::
## Installation
```powershell
Install-Module oh-my-posh -Scope CurrentUser
```
:::caution
If you wish to install for **all users in a linux** environment, you will need to install from an **elevated PowerShell session**.
You will also need to import the module one time from the elevated session in order to set the executable permissions correctly.
```powershell
sudo pwsh
Install-Module oh-my-posh -Scope AllUsers
Import-Module oh-my-posh
```
:::
After installation, import Oh My Posh in your `$PROFILE`. Restart your shell and Oh My Posh will start downloading
a compatible version of the executable (this is kept in sync on update).
```powershell
Import-Module oh-my-posh
```
## List all themes
To display every available theme in the current directory, use the following
cmdlet.
```powershell
Get-PoshThemes
```
The module installs all themes in the module folder. To find the actual files, you can use the following command:
```powershell
Get-PoshThemes -list
```
## Replace your existing prompt
Edit `$PROFILE` in your preferred PowerShell version and add the following line. Autocompletion is available so it will loop
through all available themes.
```powershell
Set-PoshPrompt -Theme jandedobbeleer
```
Once added, reload your profile for the changes to take effect.
```powershell
. $PROFILE
```
<Customize />
```powershell
Export-PoshTheme -FilePath ~/.mytheme.omp.json -Format json
```
Once you're done editing, adjust your `$PROFILE` to use your newly created theme.
```powershell
Set-PoshPrompt -Theme ~/.mytheme.omp.json
```
## Update
```powershell
Update-Module oh-my-posh
```
🎉🎉🎉
[scoop]: https://scoop.sh/
[wt]: https://github.com/microsoft/terminal
[powershell]: https://www.powershellgallery.com/packages/oh-my-posh
[configuration]: /docs/config-overview

View file

@ -26,6 +26,15 @@ oh-my-posh --print-shell
Edit `$PROFILE` in your preferred PowerShell version and add the following line.
:::caution
If you installed Oh My Posh using `Install-Module oh-my-posh`, you need to first import
Oh My Posh in your `$PROFILE` before adding the line below:
```powershell
Import-Module oh-my-posh
```
:::
```powershell
oh-my-posh --init --shell pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression
```

View file

@ -10,11 +10,11 @@ import Shells from "./install-shells.mdx";
import Customize from "./install-customize.md";
import CustomizeCmd from "./install-customize-cmd.mdx";
### Setup your terminal
## Setup your terminal
While Oh My Posh works on the standard terminal, we advise using the [Windows Terminal][wt].
### Installation
## Install
<Tabs
defaultValue="winget"
@ -22,6 +22,7 @@ While Oh My Posh works on the standard terminal, we advise using the [Windows Te
values={[
{ label: 'winget', value: 'winget', },
{ label: 'scoop', value: 'scoop', },
{ label: 'powershell', value: 'powershell', },
{ label: 'chocolatey', value: 'chocolatey'},
]
}>
@ -31,15 +32,6 @@ While Oh My Posh works on the standard terminal, we advise using the [Windows Te
winget install JanDeDobbeleer.OhMyPosh
```
This installs a couple of things:
- `oh-my-posh.exe` - Windows executable, added to your `$PATH`
- `themes` - The latest Oh My Posh themes
If you want to use a standard theme, you can find them in `~\AppData\Local\Programs\oh-my-posh\themes\`,
referencing them as such
will always keep them compatible with the binary when updating Oh My Posh.
</TabItem>
<TabItem value="scoop">
@ -47,14 +39,21 @@ will always keep them compatible with the binary when updating Oh My Posh.
scoop install https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/oh-my-posh.json
```
This installs a couple of things:
</TabItem>
<TabItem value="powershell">
- `oh-my-posh.exe` - Windows executable, added to your `$PATH`
- `themes` - The latest Oh My Posh themes
:::warning
The PowerShell module only installs the Oh My Posh execuatble inside PowerShell, to use Oh My posh outside of PowerShell,
add the following folder to your `$PATH`:
If you want to use a standard theme, you can find them in `~\scoop\apps\oh-my-posh\current\themes\`,
referencing them as such
will always keep them compatible with the binary when updating Oh My Posh.
```powershell
"$((Get-Item (Get-Module oh-my-posh).ModuleBase).Parent.FullName)"
```
:::
```powershell
Install-Module oh-my-posh -Scope CurrentUser
```
</TabItem>
<TabItem value="chocolatey">
@ -67,78 +66,17 @@ The chocolatey package is managed by [Curtis Carter][cc]. In case of problems, p
choco install oh-my-posh
```
</TabItem>
</Tabs>
This installs a couple of things:
- `oh-my-posh.exe` - Windows executable, added to your `$PATH`
- `themes` - The latest Oh My Posh themes
If you want to use a standard theme, you can find them in `~\AppData\Local\Programs\oh-my-posh\themes\`,
referencing them as such
will always keep them compatible with the binary when updating Oh My Posh.
</TabItem>
</Tabs>
- `themes` - The latest Oh My Posh [themes][themes]
For the `$PATH` to reload, a reboot is advised.
### Usage
#### Preview the themes
<Tabs
defaultValue="winget"
groupId="install"
values={[
{ label: 'winget', value: 'winget', },
{ label: 'scoop', value: 'scoop', },
{ label: 'chocolatey', value: 'chocolatey'},
]
}>
<TabItem value="winget">
```powershell
Get-ChildItem -Path "~\AppData\Local\Programs\oh-my-posh\themes\*" -Include '*.omp.json' | Sort-Object Name | ForEach-Object -Process {
$esc = [char]27
Write-Host ""
Write-Host "$esc[1m$($_.BaseName)$esc[0m"
Write-Host ""
oh-my-posh --config $($_.FullName) --pwd $PWD
Write-Host ""
}
```
</TabItem>
<TabItem value="scoop">
```powershell
Get-ChildItem -Path "$(scoop prefix oh-my-posh)\themes\*" -Include '*.omp.json' | Sort-Object Name | ForEach-Object -Process {
$esc = [char]27
Write-Host ""
Write-Host "$esc[1m$($_.BaseName)$esc[0m"
Write-Host ""
oh-my-posh --config $($_.FullName) --pwd $PWD
Write-Host ""
}
```
</TabItem>
<TabItem value="chocolatey">
```powershell
Get-ChildItem -Path "~\AppData\Local\Programs\oh-my-posh\themes\*" -Include '*.omp.json' | Sort-Object Name | ForEach-Object -Process {
$esc = [char]27
Write-Host ""
Write-Host "$esc[1m$($_.BaseName)$esc[0m"
Write-Host ""
oh-my-posh --config $($_.FullName) --pwd $PWD
Write-Host ""
}
```
</TabItem>
</Tabs>
#### Update
## Update
<Tabs
defaultValue="winget"
@ -146,6 +84,7 @@ Get-ChildItem -Path "~\AppData\Local\Programs\oh-my-posh\themes\*" -Include '*.o
values={[
{ label: 'winget', value: 'winget', },
{ label: 'scoop', value: 'scoop', },
{ label: 'powershell', value: 'powershell', },
{ label: 'chocolatey', value: 'chocolatey'},
]
}>
@ -162,6 +101,13 @@ winget upgrade JanDeDobbeleer.OhMyPosh
scoop update oh-my-posh
```
</TabItem>
<TabItem value="powershell">
```powershell
Update-Module oh-my-posh
```
</TabItem>
<TabItem value="chocolatey">
@ -172,7 +118,7 @@ choco upgrade oh-my-posh
</TabItem>
</Tabs>
### Replace your existing prompt
## Replace your existing prompt
<Tabs
defaultValue="winget"
@ -180,6 +126,7 @@ choco upgrade oh-my-posh
values={[
{ label: 'winget', value: 'winget', },
{ label: 'scoop', value: 'scoop', },
{ label: 'powershell', value: 'powershell', },
{ label: 'chocolatey', value: 'chocolatey'},
]
}>
@ -196,6 +143,13 @@ You can find the themes scoop installs inside the `"$(scoop prefix oh-my-posh)\t
To use `jandedobbeleer.omp.json` for example, you can refer to it using `"$(scoop prefix oh-my-posh)\themes\jandedobbeleer.omp.json"`
when setting the prompt using the `--config` flag.
</TabItem>
<TabItem value="powershell">
You can find the themes PowerShell installs inside the `"$((Get-Module oh-my-posh).ModuleBase)\themes\"` folder.
To use `jandedobbeleer.omp.json` for example, you can refer to it using `"$((Get-Module oh-my-posh).ModuleBase)\themes\jandedobbeleer.omp.json"`
when setting the prompt using the `--config` flag.
</TabItem>
<TabItem value="chocolatey">
@ -215,6 +169,7 @@ Based on the installation method used, you can find this theme at the following
values={[
{ label: 'winget', value: 'winget', },
{ label: 'scoop', value: 'scoop', },
{ label: 'powershell', value: 'powershell', },
{ label: 'chocolatey', value: 'chocolatey'},
]
}>
@ -227,6 +182,11 @@ Based on the installation method used, you can find this theme at the following
`"$(scoop prefix oh-my-posh)\themes\jandedobbeleer.omp.json"`
</TabItem>
<TabItem value="powershell">
`"$((Get-Module oh-my-posh).ModuleBase)\themes\jandedobbeleer.omp.json"`
</TabItem>
<TabItem value="chocolatey">
@ -241,7 +201,7 @@ When using oh-my-posh inside the WSL, make sure to follow the [linux](linux) ins
<Shells />
### Customize
## Customize
<Customize />
@ -262,3 +222,4 @@ Inside the WSL, replace `~` with the following path: `/mnt/c/Users/<WINDOWSUSERN
[cc]: https://github.com/digitalcoyote
[cc-choco]: https://github.com/digitalcoyote/chocolatey-packages/tree/master/oh-my-posh
[linux]: https://ohmyposh.dev/docs/linux
[themes]: https://ohmyposh.dev/docs/themes

View file

@ -11,7 +11,7 @@ module.exports = {
type: "category",
label: "🚀 Installation",
collapsed: false,
items: ["pwsh", "windows", "macos", "linux"],
items: ["windows", "macos", "linux"],
},
],
},

View file

@ -1,21 +1,5 @@
<#
.SYNOPSIS
Generates the prompt before each line in the console
#>
# Powershell doesn't default to UTF8 just yet, so we're forcing it as there are too many problems
# that pop up when we don't
if ($ExecutionContext.SessionState.LanguageMode -ne "ConstrainedLanguage") {
[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
}
elseif ($env:POSH_CONSTRAINED_LANGUAGE -ne 1) {
Write-Host "[WARNING] ConstrainedLanguage mode detected, unable to set console to UTF-8.
When using PowerShell in ConstrainedLanguage mode, please set the
console mode manually to UTF-8. See here for more information:
https://ohmyposh.dev/docs/faq#powershell-running-in-constrainedlanguage-mode
"
$env:POSH_CONSTRAINED_LANGUAGE = 1
}
$env:POSH_THEMES_PATH = "$PSScriptRoot/themes"
$env:PATH = "$((Get-Item $MyInvocation.MyCommand.ScriptBlock.Module.ModuleBase).Parent.FullName);$env:PATH"
function Get-PoshDownloadUrl {
param(
@ -107,6 +91,8 @@ function Sync-PoshExecutable {
Sync-PoshExecutable
# Legacy functions
function Set-PoshPrompt {
param(
[Parameter(Mandatory = $false)]
@ -115,15 +101,15 @@ function Set-PoshPrompt {
)
$config = ""
if (Test-Path "$PSScriptRoot/themes/$Theme.omp.json") {
$path = "$PSScriptRoot/themes/$Theme.omp.json"
if (Test-Path "$($env:POSH_THEMES_PATH)/$Theme.omp.json") {
$path = "$($env:POSH_THEMES_PATH)/$Theme.omp.json"
$config = (Resolve-Path -Path $path).ProviderPath
}
elseif (Test-Path $Theme) {
$config = (Resolve-Path -Path $Theme).ProviderPath
}
else {
$config = "$PSScriptRoot/themes/jandedobbeleer.omp.json"
$config = "$($env:POSH_THEMES_PATH)/jandedobbeleer.omp.json"
}
# Workaround for get-location/push-location/pop-location from within a module
@ -135,138 +121,6 @@ function Set-PoshPrompt {
(& $poshCommand --init --shell=pwsh --config="$config") | Invoke-Expression
}
<#
.SYNOPSIS
Returns an ansi formatted hyperlink
if name not set, uri is used as the name of the hyperlink
.EXAMPLE
Get-Hyperlink
#>
function Get-Hyperlink {
param(
[Parameter(Mandatory, ValuefromPipeline = $True)]
[string]$uri,
[Parameter(ValuefromPipeline = $True)]
[string]$name
)
$esc = [char]27
if ("" -eq $name) {
$name = $uri
}
if ($null -ne $env:WSL_DISTRO_NAME) {
# wsl conversion if needed
$uri = &wslpath -m $uri
}
return "$esc]8;;file://$uri$esc\$name$esc]8;;$esc\"
}
<#
.SYNOPSIS
Display a preview or a list of installed themes.
.EXAMPLE
Get-PoshThemes
.Example
Gest-PoshThemes -list
#>
function Get-PoshThemes() {
param(
[switch]
[Parameter(Mandatory = $false, HelpMessage = "List themes path")]
$list
)
$consoleWidth = $Host.UI.RawUI.WindowSize.Width
$logo = @'
__ _____ _ ___ ___ ______ _ __
/ / | _ | | | \/ | | ___ \ | | \ \
/ / | | | | |__ | . . |_ _ | |_/ /__ ___| |__ \ \
< < | | | | '_ \ | |\/| | | | | | __/ _ \/ __| '_ \ > >
\ \ \ \_/ / | | | | | | | |_| | | | | (_) \__ \ | | | / /
\_\ \___/|_| |_| \_| |_/\__, | \_| \___/|___/_| |_| /_/
__/ |
|___/
'@
Write-Host $logo
$themes = Get-ChildItem -Path "$PSScriptRoot\themes\*" -Include '*.omp.json' | Sort-Object Name
Write-Host ("-" * $consoleWidth)
if ($list -eq $true) {
$themes | Select-Object @{ Name = 'hyperlink'; Expression = { Get-Hyperlink -uri $_.fullname } } | Format-Table -HideTableHeaders
}
else {
$poshCommand = Get-PoshCommand
$themes | ForEach-Object -Process {
Write-Host "Theme: $(Get-Hyperlink -uri $_.fullname -name $_.BaseName.Replace('.omp', ''))"
Write-Host ""
& $poshCommand -config $($_.FullName) -pwd $PWD
Write-Host ""
}
}
Write-Host ("-" * $consoleWidth)
Write-Host ""
Write-Host "Themes location: $(Get-Hyperlink -uri "$PSScriptRoot/themes")"
Write-Host ""
Write-Host "To change your theme, use the Set-PoshPrompt command. Example:"
Write-Host " Set-PoshPrompt -Theme jandedobbeleer"
Write-Host ""
Write-Host 'Get-PoshThemes is deprecated, please have a look at all the themes in the documentation: https://ohmyposh.dev/docs/themes'
}
# Helper function to create argument completion results
function New-CompletionResult {
param(
[Parameter(Mandatory)]
[string]$CompletionText,
[string]$ListItemText = $CompletionText,
[System.Management.Automation.CompletionResultType]$CompletionResultType = [System.Management.Automation.CompletionResultType]::ParameterValue,
[string]$ToolTip = $CompletionText
)
New-Object System.Management.Automation.CompletionResult $CompletionText, $ListItemText, $CompletionResultType, $ToolTip
}
function ThemeCompletion {
param(
$commandName,
$parameterName,
$wordToComplete,
$commandAst,
$fakeBoundParameter
)
$themes = Get-ChildItem -Path "$PSScriptRoot\themes\*" -Include '*.omp.json' | Sort-Object Name | Select-Object -Property @{
label = 'BaseName'
expression = { $_.BaseName.Replace('.omp', '') }
}
$themes |
Where-Object { $_.BaseName.ToLower().StartsWith($wordToComplete.ToLower()); } |
Select-Object -Unique -ExpandProperty BaseName |
ForEach-Object { New-CompletionResult -CompletionText $_ }
}
Register-ArgumentCompleter `
-CommandName Set-PoshPrompt `
-ParameterName Theme `
-ScriptBlock $function:ThemeCompletion
# V2 compatibility functions
# These should be removed at a certain point in time
# but to facilitate ease of transition they are kept
# as long as issues/feature requests keep popping up
function Get-PoshInfoForV2Users {
Write-Host @'
Hi there!
It seems you're using an oh-my-posh V2 cmdlet while running V3.
To migrate your current setup to V3, have a look the documentation.
https://ohmyposh.dev/docs/upgrading
'@
}
Set-Alias -Name Set-Prompt -Value Get-PoshInfoForV2Users -Force
Set-Alias -Name Get-ThemesLocation -Value Get-PoshInfoForV2Users -Force
Set-Alias -Name Show-ThemeSymbols -Value Get-PoshInfoForV2Users -Force
Set-Alias -Name Show-ThemeColors -Value Get-PoshInfoForV2Users -Force
Set-Alias -Name Show-Colors -Value Get-PoshInfoForV2Users -Force
Set-Alias -Name Write-ColorPreview -Value Get-PoshInfoForV2Users -Force

View file

@ -2,13 +2,14 @@
# that pop up when we don't
if ($ExecutionContext.SessionState.LanguageMode -ne "ConstrainedLanguage") {
[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
} elseif ($env:POSH_CONSTRAINED_LANGUAGE -ne 1) {
} else {
Write-Host "[WARNING] ConstrainedLanguage mode detected, unable to set console to UTF-8.
When using PowerShell in ConstrainedLanguage mode, please set the
console mode manually to UTF-8. See here for more information:
https://ohmyposh.dev/docs/faq#powershell-running-in-constrainedlanguage-mode
"
}
$env:POWERLINE_COMMAND = "oh-my-posh"
$env:CONDA_PROMPT_MODIFIER = $false