115 lines
3.0 KiB
Markdown
115 lines
3.0 KiB
Markdown
# Configuration
|
|
|
|
## Introduction
|
|
|
|
When managing machine configuration this can be done through many possible ways.
|
|
Ranging from writing `nix` expression in a `flake.nix` file; placing `autoincluded` files into your machine directory; or configuring everything in a simple UI (upcomming).
|
|
|
|
clan currently offers the following methods to configure machines:
|
|
|
|
!!! Success "Recommended for nix people"
|
|
|
|
- flake.nix (i.e. via `buildClan`)
|
|
- `machine` argument
|
|
- `inventory` argument
|
|
|
|
- machines/`machine_name`/configuration.nix (`autoincluded` if it exists)
|
|
|
|
???+ Note "Used by CLI & UI"
|
|
|
|
- inventory.json
|
|
- machines/`machine_name`/hardware-configuration.nix (`autoincluded` if it exists)
|
|
|
|
|
|
!!! Warning "Deprecated"
|
|
|
|
machines/`machine_name`/settings.json
|
|
|
|
## BuildClan
|
|
|
|
The core function that produces a clan. It returns a set of consistent configurations for all machines with ready-to-use secrets, backups and other services.
|
|
|
|
### Inputs
|
|
|
|
`directory`
|
|
: The directory containing the machines subdirectory
|
|
|
|
`machines`
|
|
: Allows to include machine-specific modules i.e. machines.${name} = { ... }
|
|
|
|
`meta`
|
|
: An optional set
|
|
|
|
: `{ name :: string, icon :: string, description :: string }`
|
|
|
|
`inventory`
|
|
: Service set for easily configuring distributed services, such as backups
|
|
|
|
: For more details see [Inventory](#inventory)
|
|
|
|
`specialArgs`
|
|
: Extra arguments to pass to nixosSystem i.e. useful to make self available
|
|
|
|
`pkgsForSystem`
|
|
: A function that maps from architecture to pkgs, if specified this nixpkgs will be only imported once for each system.
|
|
This improves performance, but all nipxkgs.* options will be ignored.
|
|
`(string -> pkgs )`
|
|
|
|
## Inventory
|
|
|
|
`Inventory` is an abstract service layer for consistently configuring distributed services across machine boundaries.
|
|
|
|
The following is the specification of the inventory in `cuelang`
|
|
|
|
```cue
|
|
{
|
|
meta: {
|
|
// A name of the clan (primarily shown by the UI)
|
|
name: string
|
|
// A description of the clan
|
|
description?: string
|
|
// The icon path
|
|
icon?: string
|
|
}
|
|
|
|
// A map of services
|
|
services: [string]: [string]: {
|
|
// Required meta fields
|
|
meta: {
|
|
name: string,
|
|
icon?: string
|
|
description?: string,
|
|
},
|
|
// Machines are added via the avilable roles
|
|
// Membership depends only on this field
|
|
roles: [string]: {
|
|
machines: [...string],
|
|
tags: [...string],
|
|
}
|
|
machines?: {
|
|
[string]: {
|
|
config?: {
|
|
...
|
|
}
|
|
}
|
|
},
|
|
|
|
// Global Configuration for the service
|
|
// Applied to all machines.
|
|
config?: {
|
|
// Schema depends on the module.
|
|
// It declares the interface how the service can be configured.
|
|
...
|
|
}
|
|
}
|
|
// A map of machines, extends the machines of `buildClan`
|
|
machines: [string]: {
|
|
name: string,
|
|
description?: string,
|
|
icon?: string
|
|
tags: [...string]
|
|
system: string
|
|
}
|
|
}
|
|
```
|