feat: Rename project to 'Athenix'

This commit is contained in:
UGA Innovation Factory
2025-12-18 12:07:25 -05:00
committed by Hunter Halloran
parent d97ece898c
commit d205211c7d
39 changed files with 278 additions and 277 deletions

View File

@@ -70,7 +70,7 @@ nix build github:UGA-Innovation-Factory/nixos-systems#installer-iso-nix-laptop1
3. After installation completes, remove the USB drive and reboot
4. Log in with the configured user credentials
**Note:** The installer will **erase all data** on the target disk specified in `ugaif.host.filesystem.device`.
**Note:** The installer will **erase all data** on the target disk specified in `athenix.host.filesystem.device`.
## Live ISOs
@@ -224,7 +224,7 @@ ssh engr-ugaif@nix-builder df -h
In `inventory.nix`:
```nix
ugaif.sw.remoteBuild.enable = false;
athenix.sw.remoteBuild.enable = false;
```
### Out of Disk Space

View File

@@ -288,13 +288,13 @@ vim sw/headless/programs.nix
### Packages for Specific Hosts
Add to `ugaif.sw.extraPackages` in `inventory.nix`:
Add to `athenix.sw.extraPackages` in `inventory.nix`:
```nix
nix-laptop = {
devices = 2;
overrides = {
ugaif.sw.extraPackages = with pkgs; [
athenix.sw.extraPackages = with pkgs; [
vim
docker
kubernetes-helm
@@ -378,7 +378,7 @@ uv pip install -r requirements.txt
Python development tools are configured in `sw/python.nix` and can be controlled via:
```nix
ugaif.sw.python.enable = true; # Default: enabled
athenix.sw.python.enable = true; # Default: enabled
```
## Contributing
@@ -388,7 +388,7 @@ ugaif.sw.python.enable = true; # Default: enabled
- Run formatter before committing: `nix fmt`
- Follow existing code structure and conventions
- Add comments for complex logic
- Use the `ugaif.*` namespace for all custom options
- Use the `athenix.*` namespace for all custom options
### Testing Workflow

View File

@@ -32,7 +32,7 @@ nix-lxc = {
devices = {
# Traditional inline configuration
"local-server" = {
ugaif.users.admin.enable = true;
athenix.users.admin.enable = true;
services.nginx.enable = true;
};
@@ -66,9 +66,9 @@ server-config/
};
};
# Use ugaif namespace options
ugaif.users.admin.enable = true;
ugaif.sw.type = "headless";
# Use athenix namespace options
athenix.users.admin.enable = true;
athenix.sw.type = "headless";
}
```
@@ -108,7 +108,7 @@ External user modules provide home-manager configurations (dotfiles, packages, p
### Usage in users.nix
```nix
ugaif.users = {
athenix.users = {
# External user module (dotfiles, home-manager, and user options)
myuser = builtins.fetchGit {
url = "https://github.com/username/dotfiles";
@@ -142,7 +142,7 @@ dotfiles/
{ config, lib, pkgs, osConfig ? null, ... }:
{
# ========== User Account Configuration ==========
ugaif.users.myusername = {
athenix.users.myusername = {
description = "Your Full Name";
shell = pkgs.zsh;
hashedPassword = "!";
@@ -157,7 +157,7 @@ dotfiles/
vim
git
htop
] ++ lib.optional (osConfig.ugaif.sw.type or null == "desktop") firefox;
] ++ lib.optional (osConfig.athenix.sw.type or null == "desktop") firefox;
programs.git = {
enable = true;
@@ -216,7 +216,7 @@ username = {
useNvimPlugins = true; # Apply system nvim config (default: true)
# Enable on specific systems (see docs/INVENTORY.md)
enable = false; # Set in inventory.nix via ugaif.users.username.enable
enable = false; # Set in inventory.nix via athenix.users.username.enable
};
```
@@ -337,7 +337,7 @@ External system modules are imported and merged into the NixOS configuration:
import externalModulePath { inherit inputs; }
```
They can use all standard NixOS options plus `ugaif.*` namespace options.
They can use all standard NixOS options plus `athenix.*` namespace options.
### User Module Integration
@@ -346,7 +346,7 @@ External user modules are loaded in two contexts:
**User options (NixOS module context):**
```nix
import (externalPath + "/user.nix") { inherit inputs; }
# Evaluated as NixOS module to extract ugaif.users.<username> options
# Evaluated as NixOS module to extract athenix.users.<username> options
```
**Home-manager configuration:**
@@ -375,7 +375,7 @@ nix-lxc = {
};
overrides = {
# Apply to all devices, including external ones
ugaif.users.admin.enable = true;
athenix.users.admin.enable = true;
networking.firewall.allowedTCPPorts = [ 80 443 ];
};
};
@@ -389,7 +389,7 @@ nix-lxc = {
{ config, lib, pkgs, osConfig ? null, ... }:
{
# User account options
ugaif.users.myusername = {
athenix.users.myusername = {
description = "My Name";
shell = pkgs.zsh;
hashedPassword = "!";
@@ -418,7 +418,7 @@ dotfiles/
{ config, lib, pkgs, osConfig ? null, ... }:
{
# User account configuration
ugaif.users.myusername = {
athenix.users.myusername = {
description = "My Full Name";
shell = pkgs.zsh;
extraGroups = [ "wheel" "networkmanager" ];
@@ -433,7 +433,7 @@ dotfiles/
ripgrep
fd
bat
] ++ lib.optional (osConfig.ugaif.sw.type or null == "desktop") firefox;
] ++ lib.optional (osConfig.athenix.sw.type or null == "desktop") firefox;
programs.git = {
enable = true;

View File

@@ -18,7 +18,7 @@ The `inventory.nix` file defines all hosts in the fleet using a flexible system.
- **Numeric suffixes**: no dash (e.g., `nix-laptop1`, `nix-laptop2`)
- **Non-numeric suffixes**: with dash (e.g., `nix-laptop-alpha`, `nix-laptop-beta`)
- **Custom hostnames**: Set `ugaif.host.useHostPrefix = false` to use suffix as full hostname
- **Custom hostnames**: Set `athenix.host.useHostPrefix = false` to use suffix as full hostname
## Adding Hosts
@@ -37,8 +37,8 @@ nix-laptop = {
devices = 5;
overrides = {
# Applied to ALL nix-laptop hosts
ugaif.users.student.enable = true;
ugaif.sw.extraPackages = with pkgs; [ vim git ];
athenix.users.student.enable = true;
athenix.sw.extraPackages = with pkgs; [ vim git ];
};
};
```
@@ -48,9 +48,9 @@ nix-laptop = {
```nix
nix-surface = {
devices = {
"1".ugaif.sw.kioskUrl = "https://dashboard1.example.com";
"2".ugaif.sw.kioskUrl = "https://dashboard2.example.com";
"3".ugaif.sw.kioskUrl = "https://dashboard3.example.com";
"1".athenix.sw.kioskUrl = "https://dashboard1.example.com";
"2".athenix.sw.kioskUrl = "https://dashboard2.example.com";
"3".athenix.sw.kioskUrl = "https://dashboard3.example.com";
};
};
```
@@ -62,12 +62,12 @@ nix-surface = {
defaultCount = 2; # Creates nix-surface1, nix-surface2
devices = {
"special" = { # Creates nix-surface-special
ugaif.sw.kioskUrl = "https://special-dashboard.example.com";
athenix.sw.kioskUrl = "https://special-dashboard.example.com";
};
};
overrides = {
# Applied to all devices (including "special")
ugaif.sw.kioskUrl = "https://default-dashboard.example.com";
athenix.sw.kioskUrl = "https://default-dashboard.example.com";
};
};
```
@@ -76,15 +76,15 @@ nix-surface = {
### Direct Configuration (Recommended)
Use any NixOS or `ugaif.*` option:
Use any NixOS or `athenix.*` option:
```nix
"1" = {
# UGAIF options
ugaif.users.myuser.enable = true;
ugaif.host.filesystem.swapSize = "64G";
ugaif.sw.extraPackages = with pkgs; [ docker ];
ugaif.sw.kioskUrl = "https://example.com";
# Athenix options
athenix.users.myuser.enable = true;
athenix.host.filesystem.swapSize = "64G";
athenix.sw.extraPackages = with pkgs; [ docker ];
athenix.sw.kioskUrl = "https://example.com";
# Standard NixOS options
networking.firewall.enable = false;
@@ -93,14 +93,14 @@ Use any NixOS or `ugaif.*` option:
};
```
### Convenience: `ugaif.forUser`
### Convenience: `athenix.forUser`
Quick setup for single-user systems (especially WSL):
```nix
nix-wsl = {
devices = {
"alice".ugaif.forUser = "alice-username";
"alice".athenix.forUser = "alice-username";
};
};
```
@@ -130,7 +130,7 @@ nix-lxc = {
nix-laptop = {
devices = 10; # Creates nix-laptop1 through nix-laptop10
overrides = {
ugaif.users.student.enable = true;
athenix.users.student.enable = true;
};
};
```
@@ -142,13 +142,13 @@ nix-surface = {
defaultCount = 5; # nix-surface1 through nix-surface5 (default config)
devices = {
"admin" = { # nix-surface-admin (special config)
ugaif.sw.type = "desktop"; # Full desktop instead of kiosk
ugaif.users.admin.enable = true;
athenix.sw.type = "desktop"; # Full desktop instead of kiosk
athenix.users.admin.enable = true;
};
};
overrides = {
ugaif.sw.type = "tablet-kiosk";
ugaif.sw.kioskUrl = "https://dashboard.factory.uga.edu";
athenix.sw.type = "tablet-kiosk";
athenix.sw.kioskUrl = "https://dashboard.factory.uga.edu";
};
};
```
@@ -159,15 +159,15 @@ nix-surface = {
nix-lxc = {
devices = {
"nix-builder" = {
ugaif.sw.type = "headless";
athenix.sw.type = "headless";
};
"webserver" = {
ugaif.sw.type = "headless";
athenix.sw.type = "headless";
services.nginx.enable = true;
};
};
overrides = {
ugaif.host.useHostPrefix = false; # Use exact device key as hostname
athenix.host.useHostPrefix = false; # Use exact device key as hostname
};
};
```
@@ -177,8 +177,8 @@ nix-lxc = {
```nix
nix-wsl = {
devices = {
"alice".ugaif.forUser = "alice-uga";
"bob".ugaif.forUser = "bob-uga";
"alice".athenix.forUser = "alice-uga";
"bob".athenix.forUser = "bob-uga";
};
};
```
@@ -187,4 +187,4 @@ nix-wsl = {
- [USER_CONFIGURATION.md](USER_CONFIGURATION.md) - User account management
- [EXTERNAL_MODULES.md](EXTERNAL_MODULES.md) - External configuration modules
- [Configuration Namespace Reference](NAMESPACE.md) - All `ugaif.*` options
- [Configuration Namespace Reference](NAMESPACE.md) - All `athenix.*` options

View File

@@ -1,36 +1,36 @@
# Configuration Namespace Reference
All UGA Innovation Factory-specific options are under the `ugaif` namespace to avoid conflicts with standard NixOS options.
All UGA Innovation Factory-specific options are under the `athenix` namespace to avoid conflicts with standard NixOS options.
## Table of Contents
- [Host Configuration (`ugaif.host`)](#host-configuration-ugaifhost)
- [Software Configuration (`ugaif.sw`)](#software-configuration-ugaifsw)
- [User Management (`ugaif.users`)](#user-management-ugaifusers)
- [System Configuration (`ugaif.system`)](#system-configuration-ugaifsystem)
- [Host Configuration (`athenix.host`)](#host-configuration-athenixhost)
- [Software Configuration (`athenix.sw`)](#software-configuration-athenixsw)
- [User Management (`athenix.users`)](#user-management-athenixusers)
- [System Configuration (`athenix.system`)](#system-configuration-athenixsystem)
- [Convenience Options](#convenience-options)
## Host Configuration (`ugaif.host`)
## Host Configuration (`athenix.host`)
Hardware and host-specific settings.
### `ugaif.host.filesystem`
### `athenix.host.filesystem`
Disk and storage configuration.
**Options:**
- `ugaif.host.filesystem.device` - Boot disk device (default: `/dev/sda`)
- `ugaif.host.filesystem.swapSize` - Swap file size (default: `"32G"`)
- `athenix.host.filesystem.device` - Boot disk device (default: `/dev/sda`)
- `athenix.host.filesystem.swapSize` - Swap file size (default: `"32G"`)
**Example:**
```nix
ugaif.host.filesystem = {
athenix.host.filesystem = {
device = "/dev/nvme0n1";
swapSize = "64G";
};
```
### `ugaif.host.buildMethods`
### `athenix.host.buildMethods`
List of supported build artifact types for this host.
@@ -42,10 +42,10 @@ List of supported build artifact types for this host.
**Example:**
```nix
ugaif.host.buildMethods = [ "lxc" "proxmox" ];
athenix.host.buildMethods = [ "lxc" "proxmox" ];
```
### `ugaif.host.useHostPrefix`
### `athenix.host.useHostPrefix`
Whether to prepend the host type prefix to the hostname (used in inventory generation).
@@ -55,26 +55,26 @@ Whether to prepend the host type prefix to the hostname (used in inventory gener
**Example:**
```nix
ugaif.host.useHostPrefix = false; # "builder" instead of "nix-lxc-builder"
athenix.host.useHostPrefix = false; # "builder" instead of "nix-lxc-builder"
```
### `ugaif.host.wsl`
### `athenix.host.wsl`
WSL-specific configuration options.
**Options:**
- `ugaif.host.wsl.user` - Default WSL user for this instance
- `athenix.host.wsl.user` - Default WSL user for this instance
**Example:**
```nix
ugaif.host.wsl.user = "myusername";
athenix.host.wsl.user = "myusername";
```
## Software Configuration (`ugaif.sw`)
## Software Configuration (`athenix.sw`)
System software and application configuration.
### `ugaif.sw.enable`
### `athenix.sw.enable`
Enable the software configuration module.
@@ -82,7 +82,7 @@ Enable the software configuration module.
**Default:** `true`
### `ugaif.sw.type`
### `athenix.sw.type`
System type that determines the software profile.
@@ -98,10 +98,10 @@ System type that determines the software profile.
**Example:**
```nix
ugaif.sw.type = "headless";
athenix.sw.type = "headless";
```
### `ugaif.sw.kioskUrl`
### `athenix.sw.kioskUrl`
URL to display in kiosk mode browsers (for `tablet-kiosk` and `stateless-kiosk` types).
@@ -111,38 +111,38 @@ URL to display in kiosk mode browsers (for `tablet-kiosk` and `stateless-kiosk`
**Example:**
```nix
ugaif.sw.kioskUrl = "https://dashboard.example.com";
athenix.sw.kioskUrl = "https://dashboard.example.com";
```
### `ugaif.sw.python`
### `athenix.sw.python`
Python development tools configuration.
**Options:**
- `ugaif.sw.python.enable` - Enable Python tools (pixi, uv) (default: `true`)
- `athenix.sw.python.enable` - Enable Python tools (pixi, uv) (default: `true`)
**Example:**
```nix
ugaif.sw.python.enable = true;
athenix.sw.python.enable = true;
```
### `ugaif.sw.remoteBuild`
### `athenix.sw.remoteBuild`
Remote build server configuration for offloading builds.
**Options:**
- `ugaif.sw.remoteBuild.enable` - Use remote builders (default: enabled on tablets)
- `ugaif.sw.remoteBuild.hosts` - List of build server hostnames
- `athenix.sw.remoteBuild.enable` - Use remote builders (default: enabled on tablets)
- `athenix.sw.remoteBuild.hosts` - List of build server hostnames
**Example:**
```nix
ugaif.sw.remoteBuild = {
athenix.sw.remoteBuild = {
enable = true;
hosts = [ "nix-builder" "nix-builder2" ];
};
```
### `ugaif.sw.extraPackages`
### `athenix.sw.extraPackages`
Additional system packages to install beyond the type defaults.
@@ -152,14 +152,14 @@ Additional system packages to install beyond the type defaults.
**Example:**
```nix
ugaif.sw.extraPackages = with pkgs; [
athenix.sw.extraPackages = with pkgs; [
vim
htop
docker
];
```
### `ugaif.sw.excludePackages`
### `athenix.sw.excludePackages`
Packages to exclude from the default list for this system type.
@@ -169,16 +169,16 @@ Packages to exclude from the default list for this system type.
**Example:**
```nix
ugaif.sw.excludePackages = with pkgs; [
athenix.sw.excludePackages = with pkgs; [
firefox # Remove Firefox from default desktop packages
];
```
## User Management (`ugaif.users`)
## User Management (`athenix.users`)
User account configuration and management.
### `ugaif.users.<username>.enable`
### `athenix.users.<username>.enable`
Enable a specific user account on this system.
@@ -188,7 +188,7 @@ Enable a specific user account on this system.
**Example:**
```nix
ugaif.users = {
athenix.users = {
myuser.enable = true;
student.enable = true;
};
@@ -200,7 +200,7 @@ Each user in `users.nix` can be configured with:
```nix
# Option 1: Define inline in users.nix
ugaif.users.myuser = {
athenix.users.myuser = {
description = "Full Name";
isNormalUser = true; # Default: true
extraGroups = [ "wheel" "docker" ]; # Additional groups
@@ -214,30 +214,30 @@ ugaif.users.myuser = {
};
# Option 2: Use external configuration (recommended)
# The external user.nix can set ugaif.users.myuser options directly
ugaif.users.anotheruser.external = builtins.fetchGit {
# The external user.nix can set athenix.users.myuser options directly
athenix.users.anotheruser.external = builtins.fetchGit {
url = "https://github.com/username/dotfiles";
rev = "abc123...";
};
```
## System Configuration (`ugaif.system`)
## System Configuration (`athenix.system`)
System-wide settings and services.
### `ugaif.system.gc`
### `athenix.system.gc`
Automatic garbage collection configuration.
**Options:**
- `ugaif.system.gc.enable` - Enable automatic garbage collection (default: `true`)
- `ugaif.system.gc.frequency` - How often to run (default: `"weekly"`)
- `ugaif.system.gc.retentionDays` - Days to keep old generations (default: `30`)
- `ugaif.system.gc.optimise` - Optimize Nix store automatically (default: `true`)
- `athenix.system.gc.enable` - Enable automatic garbage collection (default: `true`)
- `athenix.system.gc.frequency` - How often to run (default: `"weekly"`)
- `athenix.system.gc.retentionDays` - Days to keep old generations (default: `30`)
- `athenix.system.gc.optimise` - Optimize Nix store automatically (default: `true`)
**Example:**
```nix
ugaif.system.gc = {
athenix.system.gc = {
enable = true;
frequency = "daily";
retentionDays = 14;
@@ -247,7 +247,7 @@ ugaif.system.gc = {
## Convenience Options
### `ugaif.forUser`
### `athenix.forUser`
Quick setup option that enables a user account in one line.
@@ -257,14 +257,14 @@ Quick setup option that enables a user account in one line.
**Example:**
```nix
ugaif.forUser = "myusername"; # Equivalent to ugaif.users.myusername.enable = true
athenix.forUser = "myusername"; # Equivalent to athenix.users.myusername.enable = true
```
**Usage in inventory.nix:**
```nix
nix-wsl = {
devices = {
"alice".ugaif.forUser = "alice-uga";
"alice".athenix.forUser = "alice-uga";
};
};
```

View File

@@ -26,7 +26,7 @@ Users are defined in `users.nix` but are **not enabled by default** on all syste
### 1. Define User in users.nix
```nix
ugaif.users = {
athenix.users = {
# Option 1: Inline definition
myuser = {
description = "My Full Name";
@@ -53,20 +53,20 @@ In `inventory.nix`:
```nix
nix-laptop = {
devices = 2;
overrides.ugaif.users.myuser.enable = true; # Enables on all nix-laptop hosts
overrides.athenix.users.myuser.enable = true; # Enables on all nix-laptop hosts
};
# Or for specific devices
nix-desktop = {
devices = {
"1".ugaif.users.myuser.enable = true;
"2".ugaif.users.otheruser.enable = true;
"1".athenix.users.myuser.enable = true;
"2".athenix.users.otheruser.enable = true;
};
};
# Or use convenience option
nix-wsl = {
devices."alice".ugaif.forUser = "alice-user"; # Automatically enables user
devices."alice".athenix.forUser = "alice-user"; # Automatically enables user
};
```
@@ -153,7 +153,7 @@ dotfiles/
{
# ========== User Account Configuration ==========
# These options define the user account itself
ugaif.users.myuser = {
athenix.users.myuser = {
description = "My Full Name";
extraGroups = [ "wheel" "docker" ];
shell = pkgs.zsh;
@@ -171,7 +171,7 @@ dotfiles/
home.packages = with pkgs; [
vim
ripgrep
] ++ lib.optional (osConfig.ugaif.sw.type or null == "desktop") firefox;
] ++ lib.optional (osConfig.athenix.sw.type or null == "desktop") firefox;
programs.git = {
enable = true;
@@ -210,7 +210,7 @@ dotfiles/
The `user.nix` module serves a dual purpose and is imported in **two contexts**:
1. **NixOS Module Context (User Options)**: The module is imported as a NixOS module where `ugaif.users.<username>` options are read to define the user account (description, shell, groups, SSH keys, etc.). These options override any defaults set in `users.nix`.
1. **NixOS Module Context (User Options)**: The module is imported as a NixOS module where `athenix.users.<username>` options are read to define the user account (description, shell, groups, SSH keys, etc.). These options override any defaults set in `users.nix`.
2. **Home-Manager Context**: The same module is imported into home-manager where `home.*`, `programs.*`, and `services.*` options configure the user's environment, packages, and dotfiles.
@@ -251,7 +251,7 @@ Users must be explicitly enabled on each host in `inventory.nix`.
nix-laptop = {
devices = 5;
overrides = {
ugaif.users.student.enable = true; # All 5 laptops get this user
athenix.users.student.enable = true; # All 5 laptops get this user
};
};
```
@@ -261,30 +261,30 @@ nix-laptop = {
```nix
nix-desktop = {
devices = {
"1".ugaif.users.alice.enable = true;
"2".ugaif.users.bob.enable = true;
"1".athenix.users.alice.enable = true;
"2".athenix.users.bob.enable = true;
"3" = {
ugaif.users.alice.enable = true;
ugaif.users.bob.enable = true;
athenix.users.alice.enable = true;
athenix.users.bob.enable = true;
};
};
};
```
### Method 3: Convenience Option (ugaif.forUser)
### Method 3: Convenience Option (athenix.forUser)
Quick setup for single-user systems:
```nix
nix-wsl = {
devices = {
"alice".ugaif.forUser = "alice-user"; # Automatically enables alice-user
"bob".ugaif.forUser = "bob-user";
"alice".athenix.forUser = "alice-user"; # Automatically enables alice-user
"bob".athenix.forUser = "bob-user";
};
};
```
This is equivalent to `ugaif.users.alice-user.enable = true`.
This is equivalent to `athenix.users.alice-user.enable = true`.
## Password Management
@@ -414,7 +414,7 @@ wsl-user = {
Enable in inventory.nix:
```nix
nix-wsl = {
devices."my-wsl".ugaif.forUser = "wsl-user";
devices."my-wsl".athenix.forUser = "wsl-user";
};
```
@@ -464,7 +464,7 @@ Disable if you want to configure Neovim yourself.
**Check if enabled on host:**
```bash
nix eval .#nixosConfigurations.nix-laptop1.config.ugaif.users.myuser.enable
nix eval .#nixosConfigurations.nix-laptop1.config.athenix.users.myuser.enable
```
**Check if user exists:**