125 lines
2.8 KiB
Nix
125 lines
2.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.ugaif.sw;
|
|
in
|
|
{
|
|
imports = [
|
|
./python.nix
|
|
./ghostty.nix
|
|
./updater.nix
|
|
];
|
|
|
|
options.ugaif.sw = {
|
|
enable = mkEnableOption "Standard Workstation Configuration";
|
|
|
|
type = mkOption {
|
|
type = types.enum [
|
|
"desktop"
|
|
"tablet-kiosk"
|
|
"headless"
|
|
"stateless-kiosk"
|
|
];
|
|
default = "desktop";
|
|
description = "Type of system configuration: 'desktop' for normal OS, 'tablet-kiosk' for tablet/kiosk mode.";
|
|
};
|
|
|
|
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.";
|
|
};
|
|
};
|
|
|
|
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
|
|
inputs.agenix.packages.${stdenv.hostPlatform.system}.default # Secret management
|
|
];
|
|
}
|
|
# ========== Software Profile Imports ==========
|
|
(mkIf (cfg.type == "desktop") (
|
|
import ./desktop {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
(mkIf (cfg.type == "tablet-kiosk") (
|
|
import ./tablet-kiosk {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
(mkIf (cfg.type == "headless") (
|
|
import ./headless {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
(mkIf (cfg.type == "stateless-kiosk") (
|
|
import ./stateless-kiosk {
|
|
inherit
|
|
config
|
|
lib
|
|
pkgs
|
|
inputs
|
|
;
|
|
}
|
|
))
|
|
]);
|
|
}
|