diff --git a/docs/docs/install-homebrew.mdx b/docs/docs/install-homebrew.mdx index 6d0dd78f..2c619ccd 100644 --- a/docs/docs/install-homebrew.mdx +++ b/docs/docs/install-homebrew.mdx @@ -1,4 +1,4 @@ -A [Homebrew][brew] formula is available for easy installation. When installing Homebrew for Linux, be sure to follow *[Next steps][nextsteps]* instructions to add Homebrew to your PATH and to your bash shell profile script. +A [Homebrew][brew] formula is available for easy installation. When installing Homebrew for Linux, be sure to follow *[Next steps][nextsteps]* instructions to add Homebrew to your PATH and to your bash shell profile script. ```bash brew tap jandedobbeleer/oh-my-posh @@ -30,9 +30,6 @@ brew update && brew upgrade && exec zsh ## Replace your existing prompt -The guides below assume you copied the theme called `jandedobbeleer.omp.json` to your user's `$HOME` folder. -When using brew, you can find this one at `$(brew --prefix oh-my-posh)/share/oh-my-posh/themes/jandedobbeleer.omp.json`. - [brew]: https://brew.sh [nextsteps]: https://docs.brew.sh/Homebrew-on-Linux#install [themes]: https://ohmyposh.dev/docs/themes diff --git a/docs/docs/install-linux.mdx b/docs/docs/install-linux.mdx index 07db1139..c3e7c8be 100644 --- a/docs/docs/install-linux.mdx +++ b/docs/docs/install-linux.mdx @@ -60,9 +60,6 @@ rm ~/.poshthemes/themes.zip ## Replace your existing prompt -The guides below assume you copied the theme called `jandedobbeleer.omp.json` to your user's `$HOME` folder. -When you've downloaded the themes, you can find this one at `~/.poshthemes/jandedobbeleer.omp.json`. - diff --git a/docs/docs/install-shells.mdx b/docs/docs/install-shells.mdx index 4dfcf466..42c610e1 100644 --- a/docs/docs/install-shells.mdx +++ b/docs/docs/install-shells.mdx @@ -41,7 +41,7 @@ Import-Module oh-my-posh ::: ```powershell -oh-my-posh --init --shell pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression +oh-my-posh --init --shell pwsh --config https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v$(oh-my-posh --version)/themes/jandedobbeleer.omp.json | Invoke-Expression ``` Once added, reload your profile for the changes to take effect. @@ -65,7 +65,7 @@ Use the full path to the config file, not the relative path. ::: ```lua title="oh-my-posh.lua" -load(io.popen('oh-my-posh --config="C:/Users/jan/jandedobbeleer.omp.json" --init --shell cmd'):read("*a"))() +load(io.popen('oh-my-posh --config="https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/jandedobbeleer.omp.json" --init --shell cmd'):read("*a"))() ``` Once added, restart cmd for the changes to take effect. @@ -76,7 +76,7 @@ Once added, restart cmd for the changes to take effect. Add the following to `~/.zshrc`: ```bash -eval "$(oh-my-posh --init --shell zsh --config ~/jandedobbeleer.omp.json)" +eval "$(oh-my-posh --init --shell zsh --config https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v$(oh-my-posh --version)/themes/jandedobbeleer.omp.json)" ``` Once added, reload your profile for the changes to take effect. @@ -91,7 +91,7 @@ source ~/.zshrc Add the following to `~/.bashrc` (could be `~/.profile` or `~/.bash_profile` depending on your environment): ```bash -eval "$(oh-my-posh --init --shell bash --config ~/jandedobbeleer.omp.json)" +eval "$(oh-my-posh --init --shell bash --config https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v$(oh-my-posh --version)/themes/jandedobbeleer.omp.json)" ``` Once added, reload your profile for the changes to take effect. @@ -116,7 +116,7 @@ It's advised to be on the latest version of fish. Versions below 3.1.2 have issu Initialize Oh My Posh in `~/.config/fish/config.fish`: ```bash -oh-my-posh --init --shell fish --config ~/jandedobbeleer.omp.json | source +oh-my-posh --init --shell fish --config hhttps://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/v(oh-my-posh --version)/themes/jandedobbeleer.omp.json | source ``` Once added, reload your config for the changes to take effect. @@ -133,13 +133,13 @@ Set the prompt and restart nu shell: ### Nu < 0.32.0 ```bash -config set prompt "= `{{$(oh-my-posh --config ~/jandedobbeleer.omp.json | str collect)}}`" +config set prompt "= `{{$(oh-my-posh --config https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/jandedobbeleer.omp.json | str collect)}}`" ``` ### Nu >= 0.32.0 ```bash -config set prompt "(oh-my-posh --config ~/jandedobbeleer.omp.json | str collect)" +config set prompt "(oh-my-posh --config https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/jandedobbeleer.omp.json | str collect)" ``` Restart nu shell for the changes to take effect. diff --git a/docs/docs/install-windows.mdx b/docs/docs/install-windows.mdx index 766055a7..a5ef3d0a 100644 --- a/docs/docs/install-windows.mdx +++ b/docs/docs/install-windows.mdx @@ -164,8 +164,6 @@ when setting the prompt using the `--config` flag. -The guides below assume you copied the theme called `jandedobbeleer.omp.json` to your user's `$HOME` folder. - :::caution When using oh-my-posh inside the WSL, make sure to follow the [linux][linux] installation guide. ::: diff --git a/src/engine/init.go b/src/engine/init.go index dda0668b..29cdc692 100644 --- a/src/engine/init.go +++ b/src/engine/init.go @@ -37,7 +37,7 @@ const ( plain = "shell" ) -func getExecutablePath(shell string) (string, error) { +func getExecutablePath(env environment.Environment) (string, error) { executable, err := os.Executable() if err != nil { return "", err @@ -46,7 +46,7 @@ func getExecutablePath(shell string) (string, error) { // which uses unix style paths to resolve the executable's location. // PowerShell knows how to resolve both, so we can swap this without any issue. executable = strings.ReplaceAll(executable, "\\", "/") - switch shell { + switch *env.Args().Shell { case bash, zsh: executable = strings.ReplaceAll(executable, " ", "\\ ") executable = strings.ReplaceAll(executable, "(", "\\(") @@ -56,26 +56,29 @@ func getExecutablePath(shell string) (string, error) { return executable, nil } -func InitShell(shell, configFile string) string { - executable, err := getExecutablePath(shell) +func InitShell(env environment.Environment) string { + executable, err := getExecutablePath(env) if err != nil { return noExe } + shell := *env.Args().Shell switch shell { case pwsh, powershell5: - return fmt.Sprintf("(@(&\"%s\" --print-init --shell=%s --config=\"%s\") -join \"`n\") | Invoke-Expression", executable, shell, configFile) + return fmt.Sprintf("(@(&\"%s\" --print-init --shell=%s --config=\"%s\") -join \"`n\") | Invoke-Expression", executable, shell, *env.Args().Config) case zsh, bash, fish, winCMD: - return PrintShellInit(shell, configFile) + return PrintShellInit(env) default: return fmt.Sprintf("echo \"No initialization script available for %s\"", shell) } } -func PrintShellInit(shell, configFile string) string { - executable, err := getExecutablePath(shell) +func PrintShellInit(env environment.Environment) string { + executable, err := getExecutablePath(env) if err != nil { return noExe } + shell := *env.Args().Shell + configFile := *env.Args().Config switch shell { case pwsh, powershell5: return getShellInitScript(executable, configFile, pwshInit) diff --git a/src/environment/shell.go b/src/environment/shell.go index 09ba5d37..bbe3286e 100644 --- a/src/environment/shell.go +++ b/src/environment/shell.go @@ -5,9 +5,11 @@ import ( "context" "errors" "fmt" + "io" "io/ioutil" "log" "net/http" + "net/url" "oh-my-posh/regex" "os" "os/exec" @@ -228,10 +230,33 @@ func (env *ShellEnvironment) Init(args *Args) { } } +func (env *ShellEnvironment) getConfigPath(location string) { + cfg, err := env.HTTPRequest(location, 5000) + if err != nil { + return + } + configPath := filepath.Join(env.CachePath(), "config.omp.json") + out, err := os.Create(configPath) + if err != nil { + return + } + defer out.Close() + _, err = io.Copy(out, bytes.NewReader(cfg)) + if err != nil { + return + } + env.args.Config = &configPath +} + func (env *ShellEnvironment) ResolveConfigPath() { if env.args == nil || env.args.Config == nil || len(*env.args.Config) == 0 { return } + location, err := url.ParseRequestURI(*env.Args().Config) + if err == nil { + env.getConfigPath(location.String()) + return + } // Cygwin path always needs the full path as we're on Windows but not really. // Doing filepath actions will convert it to a Windows path and break the init script. if env.Platform() == WindowsPlatform && env.Shell() == "bash" { @@ -560,11 +585,11 @@ func (env *ShellEnvironment) Shell() string { return *env.args.Shell } -func (env *ShellEnvironment) HTTPRequest(url string, timeout int, requestModifiers ...HTTPRequestModifier) ([]byte, error) { - defer env.trace(time.Now(), "HTTPRequest", url) +func (env *ShellEnvironment) HTTPRequest(targetURL string, timeout int, requestModifiers ...HTTPRequestModifier) ([]byte, error) { + defer env.trace(time.Now(), "HTTPRequest", targetURL) ctx, cncl := context.WithTimeout(context.Background(), time.Millisecond*time.Duration(timeout)) defer cncl() - request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + request, err := http.NewRequestWithContext(ctx, http.MethodGet, targetURL, nil) if err != nil { return nil, err } diff --git a/src/main.go b/src/main.go index c888e0db..94f2d74f 100644 --- a/src/main.go +++ b/src/main.go @@ -167,12 +167,12 @@ func main() { return } if *args.Init { - init := engine.InitShell(*args.Shell, *args.Config) + init := engine.InitShell(env) fmt.Print(init) return } if *args.PrintInit { - init := engine.PrintShellInit(*args.Shell, *args.Config) + init := engine.PrintShellInit(env) fmt.Print(init) return }