Skip to content

Commit 86c36c9

Browse files
committed
fix: print config that is currently used - takes into the accout both flags and config
refactor: added mergeConfig to merge flags and config, simplifies command.go
1 parent 89c726f commit 86c36c9

File tree

4 files changed

+107
-85
lines changed

4 files changed

+107
-85
lines changed

internal/command/command.go

Lines changed: 5 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,11 @@ func PrepareCommand(cmdFlags flags.CmdFlags) string {
1717
fzfQuery := flags.GetCmdInput()
1818

1919
// Determine the base directory from config or flag
20-
var baseDir string
2120
var err error
2221

23-
config, err := config.ReadConfig()
24-
if err != nil {
25-
fmt.Fprintf(os.Stderr, "Error reading config: %v\n", err)
26-
os.Exit(1)
27-
}
28-
29-
if cmdFlags.BaseDir != "" {
30-
baseDir = cmdFlags.BaseDir
31-
} else {
32-
baseDir, err = getBaseDirFromConfig(config)
33-
if err != nil {
34-
fmt.Fprintf(os.Stderr, "Error getting base direcotry: %v\n", err)
35-
os.Exit(1)
36-
}
37-
}
22+
// Merge config and flags under one config
23+
config := config.MergeConfig(cmdFlags)
24+
baseDir := config.BaseDir
3825

3926
if fzfQuery == "" {
4027
fmt.Printf("cd %q", baseDir)
@@ -68,20 +55,8 @@ func PrepareCommand(cmdFlags flags.CmdFlags) string {
6855
os.Exit(1)
6956
}
7057

71-
// Prepare the preview viewer
72-
var preview string
73-
if cmdFlags.PreviewViewer != "" {
74-
preview = cmdFlags.PreviewViewer
75-
} else {
76-
preview, err = getPreviewViewer(config)
77-
if err != nil {
78-
fmt.Fprintln(os.Stderr, err)
79-
os.Exit(1)
80-
}
81-
}
82-
8358
// Prepare fzf command
84-
fzfCmd := exec.Command("fzf", "--query", fzfQuery, "--select-1", "--exit-0", "--preview", "if [ -f {}/README.md ]; then "+preview+" {}/README.md; else echo \"No README found\"; fi")
59+
fzfCmd := exec.Command("fzf", "--query", fzfQuery, "--select-1", "--exit-0", "--preview", "if [ -f {}/README.md ]; then "+config.PreviewViewer+" {}/README.md; else echo \"No README found\"; fi")
8560
fzfCmd.Stdin = strings.NewReader(strings.Join(dirs, "\n"))
8661
output, err := fzfCmd.Output()
8762
if err != nil {
@@ -103,54 +78,13 @@ func PrepareCommand(cmdFlags flags.CmdFlags) string {
10378
// Output the shell command to stdout
10479
cmd := fmt.Sprintf("cd %q", selectedDir)
10580
if cmdFlags.Execute {
106-
editor := getEditor(config, &cmdFlags)
81+
editor := config.Editor
10782
cmd += fmt.Sprintf(" && %s .", editor)
10883
}
10984

11085
return cmd
11186
}
11287

113-
func getEditor(config *config.Config, cmdFlags *flags.CmdFlags) string {
114-
if cmdFlags.Editor != "" {
115-
return cmdFlags.Editor
116-
}
117-
118-
if config.Editor != "" {
119-
return config.Editor
120-
}
121-
122-
// Fall back to $EDITOR environment variable
123-
editor := os.Getenv("EDITOR")
124-
if editor != "" {
125-
return editor
126-
}
127-
128-
// Final fallback
129-
return "vi"
130-
}
131-
132-
func getBaseDirFromConfig(config *config.Config) (string, error) {
133-
// If base_dir is not set in config, use the default
134-
if config.BaseDir == "" {
135-
home, err := os.UserHomeDir()
136-
if err != nil {
137-
return "", err
138-
}
139-
return filepath.Join(home, "Workspace"), nil
140-
}
141-
142-
return config.BaseDir, nil
143-
}
144-
145-
func getPreviewViewer(config *config.Config) (string, error) {
146-
// If base_dir is not set in config, use the default
147-
if config.PreviewViewer == "" {
148-
return "less", nil
149-
}
150-
151-
return config.PreviewViewer, nil
152-
}
153-
15488
func listDirs(dir *string) ([]string, error) {
15589
var dirs []string
15690
entries, err := os.ReadDir(*dir)

internal/config/config.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Package config handles reading config from XDG_CONFIG_HOME or $HOME/.config
1+
// Package config handles configuration management
22
package config
33

44
import (
@@ -31,18 +31,6 @@ func ReadConfig() (*Config, error) {
3131
return &config, nil
3232
}
3333

34-
func PrintConfig() {
35-
config, err := ReadConfig()
36-
if err != nil {
37-
fmt.Fprintf(os.Stderr, "Error reading config %v\n", err)
38-
os.Exit(1)
39-
}
40-
41-
yamlConfig, _ := yaml.Marshal(config)
42-
43-
fmt.Println(string(yamlConfig))
44-
}
45-
4634
func getConfigPathOrDefault() string {
4735
configHome := os.Getenv("XDG_CONFIG_HOME")
4836
if configHome == "" {

internal/config/mergeConfig.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package config
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"path/filepath"
7+
8+
"github.com/Filip7/workcd-go/internal/flags"
9+
"go.yaml.in/yaml/v4"
10+
)
11+
12+
// MergeConfig merges config file and flags passed by the user
13+
// Idea is to have only one config as source of truth
14+
// In case no config is set, nor flags passed, following defaults are set:
15+
// editor: vi
16+
// preview viewer: less
17+
// default search dir: $HOME/Workspace
18+
func MergeConfig(cmdFlags flags.CmdFlags) *Config {
19+
// First read the config file
20+
config, err := ReadConfig()
21+
if err != nil {
22+
fmt.Fprintf(os.Stderr, "Error reading config %v\n", err)
23+
os.Exit(1)
24+
}
25+
26+
// Get the base dir
27+
if cmdFlags.BaseDir != "" {
28+
config.BaseDir = cmdFlags.BaseDir
29+
} else {
30+
config.BaseDir, err = getBaseDirFromConfig(config)
31+
if err != nil {
32+
fmt.Fprintf(os.Stderr, "Error getting base direcotry: %v\n", err)
33+
os.Exit(1)
34+
}
35+
}
36+
37+
// Prepare the preview viewer
38+
if cmdFlags.PreviewViewer != "" {
39+
config.PreviewViewer = cmdFlags.PreviewViewer
40+
} else {
41+
config.PreviewViewer, err = getPreviewViewer(config)
42+
if err != nil {
43+
fmt.Fprintln(os.Stderr, err)
44+
os.Exit(1)
45+
}
46+
}
47+
48+
config.Editor = getEditor(config, &cmdFlags)
49+
50+
return config
51+
}
52+
53+
func PrintConfig(cmdFlags flags.CmdFlags) {
54+
config := MergeConfig(cmdFlags)
55+
56+
yamlConfig, _ := yaml.Marshal(config)
57+
58+
fmt.Println(string(yamlConfig))
59+
}
60+
61+
func getBaseDirFromConfig(config *Config) (string, error) {
62+
// If base_dir is not set in config, use the default
63+
if config.BaseDir == "" {
64+
home, err := os.UserHomeDir()
65+
if err != nil {
66+
return "", err
67+
}
68+
return filepath.Join(home, "Workspace"), nil
69+
}
70+
71+
return config.BaseDir, nil
72+
}
73+
74+
func getPreviewViewer(config *Config) (string, error) {
75+
// If base_dir is not set in config, use the default
76+
if config.PreviewViewer == "" {
77+
return "less", nil
78+
}
79+
80+
return config.PreviewViewer, nil
81+
}
82+
83+
func getEditor(config *Config, cmdFlags *flags.CmdFlags) string {
84+
if cmdFlags.Editor != "" {
85+
return cmdFlags.Editor
86+
}
87+
88+
if config.Editor != "" {
89+
return config.Editor
90+
}
91+
92+
// Fall back to $EDITOR environment variable
93+
editor := os.Getenv("EDITOR")
94+
if editor != "" {
95+
return editor
96+
}
97+
98+
// Final fallback
99+
return "vi"
100+
}

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
func main() {
1313
cmdFlags := flags.SetupFlags()
1414
if cmdFlags.PrintConfig {
15-
config.PrintConfig()
15+
config.PrintConfig(cmdFlags)
1616
os.Exit(0)
1717
}
1818

0 commit comments

Comments
 (0)