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:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user