checkpoint: only manage the configs lists in host config
This commit is contained in:
parent
a7d30e9c01
commit
cef88ba317
6 changed files with 64 additions and 6 deletions
|
@ -16,6 +16,17 @@
|
|||
"Projects"
|
||||
]
|
||||
},
|
||||
"applicationConfigurations": [
|
||||
"alacritty",
|
||||
"amfora",
|
||||
"git",
|
||||
"lf",
|
||||
"logrotate",
|
||||
"tmux",
|
||||
"user-dirs.dirs",
|
||||
"user-dirs.locale",
|
||||
"zk"
|
||||
],
|
||||
"git": {
|
||||
"gpgSign": true,
|
||||
"user": {
|
||||
|
|
|
@ -4,6 +4,15 @@
|
|||
"includeXDGDirectories": true,
|
||||
"additionalDirectories": [],
|
||||
},
|
||||
"applicationConfigurations": [
|
||||
"git",
|
||||
"lf",
|
||||
"logrotate",
|
||||
"river",
|
||||
"tmux",
|
||||
"user-dirs.dirs",
|
||||
"user-dirs.locale"
|
||||
],
|
||||
"git": {
|
||||
"gpgSign": false,
|
||||
"user": {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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{},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in a new issue