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"
]
},
"applicationConfigurations": [
"alacritty",
"amfora",
"git",
"lf",
"logrotate",
"tmux",
"user-dirs.dirs",
"user-dirs.locale",
"zk"
],
"git": {
"gpgSign": true,
"user": {

View file

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

View file

@ -8,6 +8,7 @@ import (
"io/fs"
"os"
"path/filepath"
"slices"
)
const (
@ -119,3 +120,13 @@ func ensureSymlink(source, dest string) error {
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 {
Directories configDirectories `json:"directories"`
ApplicationConfigurations []string `json:"applicationConfigurations"`
Git configGit `json:"git"`
}
@ -85,5 +86,6 @@ func defaultConfig() config {
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)
}
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 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 {
if err != nil {
return err
@ -41,6 +48,12 @@ func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc {
relativePath := strings.TrimPrefix(path, rootFilesDir+"/")
appConfigName := strings.SplitN(relativePath, "/", 2)[0]
if _, exists := appConfigSet[appConfigName]; !exists {
return nil
}
managedPath := filepath.Join(rootManagedDir, relativePath)
configPath := filepath.Join(homeConfigDirectory, relativePath)
@ -56,6 +69,8 @@ func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc {
return nil
}
fmt.Println("Processing file:", relativePath)
if err := sh.Copy(managedPath, path); err != nil {
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)
}
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 nil
}
func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFunc {
func manageTemplatesFunc(homeConfigDirectory string, config config, appConfigSet map[string]struct{}) fs.WalkDirFunc {
funcMap := template.FuncMap{
"env": env,
}
@ -51,6 +53,12 @@ func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFu
relativePath := strings.TrimPrefix(templatePath, rootTemplateDir+"/")
appConfigName := strings.SplitN(relativePath, "/", 2)[0]
if _, exists := appConfigSet[appConfigName]; !exists {
return nil
}
if d.IsDir() {
managedDir := filepath.Join(rootManagedDir, 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))
configPath := filepath.Join(homeConfigDirectory, strings.TrimSuffix(relativePath, templateExtension))
fmt.Println("Processing template:", relativePath)
if err := renderTemplate(config, templatePath, managedPath, funcMap); err != nil {
return fmt.Errorf(
"unable to generate %s from template %s: %w",