diff --git a/README.md b/README.md index 59b5855..ea24f6b 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,11 @@ docker # this is a comment ``` +### Implicit State File + +If `$XDG_CONFIG_HOME/declpac` (or `~/.config/declpac` on fallback) exists, its +contents are automatically included in the package list. + ### Options | Flag | Alias | Description | diff --git a/pkg/input/input.go b/pkg/input/input.go index 93daa89..3f9f6b8 100644 --- a/pkg/input/input.go +++ b/pkg/input/input.go @@ -31,6 +31,13 @@ func ReadPackages(stateFiles []string) (map[string]bool, error) { } } + implicitStateFile := getImplicitStateFile() + if fileExists(implicitStateFile) { + if err := readStateFile(implicitStateFile, packages); err != nil { + return nil, err + } + } + if err := readStdin(packages); err != nil { return nil, err } @@ -52,6 +59,19 @@ func expandPath(path string) string { return path } +func fileExists(path string) bool { + _, err := os.Stat(path) + return err == nil +} + +func getImplicitStateFile() string { + cfgDir, _ := os.UserConfigDir() + if cfgDir == "" { + cfgDir = "~/.config" + } + return filepath.Join(cfgDir, "declpac") +} + func normalizePackageName(name string) string { name = strings.TrimSpace(name) if name == "" || strings.HasPrefix(name, "#") {