mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-10 11:24:59 +01:00
feat: Make shell configurable via config file (#23)
This commit is contained in:
@@ -73,6 +73,12 @@ type TUIConfig struct {
|
||||
CustomTheme map[string]any `json:"customTheme,omitempty"`
|
||||
}
|
||||
|
||||
// ShellConfig defines the configuration for the shell used by the bash tool.
|
||||
type ShellConfig struct {
|
||||
Path string `json:"path,omitempty"`
|
||||
Args []string `json:"args,omitempty"`
|
||||
}
|
||||
|
||||
// Config is the main configuration structure for the application.
|
||||
type Config struct {
|
||||
Data Data `json:"data"`
|
||||
@@ -85,6 +91,7 @@ type Config struct {
|
||||
DebugLSP bool `json:"debugLSP,omitempty"`
|
||||
ContextPaths []string `json:"contextPaths,omitempty"`
|
||||
TUI TUIConfig `json:"tui"`
|
||||
Shell ShellConfig `json:"shell,omitempty"`
|
||||
}
|
||||
|
||||
// Application constants
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/sst/opencode/internal/config"
|
||||
"github.com/sst/opencode/internal/status"
|
||||
)
|
||||
|
||||
@@ -59,12 +60,27 @@ func GetPersistentShell(workingDir string) *PersistentShell {
|
||||
}
|
||||
|
||||
func newPersistentShell(cwd string) *PersistentShell {
|
||||
shellPath := os.Getenv("SHELL")
|
||||
if shellPath == "" {
|
||||
shellPath = "/bin/bash"
|
||||
cfg := config.Get()
|
||||
|
||||
// Use shell from config if specified
|
||||
shellPath := ""
|
||||
shellArgs := []string{"-l"}
|
||||
|
||||
if cfg != nil && cfg.Shell.Path != "" {
|
||||
shellPath = cfg.Shell.Path
|
||||
if len(cfg.Shell.Args) > 0 {
|
||||
shellArgs = cfg.Shell.Args
|
||||
}
|
||||
} else {
|
||||
// Fall back to environment variable
|
||||
shellPath = os.Getenv("SHELL")
|
||||
if shellPath == "" {
|
||||
// Default to bash if neither config nor environment variable is set
|
||||
shellPath = "/bin/bash"
|
||||
}
|
||||
}
|
||||
|
||||
cmd := exec.Command(shellPath, "-l")
|
||||
cmd := exec.Command(shellPath, shellArgs...)
|
||||
cmd.Dir = cwd
|
||||
|
||||
stdinPipe, err := cmd.StdinPipe()
|
||||
|
||||
Reference in New Issue
Block a user