about summary refs log tree commit diff
path: root/lenovo/thinkpad/x1/6th-gen/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'lenovo/thinkpad/x1/6th-gen/default.nix')
-rw-r--r--lenovo/thinkpad/x1/6th-gen/default.nix75
1 files changed, 75 insertions, 0 deletions
diff --git a/lenovo/thinkpad/x1/6th-gen/default.nix b/lenovo/thinkpad/x1/6th-gen/default.nix
new file mode 100644
index 000000000000..b28fb5baca44
--- /dev/null
+++ b/lenovo/thinkpad/x1/6th-gen/default.nix
@@ -0,0 +1,75 @@
+# A good source of information about how to fix the issues still
+# standing with kernel 4.6.11 is the following wiki page:
+# https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6). The
+# TrackPoint and TouchPad issues there seem to have been fixed already.
+
+{ config, pkgs, ... }:
+{
+  imports = [
+    ../.
+  ];
+  # Give TLP service more control over battery
+  boot = {
+    extraModulePackages = with config.boot.kernelPackages; [
+      acpi_call
+    ];
+    kernelModules = [
+      "acpi_call"
+    ];
+  };
+
+  # See https://linrunner.de/en/tlp/docs/tlp-faq.html#battery
+  services.tlp.extraConfig = ''
+    START_CHARGE_THRESH_BAT0=75
+    STOP_CHARGE_THRESH_BAT0=80
+    CPU_SCALING_GOVERNOR_ON_BAT=powersave
+    ENERGY_PERF_POLICY_ON_BAT=powersave
+  '';
+
+  # Temporary fix for cpu throttling issues visible in the kernel log
+  # (journalctl -k) by setting the same temperature limits used by
+  # Window$
+  # See https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Power_management.2FThrottling_issues
+  systemd.services.cpu-throttling = {
+    enable = true;
+    description = "Sets the offset to 3 °C, so the new trip point is 97 °C";
+    documentation = [
+      "https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Power_management.2FThrottling_issues"
+    ];
+    path = [ pkgs.msr-tools ];
+    script = "wrmsr -a 0x1a2 0x3000000";
+    serviceConfig = {
+      Type = "oneshot";
+    };
+    wantedBy = [
+      "timers.target"
+    ];
+  };
+
+  systemd.timers.cpu-throttling = {
+    enable = true;
+    description = "Set cpu heating limit to 97 °C";
+    documentation = [
+      "https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Power_management.2FThrottling_issues"
+    ];
+    timerConfig = {
+      OnActiveSec = 60;
+      OnUnitActiveSec = 60;
+      Unit = "cpu-throttling.service";
+    };
+    wantedBy = [
+      "timers.target"
+    ];
+  };
+
+  # Enable S3 suspend state: you have to manually follow the
+  # instructions shown here: https://delta-xi.net/#056 in order to
+  # produce the ACPI patched table. Put the CPIO archive in /boot and
+  # then enable the following lines
+  # boot.kernelParams = [
+  #   "mem_sleep_default=deep"
+  # ];
+  # boot.initrd.prepend = [
+  #   "/boot/acpi_override"
+  # ];
+}