diff --git a/options/device/roles.nix b/options/device/roles.nix index 241f682..834ed42 100644 --- a/options/device/roles.nix +++ b/options/device/roles.nix @@ -1,7 +1,7 @@ { lib, config, ... }: let inherit (lib) mkOption types; - cfg = config.myOptions.device; + cfg = config.myOptions.device.roles; in { options.myOptions.device.roles = { type = mkOption { diff --git a/system/roles/default.nix b/system/roles/default.nix index cf4b423..605753d 100644 --- a/system/roles/default.nix +++ b/system/roles/default.nix @@ -1,5 +1,6 @@ { imports = [ ./workstation + ./laptop ]; } diff --git a/system/roles/laptop/default.nix b/system/roles/laptop/default.nix new file mode 100644 index 0000000..11ba147 --- /dev/null +++ b/system/roles/laptop/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./power + ./touchpad.nix + ]; +} diff --git a/system/roles/laptop/power/default.nix b/system/roles/laptop/power/default.nix new file mode 100644 index 0000000..f2a1196 --- /dev/null +++ b/system/roles/laptop/power/default.nix @@ -0,0 +1,66 @@ +{lib, config, pkgs, ...}: let + inherit (lib) mkDefault; +in{ + hardware.acpilight.enable = true; + + environment.systemPackages = with pkgs; [ + acpi + powertop + ]; + + services = { + # handle ACPI events + acpid.enable = true; + + # allows changing system behavior based upon user-selected power profiles + power-profiles-daemon.enable = true; + + # temperature target on battery + undervolt = { + tempBat = 65; # deg C + package = pkgs.undervolt; + }; + + # superior power management + auto-cpufreq = { + enable = true; + + # define the profiles + # (you can manually switch between profiles using `powerprofilesctl` cmd) + settings = let + MHz = x: x * 1000; + in { + battery = { + governor = "powersave"; + scaling_min_freq = mkDefault (MHz 1200); + scaling_max_freq = mkDefault (MHz 1800); + turbo = "never"; + }; + + charger = { + governor = "performance"; + scaling_min_freq = mkDefault (MHz 1800); + scaling_max_freq = mkDefault (MHz 3800); + turbo = "auto"; + }; + }; + }; + + # DBus service that provides power management support to applications + upower = { + enable = true; + percentageLow = 15; + percentageCritical = 5; + percentageAction = 3; + criticalPowerAction = "Hibernate"; + }; + }; + + boot = { + kernelModules = ["acpi_call"]; + extraModulePackages = with config.boot.kernelPackages; [ + acpi_call + cpupower + ]; + }; +} diff --git a/system/roles/laptop/touchpad.nix b/system/roles/laptop/touchpad.nix new file mode 100644 index 0000000..bd58fc9 --- /dev/null +++ b/system/roles/laptop/touchpad.nix @@ -0,0 +1,22 @@ +{ + services.xserver.libinput = { + # enable libinput + enable = true; + + # disable mouse acceleration + mouse = { + accelProfile = "flat"; + accelSpeed = "0"; + middleEmulation = false; + }; + + # touchpad settings + touchpad = { + naturalScrolling = false; # I'm weird like that + tapping = true; + clickMethod = "clickfinger"; + horizontalScrolling = true; + disableWhileTyping = true; + }; + }; +}