{ 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.modules.sw; in { imports = [ ./python.nix ./ghostty.nix ]; options.modules.sw = { enable = mkEnableOption "Standard Workstation Configuration"; type = mkOption { type = types.enum [ "desktop" "kiosk" ]; default = "desktop"; description = "Type of system configuration: 'desktop' for normal OS, '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 [ { nixpkgs.config.allowUnfree = true; programs.zsh.enable = true; programs.nix-ld.enable = true; environment.systemPackages = with pkgs; subtractLists cfg.excludePackages [ htop binutils zsh git oh-my-posh inputs.lazyvim-nixvim.packages.${stdenv.hostPlatform.system}.nvim # Custom update script (writeShellScriptBin "update-system" '' HOSTNAME=$(hostname) FLAKE_URI="github:UGA-Innovation-Factory/nixos-systems" # Pass arguments like --impure to nixos-rebuild EXTRA_ARGS="$@" if [[ "$HOSTNAME" == nix-surface* ]]; then echo "Detected Surface tablet. Using remote build host." sudo nixos-rebuild switch --flake "$FLAKE_URI" --build-host engr-ugaif@192.168.11.133 --refresh $EXTRA_ARGS else echo "Updating local system..." sudo nixos-rebuild switch --flake "$FLAKE_URI" --refresh $EXTRA_ARGS fi '') ]; } # Import Desktop or Kiosk modules based on type (mkIf (cfg.type == "desktop") (import ./desktop { inherit config lib pkgs inputs; })) (mkIf (cfg.type == "kiosk") (import ./kiosk { inherit config lib pkgs inputs; })) ]); }