mirror of
https://github.com/aviallon/nixos-lib.git
synced 2026-04-05 17:27:50 +00:00
76 lines
2.4 KiB
Nix
76 lines
2.4 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
with lib;
|
|
let
|
|
cfg = config.aviallon.laptop;
|
|
in {
|
|
options.aviallon.laptop = {
|
|
enable = mkOption {
|
|
default = false;
|
|
example = true;
|
|
type = types.bool;
|
|
description = "Enable aviallon's laptop configuration";
|
|
};
|
|
power-manager = mkOption {
|
|
default = "tlp";
|
|
example = "power-profiles-daemon";
|
|
description = "Change service used to manage power consumption on laptop";
|
|
type = types.enum [ "tlp" "power-profiles-daemon" false ];
|
|
};
|
|
tweaks = {
|
|
pcieAspmForce = mkEnableOption "hardcore tweaks to power consumption. Warning: Might be dangerous to use.";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
networking.networkmanager.wifi.powersave = mkDefault true;
|
|
aviallon.general.unsafeOptimizations = mkOverride 15 true;
|
|
|
|
hardware.sensor.iio.enable = mkDefault true;
|
|
location.provider = "geoclue2";
|
|
|
|
aviallon.boot.cmdline = {
|
|
# Less power consumption vs some performance loss
|
|
"workqueue.power_efficient" = "1";
|
|
nohz = "on";
|
|
|
|
pcie_aspm = mkIf cfg.tweaks.pcieAspmForce "force";
|
|
};
|
|
|
|
systemd.services.nixos-upgrade = {
|
|
unitConfig = {
|
|
ConditionACPower = true;
|
|
};
|
|
};
|
|
|
|
|
|
systemd.services.aspm-force-enable = let
|
|
aspm_enable = pkgs.callPackage ./packages/aspm_enable { };
|
|
in {
|
|
serviceConfig = {
|
|
ExecStart = [
|
|
"${aspm_enable}/bin/aspm_enable"
|
|
];
|
|
Type = "simple";
|
|
};
|
|
wantedBy = [ "multi-user.target" ];
|
|
description = "Force-enable PCIe ASPM";
|
|
enable = cfg.tweaks.pcieAspmForce;
|
|
};
|
|
|
|
services.tlp.enable = (cfg.power-manager == "tlp");
|
|
services.power-profiles-daemon.enable = (cfg.power-manager == "power-profiles-daemon");
|
|
powerManagement.powertop.enable = mkDefault true;
|
|
systemd.services.powertop = mkIf config.powerManagement.powertop.enable {
|
|
serviceConfig.ExecStart = let
|
|
script = pkgs.writeShellScriptBin "powertop-auto-tune" ''
|
|
${pkgs.powertop}/bin/powertop --auto-tune
|
|
HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u)
|
|
for i in $HIDDEVICES; do
|
|
echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product
|
|
echo 'on' > /sys/bus/usb/devices/$i/power/control
|
|
done
|
|
'';
|
|
in mkOverride 10 "${script}/bin/powertop-auto-tune";
|
|
};
|
|
};
|
|
}
|