checkpoint: only manage the configs lists in host config

This commit is contained in:
Dan Anglin 2024-09-11 00:55:09 +01:00
parent a7d30e9c01
commit cef88ba317
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
6 changed files with 64 additions and 6 deletions

View file

@ -16,6 +16,17 @@
"Projects" "Projects"
] ]
}, },
"applicationConfigurations": [
"alacritty",
"amfora",
"git",
"lf",
"logrotate",
"tmux",
"user-dirs.dirs",
"user-dirs.locale",
"zk"
],
"git": { "git": {
"gpgSign": true, "gpgSign": true,
"user": { "user": {

View file

@ -4,6 +4,15 @@
"includeXDGDirectories": true, "includeXDGDirectories": true,
"additionalDirectories": [], "additionalDirectories": [],
}, },
"applicationConfigurations": [
"git",
"lf",
"logrotate",
"river",
"tmux",
"user-dirs.dirs",
"user-dirs.locale"
],
"git": { "git": {
"gpgSign": false, "gpgSign": false,
"user": { "user": {

View file

@ -8,6 +8,7 @@ import (
"io/fs" "io/fs"
"os" "os"
"path/filepath" "path/filepath"
"slices"
) )
const ( const (
@ -119,3 +120,13 @@ func ensureSymlink(source, dest string) error {
return nil return nil
} }
func applicationConfigurationSet(applicationConfigurationList []string) map[string]struct{} {
set := make(map[string]struct{})
for _, app := range slices.All(applicationConfigurationList) {
set[app] = struct{}{}
}
return set
}

View file

@ -12,6 +12,7 @@ import (
type config struct { type config struct {
Directories configDirectories `json:"directories"` Directories configDirectories `json:"directories"`
ApplicationConfigurations []string `json:"applicationConfigurations"`
Git configGit `json:"git"` Git configGit `json:"git"`
} }
@ -85,5 +86,6 @@ func defaultConfig() config {
SigningKey: "", SigningKey: "",
}, },
}, },
ApplicationConfigurations: []string{},
} }
} }

View file

@ -22,14 +22,21 @@ func Files() error {
return fmt.Errorf("unable to get the user's home configuration directory: %w", err) return fmt.Errorf("unable to get the user's home configuration directory: %w", err)
} }
if err = filepath.WalkDir(rootFilesDir, manageFilesFunc(homeConfigDirectory)); err != nil { config, err := newConfig()
if err != nil {
return fmt.Errorf("unable to load the configuration: %w", err)
}
appConfigSet := applicationConfigurationSet(config.ApplicationConfigurations)
if err = filepath.WalkDir(rootFilesDir, manageFilesFunc(homeConfigDirectory, appConfigSet)); err != nil {
return fmt.Errorf("received an error while processing the files: %w", err) return fmt.Errorf("received an error while processing the files: %w", err)
} }
return nil return nil
} }
func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc { func manageFilesFunc(homeConfigDirectory string, appConfigSet map[string]struct{}) fs.WalkDirFunc {
return func(path string, d fs.DirEntry, err error) error { return func(path string, d fs.DirEntry, err error) error {
if err != nil { if err != nil {
return err return err
@ -41,6 +48,12 @@ func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc {
relativePath := strings.TrimPrefix(path, rootFilesDir+"/") relativePath := strings.TrimPrefix(path, rootFilesDir+"/")
appConfigName := strings.SplitN(relativePath, "/", 2)[0]
if _, exists := appConfigSet[appConfigName]; !exists {
return nil
}
managedPath := filepath.Join(rootManagedDir, relativePath) managedPath := filepath.Join(rootManagedDir, relativePath)
configPath := filepath.Join(homeConfigDirectory, relativePath) configPath := filepath.Join(homeConfigDirectory, relativePath)
@ -56,6 +69,8 @@ func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc {
return nil return nil
} }
fmt.Println("Processing file:", relativePath)
if err := sh.Copy(managedPath, path); err != nil { if err := sh.Copy(managedPath, path); err != nil {
return fmt.Errorf("unable to copy %s to %s: %w", path, managedPath, err) return fmt.Errorf("unable to copy %s to %s: %w", path, managedPath, err)
} }

View file

@ -28,14 +28,16 @@ func Templates() error {
return fmt.Errorf("unable to load the configuration: %w", err) return fmt.Errorf("unable to load the configuration: %w", err)
} }
if err = filepath.WalkDir(rootTemplateDir, manageTemplatesFunc(homeConfigDirectory, config)); err != nil { appConfigSet := applicationConfigurationSet(config.ApplicationConfigurations)
if err = filepath.WalkDir(rootTemplateDir, manageTemplatesFunc(homeConfigDirectory, config, appConfigSet)); err != nil {
return fmt.Errorf("received an error while processing the templates: %w", err) return fmt.Errorf("received an error while processing the templates: %w", err)
} }
return nil return nil
} }
func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFunc { func manageTemplatesFunc(homeConfigDirectory string, config config, appConfigSet map[string]struct{}) fs.WalkDirFunc {
funcMap := template.FuncMap{ funcMap := template.FuncMap{
"env": env, "env": env,
} }
@ -51,6 +53,12 @@ func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFu
relativePath := strings.TrimPrefix(templatePath, rootTemplateDir+"/") relativePath := strings.TrimPrefix(templatePath, rootTemplateDir+"/")
appConfigName := strings.SplitN(relativePath, "/", 2)[0]
if _, exists := appConfigSet[appConfigName]; !exists {
return nil
}
if d.IsDir() { if d.IsDir() {
managedDir := filepath.Join(rootManagedDir, relativePath) managedDir := filepath.Join(rootManagedDir, relativePath)
configDir := filepath.Join(homeConfigDirectory, relativePath) configDir := filepath.Join(homeConfigDirectory, relativePath)
@ -77,6 +85,8 @@ func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFu
managedPath := filepath.Join(rootManagedDir, strings.TrimSuffix(relativePath, templateExtension)) managedPath := filepath.Join(rootManagedDir, strings.TrimSuffix(relativePath, templateExtension))
configPath := filepath.Join(homeConfigDirectory, strings.TrimSuffix(relativePath, templateExtension)) configPath := filepath.Join(homeConfigDirectory, strings.TrimSuffix(relativePath, templateExtension))
fmt.Println("Processing template:", relativePath)
if err := renderTemplate(config, templatePath, managedPath, funcMap); err != nil { if err := renderTemplate(config, templatePath, managedPath, funcMap); err != nil {
return fmt.Errorf( return fmt.Errorf(
"unable to generate %s from template %s: %w", "unable to generate %s from template %s: %w",