All the content of this article referring to this awesome video by devaslife, check out his channel for detail steps and find more cool videos
Neccessary tools
1> WSL - Window terminal (from Microsoft store)
2> Powershell (from Microsoft store)
3> Scoop installer - check this
Install scoop
Make sure PowerShell 5 (or later, include PowerShell Core) and .NET Framework 4.5 (or later) are installed. Then run:
iwr -useb get.scoop.sh | iex
Note: if you get an error you might need to change the execution policy (i.e. enable Powershell) with
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
Set PATH for scoop
command in System Properties
> Advanced
> Environment Variables
.
Add new directory path in System variables
> Path
, choose scoop directory C:\Users\<USERNAME>\scoop\shims
Close and reload terminal.
Install some neccessary packages via scoop
jq
is optional
Run
scoop install curl sudo jq
Install Nerd Fonts
- Got to this link and download
FuraCode
font from Nerd Fonts - Extract and right click >> Install the font.
Setup Window terminal
- Choose Powershell as default.
- Checkout appearance tab of Powershell and choose
FuraCode Nerd Font Retina
as default font. - Select Color scheme
One Half Dark
and enable Acrylic option with opacity 50% to have a better Window terminal display.
Install Neovim (optional)
Run
scoop install neovim gcc
Install some nice modules to improve powershell
1> posh-git
Provides prompt with Git status summary information and tab completion for Git commands, parameters, remotes and branch names.
Install-Module posh-git -Scope CurrentUser -Force
To import module run
Import-Module posh-git
(To import module automatically when shell starting need to set in User Profile, this can be found at the end of article, same for all modules)
2> oh-my-posh
Theming capabilities for the PowerShell prompt in ConEmu
Install-Module oh-my-posh -Scope CurrentUser -Force
To import module run
Import-Module oh-my-posh
Set Promt theme using
Set-PoshPromt -Theme <THEME_NAME>
THEME_NAME can be found here
3> Terminal Icons (display icons of folder/files)
Run
Install-Module -Name Terminal-Icons -Repository PSGallery -Force
To import module run
Import-Module Terminal-Icons
4> Z directory jumper
Jump easily between to recent directories with alias
Run
Install-Module -Name Z -Force
To jump just type z
+ any word
contain in recent directory used in cd
command, check the module for more detail.
5> PSReadLine - Autocompletion recent command on typing
run
Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck
Set PSREadLine option
Set-PSReadLineOption -PredictionSource History
6> Fuzzy finder
Run
scoop install fzf
And
Install-Module -Name PSFzf -Scope CurrentUser -Force
To import module run
Import-Module PSFzf
and
Set-PsFzfOption -PsReadLineChordProvider 'Ctrl+f' -PSReadLineChordReverseHistory 'Ctrl+r'
Custom oh-my-posh theme
You can customize the json config for oh-my-posh prompt, detail documentation can be found here, the json below was modified from M365Princess theme to personalize the colors & add new line command.
1 >> Create oh-my-post json file at ~/.config/powershell/<file-name>.omp.json
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"final_space": true,
"blocks": [
{
"type": "prompt",
"alignment": "left",
"segments": [
{
"type": "session",
"style": "diamond",
"foreground": "#ffffff",
"background": "#031d44",
"leading_diamond": "\uE0B6",
"trailing_diamond": "",
"properties": {
"prefix": "",
"template": "{{ .UserName }}"
}
},
{
"type": "path",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#ffffff",
"background": "#04395e",
"properties": {
"style": "folder"
}
},
{
"type": "git",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#ffffff",
"background": "#70a288",
"properties": {
"fetch_stash_count": true,
"fetch_upstream_icon": true,
"branch_icon": "",
"fetch_status": false,
"template": "{{ .UpstreamIcon }}{{ .HEAD }}{{ if gt .StashCount 0 }} \uF692 {{ .StashCount }}{{ end }}",
"prefix": " \u279C (",
"postfix": ") "
}
},
{
"type": "php",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#ffffff",
"background": "#4063D8",
"properties": {
"prefix": " \ue73d ",
"enable_hyperlink": false
}
},
{
"type": "node",
"style": "powerline",
"powerline_symbol": "\uE0B0",
"foreground": "#ffffff",
"background": "#dab785",
"properties": {
"prefix": " \uE718 "
}
},
{
"type": "time",
"style": "diamond",
"trailing_diamond": "\uE0B0",
"foreground": "#ffffff",
"background": "#d5896f",
"properties": {
"prefix": " \u2665 ",
"time_format": "15:04"
}
}
]
},
{
"type": "prompt",
"alignment": "left",
"newline": true,
"segments": [
{
"type": "text",
"style": "plain",
"foreground": "#007ACC",
"properties": {
"prefix": "",
"text": "\uE602"
}
}
]
}
],
"final_space": true
}
2 >> Load prompt config in user profile
With neovim installed run
nvim $PROFILE.CurrentsUserAllHosts
or open with any text edit
Add this line below to the file
oh-my-posh --init --shell pwsh --config 'C:\Users\<your-username>\.config\powershell\<you-file-name>.omp.json' | Invoke-Expression
3 >> Restart powershell and see result
Wrapping up all the import and option set in user profile
With neovim installed run
nvim $PROFILE.CurrentsUserAllHosts
Or open the file in any text editor, file path can be found by running:
echo $PROFILE.CurrentsUserAllHosts
Finalize user profile with some cool alias and function
Import-Module posh-git
Import-Module oh-my-posh
# PSReadLine
Set-PSREadLineOption -PredictionSource History
# Terminal-Icons
Import-Module Terminal-Icons
# Fzf
Import-Module PSFzf
Set-PsFzfOption -PSReadLineChordProvider 'Ctrl+f' -PSReadLineChordReverseHistory 'Ctrl+r'
# Set theme
Set-PoshPrompt -Theme M365Princess
# Load prompt configs
oh-my-posh --init --shell pwsh --config 'C:\Users\<your-username>\.config\powershell\<you-file-name>.omp.json' | Invoke-Expression
# Alias (Optional)
Set-Alias vim nvim
Set-Alias g git
Set-Alias ll ls
Set-Alias grep findstr
Set-Alias tig 'C:\Program Files\Git\usr\bin\tig.exe'
Set-Alias less 'C:\Program Files\Git\usr\bin\less.exe'
# Ultilities (Optional)
function which ($command) {
Get-Command -Name $command -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty Path -ErrorAction SilentlyContinue
}
Top comments (2)
Oh my posh is nice, until you find out it's not at all compatible with native PowerShell remoting: Enter-PSSession
I have started a project that I think would be a great fit (it's not done yet but it is functional)
github.com/AnderssonPeter/PowerType it gives you autocomplete for cli tools, currently it only supports a subset of git.
Would love feedback!