Skip to main content

Get Started

Install dependenciesโ€‹


The codebase is in go, meaning we need a working go setup before we can do anything else. Have a look at the go guide to get up and running with go in no time!


Oh My Posh needs at least go 1.18.


To make sure we keep on writing quality code, golang-ci lint is used to validate the changes. Have a look at the local installation guide to make sure you can validate this yourself as well.

Get the source codeโ€‹

The source is hosted on Github. When you want to contribute, create a fork so you can make changes in your repository and create a pull request in the official Oh My Posh repository.

Clone your fork of Oh My Posh locally, replace <user> with your Github username.

git clone<user>/oh-my-posh.git

Running testsโ€‹

The go source code can be found in the src/ directory, make sure to change to that one before continuing.

Unit testsโ€‹

go test -v ./...


golangci-lint run

Building the appโ€‹

The easiest way to validate your changes is to write tests. Unfortunately, as it's a visual tool, you'll want to validate the changes by running the prompt in your shell as well. You can make use of go's bin folder which is usually added to your path to add your own Oh My Posh binary to and immediately see the changes appear in your shell.

go build -o $GOPATH/bin/oh-my-posh

Get an editorโ€‹

A default config(.vscode folder) for Visual Studio Code is available in the repo:

  • golangci-lint is configured as the default linter.

  • Recommended extensions available for a smooth bootstrap.

    recommended extensions

  • Default run and debug configurations available.

Once the extensions are installed:

  • Debug can be started by hitting F5.
  • All tests can be run using the Test explorer.

Extra tipsโ€‹

Configure Delve in VS Codeโ€‹

Delve config is restrictive by default(string limit especially). You can expand some limits in VS Code(settings.json or directly in launch.json):

"go.delveConfig": {

"dlvLoadConfig": {
"followPointers": true,
"maxVariableRecurse": 3,
"maxStringLen": 400,
"maxArrayValues": 400,
"maxStructFields": -1
"apiVersion": 2,
"showGlobalVariables": false

Up Nextโ€‹

With everything set up, you're ready to start making changes and create your first PR!