196 lines
4.8 KiB
Nix
196 lines
4.8 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
inputs,
|
|
...
|
|
}:
|
|
|
|
# ============================================================================
|
|
# Software Module Entry Point
|
|
# ============================================================================
|
|
# This module manages the software configuration for the system. It provides
|
|
# options to select the system type ('desktop' or 'kiosk') and handles
|
|
# the conditional importation of the appropriate sub-modules.
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.athenix.sw;
|
|
|
|
# Normalize type to always be a list
|
|
swTypes = if isList cfg.type then cfg.type else [ cfg.type ];
|
|
|
|
# Helper to check if a type is enabled
|
|
hasType = type: elem type swTypes;
|
|
in
|
|
{
|
|
imports = [
|
|
./python.nix
|
|
./ghostty.nix
|
|
./updater.nix
|
|
./update-ref.nix
|
|
];
|
|
|
|
options.athenix.sw = {
|
|
enable = mkEnableOption "Standard Workstation Configuration";
|
|
|
|
type = mkOption {
|
|
type = types.oneOf [
|
|
(types.enum [
|
|
"desktop"
|
|
"tablet-kiosk"
|
|
"headless"
|
|
"stateless-kiosk"
|
|
"builders"
|
|
])
|
|
(types.listOf (
|
|
types.enum [
|
|
"desktop"
|
|
"tablet-kiosk"
|
|
"headless"
|
|
"stateless-kiosk"
|
|
"builders"
|
|
]
|
|
))
|
|
];
|
|
default = "desktop";
|
|
description = "Type(s) of system configuration. Can be a single type or a list of types to combine multiple configurations.";
|
|
};
|
|
|
|
extraPackages = mkOption {
|
|
type = types.listOf types.package;
|
|
default = [ ];
|
|
description = "Extra packages to install.";
|
|
};
|
|
|
|
excludePackages = mkOption {
|
|
type = types.listOf types.package;
|
|
default = [ ];
|
|
description = "Packages to exclude from the default list.";
|
|
};
|
|
|
|
kioskUrl = mkOption {
|
|
type = types.str;
|
|
default = "https://ha.factory.uga.edu";
|
|
description = "URL to open in Chromium kiosk mode.";
|
|
};
|
|
|
|
# Builders-specific options
|
|
builders = mkOption {
|
|
type = types.submodule {
|
|
options = {
|
|
giteaRunner = {
|
|
enable = mkEnableOption "Gitea Actions self-hosted runner";
|
|
|
|
url = mkOption {
|
|
type = types.str;
|
|
description = "Gitea instance URL for the runner";
|
|
};
|
|
|
|
tokenFile = mkOption {
|
|
type = types.path;
|
|
default = "/var/lib/gitea-runner-token";
|
|
description = ''
|
|
Path to file containing Gitea runner token.
|
|
Generate in Gitea repository settings under Actions > Runners.
|
|
The token must have runner registration access.
|
|
'';
|
|
};
|
|
|
|
extraLabels = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
description = "Extra labels to identify this runner in workflows";
|
|
};
|
|
|
|
name = mkOption {
|
|
type = types.str;
|
|
default = "athenix";
|
|
description = "Name of the Gitea runner service";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
default = { };
|
|
description = "Builder-specific configuration options";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable (mkMerge [
|
|
{
|
|
# ========== System-Wide Configuration ==========
|
|
nixpkgs.config.allowUnfree = true;
|
|
|
|
# ========== Shell Configuration ==========
|
|
programs.zsh.enable = true;
|
|
programs.nix-ld.enable = true; # Allow running non-NixOS binaries
|
|
|
|
# ========== Base Packages ==========
|
|
environment.systemPackages =
|
|
with pkgs;
|
|
subtractLists cfg.excludePackages [
|
|
htop # System monitor
|
|
binutils # Binary utilities
|
|
zsh # Z shell
|
|
git # Version control
|
|
oh-my-posh # Shell prompt theme
|
|
age # Simple file encryption tool
|
|
age-plugin-fido2-hmac # age FIDO2 support
|
|
inputs.agenix.packages.${stdenv.hostPlatform.system}.default # Secret management
|
|
];
|
|
}
|
|
# ========== Software Profile Imports ==========
|
|
(mkIf (hasType "desktop") (
|
|
import ./desktop {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
(mkIf (hasType "tablet-kiosk") (
|
|
import ./tablet-kiosk {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
(mkIf (hasType "headless") (
|
|
import ./headless {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
(mkIf (hasType "stateless-kiosk") (
|
|
import ./stateless-kiosk {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
(mkIf (hasType "builders") (
|
|
import ./builders {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
]);
|
|
}
|