config.go

 1package cli
 2
 3import (
 4	"fmt"
 5	"os"
 6	"os/exec"
 7	"path/filepath"
 8)
 9
10// RunConfig handles `matcha config [plugin_name]`.
11func RunConfig(args []string) error {
12	editor := os.Getenv("EDITOR")
13	if editor == "" {
14		editor = "vi"
15	}
16
17	home, err := os.UserHomeDir()
18	if err != nil {
19		return fmt.Errorf("cannot find home directory: %w", err)
20	}
21
22	var target string
23	if len(args) == 0 {
24		target = filepath.Join(home, ".config", "matcha", "config.json")
25	} else {
26		name := args[0]
27		// Add .lua extension if not present
28		if filepath.Ext(name) != ".lua" {
29			name += ".lua"
30		}
31		target = filepath.Join(home, ".config", "matcha", "plugins", name)
32	}
33
34	if _, err := os.Stat(target); os.IsNotExist(err) {
35		return fmt.Errorf("file not found: %s", target)
36	}
37
38	cmd := exec.Command(editor, target) //nolint:gosec,noctx
39	cmd.Stdin = os.Stdin
40	cmd.Stdout = os.Stdout
41	cmd.Stderr = os.Stderr
42	return cmd.Run()
43}