# System-level `nomarchy.system.*` options.
#
# Deliberately small: only things a downstream user plausibly disagrees
# with get a toggle. Everything else in the system module is set with
# lib.mkDefault, so plain NixOS options override it natively.
{ config, lib, ... }:

{
  options.nomarchy.system = {
    greeter.enable = lib.mkEnableOption "the greetd/tuigreet login screen" // { default = true; };

    greeter.autoLogin = lib.mkOption {
      type = lib.types.nullOr lib.types.str;
      default = config.nomarchy.settings.greeter.autoLogin or null;
      example = "ada";
      description = ''
        Log this user straight into Hyprland on boot (greetd
        initial_session); logging out lands on the normal greeter.
        The installer sets it on LUKS-encrypted machines — the disk
        passphrase already gates access, a second prompt is ceremony.
      '';
    };

    plymouth.enable = lib.mkEnableOption ''
      the Nomarchy Plymouth boot splash (logo + progress + LUKS prompt),
      background-tinted from theme-state.json via nomarchy.system.stateFile.
      Recolors on system rebuilds — theme switches don't touch the initrd'' // { default = true; };

    stateFile = lib.mkOption {
      type = lib.types.nullOr lib.types.path;
      default = null;
      example = lib.literalExpression "./theme-state.json";
      description = ''
        theme-state.json for the system-side consumers (currently the
        Plymouth splash background). lib.mkFlake wires it automatically
        from your flake; null falls back to the Boreal base color.
      '';
    };

    fileManager.enable = lib.mkEnableOption ''
      the Thunar GUI file manager + backend services (gvfs/tumbler/udisks2)
      for point-and-click file management and the "open folder" handler.
      The keyboard-driven TUI flagship (yazi) is the nomarchy.yazi.* home
      option'' // { default = true; };

    audio.enable = lib.mkEnableOption "the Pipewire audio stack" // { default = true; };
    bluetooth.enable = lib.mkEnableOption "Bluetooth support with blueman" // { default = config.nomarchy.settings.bluetooth.enable or true; };

    autoTimezone.enable = lib.mkEnableOption ''
      automatic timezone detection (geoclue + automatic-timezoned): the
      system timezone — and so the Waybar clock — follows your location, so
      travelling to another zone updates the time on its own. Off by default
      (it's a location service and needs the network); toggle it from the
      System menu, which lands the choice in the in-flake state file. Enabling
      it unsets the static time.timeZone for you (a runtime timezone needs
      /etc/localtime writable), so the menu toggle drives a system rebuild''
      // { default = false; };

    snapper.enable = lib.mkEnableOption ''
      hourly/daily BTRFS timeline snapshots of / via snapper, plus the
      `nixos-rebuild-snap` pre-rebuild-snapshot helper. No-op unless the
      root filesystem is BTRFS with a /.snapshots subvolume (the installer
      creates one)'';

    power = {
      enable = lib.mkEnableOption ''
        active power management. By default ships power-profiles-daemon —
        the upstream-aligned power-saver/balanced/performance model,
        switchable from the menu (nomarchy-menu power-profile) and shown
        in Waybar on laptops — plus thermald and a battery charge limit
        where applicable. Harmless on desktops (the profile daemon just
        offers balanced/performance)'' // { default = true; };

      backend = lib.mkOption {
        type = lib.types.enum [ "ppd" "tlp" ];
        default = "ppd";
        description = ''
          Which daemon governs CPU/platform power. "ppd"
          (power-profiles-daemon) is the default: a clean three-profile
          model with the menu switcher and Waybar indicator. "tlp" trades
          that for TLP's deeper, more aggressive battery tuning, at the
          cost of the profile switcher (TLP has no profile concept). The
          two manage the same knobs and are mutually exclusive.
        '';
      };

      laptop = lib.mkOption {
        type = lib.types.bool;
        default = false;
        description = ''
          Marks this machine as a laptop, gating battery-only features
          (the charge limit below). The installer sets it to true when it
          detects a battery at install time.
        '';
      };

      thermal.enable = lib.mkEnableOption ''
        thermald, Intel's thermal-management daemon, to avoid aggressive
        throttling under sustained load. Intel-only — the installer
        enables it when it detects a GenuineIntel CPU. Harmless alongside
        either backend'';

      batteryChargeLimit = lib.mkOption {
        type = lib.types.nullOr (lib.types.ints.between 50 100);
        default = config.nomarchy.settings.power.batteryChargeLimit or null;
        example = 80;
        description = ''
          Stop charging at this percentage to extend battery lifespan,
          where the hardware exposes charge_control_end_threshold on a
          system battery (type=Battery under /sys/class/power_supply;
          name-agnostic — BAT0, CMB0, …).
          null leaves charging at the firmware default. Backend-independent
          (a small systemd unit writes the sysfs knob, re-applied on AC
          state changes), so it works under PPD too; needs
          nomarchy.system.power.laptop.
        '';
      };
    };
  };
}
