- Remove mkdocs files (requirements.txt, CNAME) - Add CLI documentation: build.md, release.md, php.md, run.md - Add configuration.md with full reference - Add examples/ directory with sample configurations: - go-cli-release.yaml - wails-desktop-release.yaml - php-laravel-release.yaml - linuxkit-server.yml - linuxkit-docker-format.yml - full-release.yaml - minimal-release.yaml - official-repos.yaml - Flatten existing framework docs into framework/ - Update index.md as CLI entry point Ready for VitePress integration with core-php/docs. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
122 lines
2.5 KiB
Markdown
122 lines
2.5 KiB
Markdown
# Config Service
|
|
|
|
The Config service (`pkg/config`) provides unified configuration management with automatic persistence, feature flags, and XDG-compliant directory paths.
|
|
|
|
## Features
|
|
|
|
- JSON configuration with auto-save
|
|
- Feature flag management
|
|
- XDG Base Directory support
|
|
- Struct serialization helpers
|
|
- Type-safe get/set operations
|
|
|
|
## Basic Usage
|
|
|
|
```go
|
|
import "github.com/Snider/Core/pkg/config"
|
|
|
|
// Standalone usage
|
|
cfg, err := config.New()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// With Core framework
|
|
c, _ := core.New(
|
|
core.WithService(config.Register),
|
|
)
|
|
cfg := core.MustServiceFor[*config.Service](c, "config")
|
|
```
|
|
|
|
## Get & Set Values
|
|
|
|
```go
|
|
// Set a value (auto-saves)
|
|
err := cfg.Set("language", "fr")
|
|
|
|
// Get a value
|
|
var lang string
|
|
err := cfg.Get("language", &lang)
|
|
```
|
|
|
|
Available configuration keys:
|
|
|
|
| Key | Type | Description |
|
|
|-----|------|-------------|
|
|
| `language` | string | UI language code |
|
|
| `default_route` | string | Default navigation route |
|
|
| `configDir` | string | Config files directory |
|
|
| `dataDir` | string | Data files directory |
|
|
| `cacheDir` | string | Cache directory |
|
|
| `workspaceDir` | string | Workspaces directory |
|
|
|
|
## Feature Flags
|
|
|
|
```go
|
|
// Enable a feature
|
|
cfg.EnableFeature("dark_mode")
|
|
|
|
// Check if enabled
|
|
if cfg.IsFeatureEnabled("dark_mode") {
|
|
// Apply dark theme
|
|
}
|
|
|
|
// Disable a feature
|
|
cfg.DisableFeature("dark_mode")
|
|
```
|
|
|
|
## Struct Serialization
|
|
|
|
Store complex data structures in separate JSON files:
|
|
|
|
```go
|
|
type UserPrefs struct {
|
|
Theme string `json:"theme"`
|
|
Notifications bool `json:"notifications"`
|
|
}
|
|
|
|
// Save struct to config/user_prefs.json
|
|
prefs := UserPrefs{Theme: "dark", Notifications: true}
|
|
err := cfg.SaveStruct("user_prefs", prefs)
|
|
|
|
// Load struct from file
|
|
var loaded UserPrefs
|
|
err := cfg.LoadStruct("user_prefs", &loaded)
|
|
```
|
|
|
|
## Directory Paths
|
|
|
|
The service automatically creates XDG-compliant directories:
|
|
|
|
```go
|
|
// Access directory paths
|
|
fmt.Println(cfg.ConfigDir) // ~/.config/lethean or ~/lethean/config
|
|
fmt.Println(cfg.DataDir) // Data storage
|
|
fmt.Println(cfg.CacheDir) // Cache files
|
|
fmt.Println(cfg.WorkspaceDir) // User workspaces
|
|
```
|
|
|
|
## Manual Save
|
|
|
|
Changes are auto-saved, but you can save explicitly:
|
|
|
|
```go
|
|
err := cfg.Save()
|
|
```
|
|
|
|
## Frontend Usage (TypeScript)
|
|
|
|
```typescript
|
|
import { Get, Set, IsFeatureEnabled } from '@bindings/config/service';
|
|
|
|
// Get configuration
|
|
const lang = await Get("language");
|
|
|
|
// Set configuration
|
|
await Set("default_route", "/dashboard");
|
|
|
|
// Check feature flag
|
|
if (await IsFeatureEnabled("dark_mode")) {
|
|
applyDarkTheme();
|
|
}
|
|
```
|