All checks were successful
Check / eval (push) Successful in 2m58s
charge_control_end_threshold was written (80) but charge_types stayed [Adaptive], which ignores the cap while still reporting it — battery kept charging past 80% on Latitude. Oneshot now selects Custom when a limit is set, Adaptive/Standard when off; sets start hysteresis; doctor warns if type ≠ Custom while limited. V0: flake check --no-build green. V3: re-apply limit, confirm charge_types shows [Custom] and status stops Charging above cap.
126 lines
5.7 KiB
Nix
126 lines
5.7 KiB
Nix
# 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;
|
|
# Dell Adaptive charge mode ignores the end threshold unless we
|
|
# also select Custom (power.nix oneshot); see Latitude 5310 QA.
|
|
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 (menu writes 100).
|
|
Backend-independent: the menu applies live via sysfs (udev
|
|
GROUP=users on the threshold node) and persists settings in
|
|
theme-state; a oneshot re-applies on boot and AC replug. On
|
|
Dell (and similar) the oneshot also selects charge type Custom
|
|
— Adaptive ignores the threshold while still reporting it.
|
|
Needs nomarchy.system.power.laptop.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|