mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-26 19:39:39 -08:00
feat(init): remote config
This commit is contained in:
parent
917bb8e7c5
commit
e6fd50a48f
|
@ -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
|
||||
|
|
|
@ -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`.
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -164,8 +164,6 @@ when setting the prompt using the `--config` flag.
|
|||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
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.
|
||||
:::
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue