# Specifications For Differentiating Hosts { config, pkgs, lib, ... }: { options.hostSpec = { hostName = lib.mkOption { type = lib.types.str; description = "The hostname of the host"; }; username = lib.mkOption { type = lib.types.str; description = "The username for the host's user"; }; hashedPassword = lib.mkOption { type = lib.types.str; description = "Hashed password for the host's user"; }; email = lib.mkOption { type = lib.types.str; description = "The email of the user"; }; handle = lib.mkOption { type = lib.types.str; description = "The handle of the user (eg: github user)"; }; userFullName = lib.mkOption { type = lib.types.str; description = "The full name of the user"; }; home = lib.mkOption { type = lib.types.str; description = "The home directory of the user"; default = let user = config.hostSpec.username; in if pkgs.stdenv.isLinux then "/home/${user}" else "/Users/${user}"; }; isARM = lib.mkOption { type = lib.types.bool; default = false; description = "Used to indicate a host that is aarch64"; }; isMinimal = lib.mkOption { type = lib.types.bool; default = false; description = "Used to indicate a minimal configuration host"; }; isServer = lib.mkOption { type = lib.types.bool; default = false; description = "Used to indicate a server host"; }; desktop = lib.mkOption { type = lib.types.nullOr ( lib.types.enum [ "Gnome" "Hyprland" ] ); default = if config.hostSpec.isServer then null else "Gnome"; description = "Desktop environment (Gnome, Hyprland or null)"; }; shell = lib.mkOption { type = lib.types.enum [ pkgs.fish pkgs.bash ]; default = pkgs.fish; description = "Default shell (pkgs.fish or pkgs.bash)"; }; pool = lib.mkOption { type = lib.types.bool; default = true; description = "Whether it mounts pool from PVE"; }; }; }