refactor: move backend options into backend_config section

- Add BackendConfig map[string]any to Config struct
- Deprecate top-level output_path (backward compatible via EffectiveBackendConfig())
- NewHyprland now accepts opts map[string]any instead of raw outputPath
- Factory signature unified to func(*slog.Logger, map[string]any) for all backends
- Update README with backend_config docs and fix Sway skeleton signature
- Update example.yaml to show backend_config instead of output_path
This commit is contained in:
Maksim Totmin
2026-06-22 20:49:02 +07:00
parent 15691c0918
commit cc1137608c
5 changed files with 74 additions and 13 deletions
+7 -5
View File
@@ -60,7 +60,9 @@ func run(logger *slog.Logger) error {
logger.Info("config loaded", "path", configPath, "backend", cfg.Backend)
// Resolve the backend (auto-detect or explicit).
b, err := resolveBackend(cfg.Backend, cfg.OutputPath, logger)
// EffectiveBackendConfig merges deprecated top-level keys
// into the backend_config map with proper priority.
b, err := resolveBackend(cfg.Backend, cfg.EffectiveBackendConfig(), logger)
if err != nil {
return fmt.Errorf("resolve backend: %w", err)
}
@@ -86,11 +88,11 @@ func run(logger *slog.Logger) error {
// resolveBackend returns the first available backend. When backendName is
// "auto", backends are probed in priority order. To add a new backend,
// register it in the backends slice below.
func resolveBackend(backendName, outputPath string, logger *slog.Logger) (backend.Backend, error) {
func resolveBackend(backendName string, backendConfig map[string]any, logger *slog.Logger) (backend.Backend, error) {
// Ordered by priority: preferred backends first.
backends := []struct {
name string
factory func(*slog.Logger, string) (backend.Backend, error)
factory func(*slog.Logger, map[string]any) (backend.Backend, error)
}{
{"hyprland", backend.NewHyprland},
// Future: {"sway", backend.NewSway},
@@ -99,7 +101,7 @@ func resolveBackend(backendName, outputPath string, logger *slog.Logger) (backen
if backendName == "auto" {
for _, entry := range backends {
b, err := entry.factory(logger, outputPath)
b, err := entry.factory(logger, backendConfig)
if err == nil {
logger.Info("auto-detected backend", "name", b.Name())
return b, nil
@@ -112,7 +114,7 @@ func resolveBackend(backendName, outputPath string, logger *slog.Logger) (backen
// Explicit backend selection.
for _, entry := range backends {
if entry.name == backendName {
b, err := entry.factory(logger, outputPath)
b, err := entry.factory(logger, backendConfig)
if err != nil {
return nil, fmt.Errorf("backend %s: %w", backendName, err)
}