69 lines
2.2 KiB
Scheme
69 lines
2.2 KiB
Scheme
;; utils/config/state.scm - Configuration state management
|
|
|
|
(define-module (utils config state)
|
|
#:use-module (utils config defaults)
|
|
#:use-module (utils config loader)
|
|
#:use-module (utils config accessor)
|
|
#:use-module (utils logging)
|
|
#:export (get-current-config
|
|
set-current-config!
|
|
reload-config!
|
|
get-config-value
|
|
get-machine-config
|
|
get-all-machines
|
|
get-ssh-config
|
|
validate-machine-name
|
|
get-homelab-root))
|
|
|
|
;; Mutable state: Current loaded configuration
|
|
(define current-config default-config)
|
|
|
|
;; Impure function: Get current configuration
|
|
(define (get-current-config)
|
|
"Get current loaded configuration"
|
|
current-config)
|
|
|
|
;; Impure function: Set current configuration
|
|
(define (set-current-config! config)
|
|
"Set current configuration (impure)"
|
|
(set! current-config config))
|
|
|
|
;; Impure function: Reload configuration from file
|
|
(define (reload-config! . args)
|
|
"Reload configuration from file"
|
|
(let ((new-config (apply load-config args)))
|
|
(set-current-config! new-config)
|
|
new-config))
|
|
|
|
;; Impure wrappers for pure accessor functions
|
|
(define (get-config-value path . default)
|
|
"Get configuration value from current config"
|
|
(apply get-config-value-pure current-config path default))
|
|
|
|
(define (get-machine-config machine-name)
|
|
"Get machine configuration from current config"
|
|
(get-machine-config-pure current-config machine-name))
|
|
|
|
(define (get-all-machines)
|
|
"Get all machine names from current config"
|
|
(get-all-machines-pure current-config))
|
|
|
|
(define (get-ssh-config machine-name)
|
|
"Get SSH configuration from current config"
|
|
(get-ssh-config-pure current-config machine-name))
|
|
|
|
(define (validate-machine-name machine-name)
|
|
"Validate machine name against current config"
|
|
(if (validate-machine-name-pure current-config machine-name)
|
|
#t
|
|
(begin
|
|
(log-error "Unknown machine: ~a" machine-name)
|
|
(log-error "Available machines: ~a" (string-join (get-all-machines) ", "))
|
|
#f)))
|
|
|
|
(define (get-homelab-root)
|
|
"Get home lab root directory from current config"
|
|
(get-config-value '(homelab-root) "/home/geir/Home-lab"))
|
|
|
|
;; Initialize configuration on module load
|
|
(reload-config!)
|