docs: update documentation for refactored structure
- Update NAMESPACE.md: filesystem.device and swapSize defaults now null - Update README.md: add 'Using Athenix as a Library' section with lib.mkFleet - Update copilot-instructions.md: reflect new directory structure and defaults - Update EXTERNAL_MODULES.md: correct paths from variants/ and glue/ to hw/ and fleet/ - Update PROXMOX_LXC.md: update hardware type path reference
This commit is contained in:
24
.github/copilot-instructions.md
vendored
24
.github/copilot-instructions.md
vendored
@@ -26,8 +26,8 @@ This is a **NixOS system configuration repository** that uses:
|
|||||||
- **`flake.nix`**: Entry point - inputs and outputs only
|
- **`flake.nix`**: Entry point - inputs and outputs only
|
||||||
- **`inventory.nix`**: Fleet definitions - host configurations
|
- **`inventory.nix`**: Fleet definitions - host configurations
|
||||||
- **`users.nix`**: User account definitions
|
- **`users.nix`**: User account definitions
|
||||||
- **`variants/`**: Hardware type modules (desktop, laptop, surface, lxc, wsl, etc.)
|
- **`hw/`**: Hardware type modules (desktop, laptop, surface, lxc, wsl, etc.)
|
||||||
- **`glue/`**: Fleet generation logic and common system configuration
|
- **`fleet/`**: Fleet generation logic and common system configuration
|
||||||
- **`sw/`**: Software configurations by system type
|
- **`sw/`**: Software configurations by system type
|
||||||
- **`installer/`**: Build artifact generation (ISO, LXC, etc.)
|
- **`installer/`**: Build artifact generation (ISO, LXC, etc.)
|
||||||
- **`templates/`**: Templates for external configurations
|
- **`templates/`**: Templates for external configurations
|
||||||
@@ -45,9 +45,12 @@ All Innovation Factory-specific options MUST use the `athenix` namespace:
|
|||||||
### Host Options (`athenix.host.*`)
|
### Host Options (`athenix.host.*`)
|
||||||
```nix
|
```nix
|
||||||
athenix.host = {
|
athenix.host = {
|
||||||
filesystem.device = "/dev/sda"; # Boot disk
|
filesystem.device = "/dev/nvme0n1"; # Boot disk (default: null)
|
||||||
filesystem.swapSize = "32G"; # Swap size
|
filesystem.swapSize = "32G"; # Swap size (default: null)
|
||||||
buildMethods = [ "iso" ]; # Artifact types
|
buildMethods = [ "installer-iso" ]; # Artifact types (defined in sw/gc.nix)
|
||||||
|
useHostPrefix = true; # Hostname prefix behavior
|
||||||
|
wsl.user = "username"; # WSL default user
|
||||||
|
};
|
||||||
useHostPrefix = true; # Hostname prefix behavior
|
useHostPrefix = true; # Hostname prefix behavior
|
||||||
wsl.user = "username"; # WSL default user
|
wsl.user = "username"; # WSL default user
|
||||||
};
|
};
|
||||||
@@ -114,6 +117,17 @@ athenix.forUser = "username"; # Convenience: enable user + set WSL us
|
|||||||
3. System modules: Provide `default.nix` that accepts `{ inputs, ... }`
|
3. System modules: Provide `default.nix` that accepts `{ inputs, ... }`
|
||||||
4. Reference in `inventory.nix` or `users.nix` using `builtins.fetchGit`
|
4. Reference in `inventory.nix` or `users.nix` using `builtins.fetchGit`
|
||||||
|
|
||||||
|
#### Using Athenix as a Library
|
||||||
|
External flakes can use Athenix's fleet generator:
|
||||||
|
```nix
|
||||||
|
outputs = { athenix, ... }: {
|
||||||
|
nixosConfigurations = athenix.lib.mkFleet {
|
||||||
|
fleet = import ./custom-inventory.nix;
|
||||||
|
hwTypes = import ./custom-hardware.nix;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
## Important Constraints
|
## Important Constraints
|
||||||
|
|
||||||
### What NOT to Do
|
### What NOT to Do
|
||||||
|
|||||||
35
README.md
35
README.md
@@ -54,7 +54,7 @@ users.nix # User account definitions
|
|||||||
|
|
||||||
flake.lock # Locked dependency versions
|
flake.lock # Locked dependency versions
|
||||||
|
|
||||||
variants/ # Hardware type modules (exportable as nixosModules)
|
hw/ # Hardware type modules (exportable as nixosModules)
|
||||||
├── default.nix # Auto-exports all variant types
|
├── default.nix # Auto-exports all variant types
|
||||||
├── nix-desktop.nix # Desktop workstations
|
├── nix-desktop.nix # Desktop workstations
|
||||||
├── nix-laptop.nix # Laptop systems
|
├── nix-laptop.nix # Laptop systems
|
||||||
@@ -64,8 +64,8 @@ variants/ # Hardware type modules (exportable as nixosModules)
|
|||||||
├── nix-zima.nix # ZimaBoard systems
|
├── nix-zima.nix # ZimaBoard systems
|
||||||
└── nix-ephemeral.nix # Diskless/netboot systems
|
└── nix-ephemeral.nix # Diskless/netboot systems
|
||||||
|
|
||||||
glue/ # Fleet generation and common configuration
|
fleet/ # Fleet generation and common configuration
|
||||||
├── fleet.nix # Processes inventory.nix to generate all hosts
|
├── default.nix # Processes inventory.nix to generate all hosts
|
||||||
├── common.nix # Common NixOS configuration (all hosts)
|
├── common.nix # Common NixOS configuration (all hosts)
|
||||||
├── boot.nix # Boot and filesystem configuration
|
├── boot.nix # Boot and filesystem configuration
|
||||||
└── user-config.nix # User account and home-manager integration
|
└── user-config.nix # User account and home-manager integration
|
||||||
@@ -233,6 +233,35 @@ nix flake show
|
|||||||
|
|
||||||
**See [docs/BUILDING.md](docs/BUILDING.md) for complete guide.**
|
**See [docs/BUILDING.md](docs/BUILDING.md) for complete guide.**
|
||||||
|
|
||||||
|
### Using Athenix as a Library
|
||||||
|
|
||||||
|
Import Athenix in your own flake to use its fleet generation logic with custom inventory:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
inputs.athenix.url = "git+https://git.factory.uga.edu/UGA-Innovation-Factory/athenix.git";
|
||||||
|
|
||||||
|
outputs = { self, athenix, ... }: {
|
||||||
|
# Generate configurations with custom fleet and hardware types
|
||||||
|
nixosConfigurations = athenix.lib.mkFleet {
|
||||||
|
fleet = import ./my-inventory.nix;
|
||||||
|
hwTypes = import ./my-hardware-types.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Or use individual modules
|
||||||
|
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
|
||||||
|
modules = [
|
||||||
|
athenix.nixosModules.hw.nix-desktop # Use Athenix hardware configs
|
||||||
|
athenix.nixosModules.sw # Use Athenix software configs
|
||||||
|
./configuration.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Exported modules:** `nix-desktop`, `nix-laptop`, `nix-surface`, `nix-lxc`, `nix-wsl`, `nix-ephemeral`, `nix-zima`, `sw`, `common`
|
||||||
|
|
||||||
## System Types
|
## System Types
|
||||||
|
|
||||||
Set via `athenix.sw.type`:
|
Set via `athenix.sw.type`:
|
||||||
|
|||||||
@@ -115,8 +115,8 @@ server-config/
|
|||||||
|
|
||||||
When a host is built, modules load in this order:
|
When a host is built, modules load in this order:
|
||||||
|
|
||||||
1. Hardware type module (from `variants/nix-*.nix`)
|
1. Hardware type module (from `hw/nix-*.nix`)
|
||||||
2. Common system configuration (from `glue/common.nix`)
|
2. Common system configuration (from `fleet/common.nix`)
|
||||||
3. Software type module (from `sw/{type}/`)
|
3. Software type module (from `sw/{type}/`)
|
||||||
4. User NixOS modules (from `users.nix` - `nixos.nix` files)
|
4. User NixOS modules (from `users.nix` - `nixos.nix` files)
|
||||||
5. Device-specific overrides (from `inventory.nix`)
|
5. Device-specific overrides (from `inventory.nix`)
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ Hardware and boot-related settings.
|
|||||||
|
|
||||||
Boot disk device path.
|
Boot disk device path.
|
||||||
|
|
||||||
**Type:** String
|
**Type:** String or null
|
||||||
|
|
||||||
**Default:** `"/dev/sda"`
|
**Default:** `null` (must be set by hardware type or per-host)
|
||||||
|
|
||||||
**Example:**
|
**Example:**
|
||||||
```nix
|
```nix
|
||||||
@@ -30,9 +30,9 @@ athenix.host.filesystem.device = "/dev/nvme0n1";
|
|||||||
|
|
||||||
Swap partition size.
|
Swap partition size.
|
||||||
|
|
||||||
**Type:** String (size with unit, e.g., `"32G"`, `"2G"`)
|
**Type:** String (size with unit, e.g., `"32G"`, `"2G"`) or null
|
||||||
|
|
||||||
**Default:** `"32G"`
|
**Default:** `null` (must be set by hardware type or per-host)
|
||||||
|
|
||||||
**Example:**
|
**Example:**
|
||||||
```nix
|
```nix
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ Add the host to `inventory.nix` with the `nix-lxc` type or ensure it has the app
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Your host type configuration (`variants/nix-lxc.nix`) should include:
|
Your host type configuration (`hw/nix-lxc.nix`) should include:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user