diff --git a/CODEOWNERS b/CODEOWNERS index 4525d6b..b197a5b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,6 +1,7 @@ beagleboard/pocketbeagle @yegortimoshenko dell/xps/13-9370 @moredread dell/xps/13-9380 @kalbasit +dell/xps/15-9560 @Lyndeno lenovo/thinkpad/x230 @makefu @yegortimoshenko lenovo/thinkpad/x250 @Mic92 pcengines/apu @yegortimoshenko diff --git a/README.md b/README.md index de376d4..1992563 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,9 @@ See code for all available configurations. | [Asus Pro WS X570-ACE](asus/pro-ws-x570-ace) | `` | | [Asus ROG Ally RC71L (2023)](asus/ally/rc71l) | `` | | [Asus ROG Strix G513IM](asus/rog-strix/g513im) | `` | +| [Asus ROG Strix G713IE](asus/rog-strix/g713ie) | `` | | [Asus ROG Strix G733QS](asus/rog-strix/g733qs) | `` | +| [Asus ROG Strix X570-E GAMING](asus/rog-strix/x570e) | `` | | [Asus ROG Zephyrus G14 GA401](asus/zephyrus/ga401) | `` | | [Asus ROG Zephyrus G14 GA402](asus/zephyrus/ga402) | `` | | [Asus ROG Zephyrus G14 GA402X* (2023)](asus/zephyrus/ga402x/amdgpu) | `` | @@ -178,6 +180,7 @@ See code for all available configurations. | [Intel NUC 8i7BEH](intel/nuc/8i7beh/) | `` | | [Lenovo IdeaPad 3 15alc6](lenovo/ideapad/15alc6) | `` | | [Lenovo IdeaPad Gaming 3 15arh05](lenovo/ideapad/15arh05) | `` | +| [Lenovo IdeaPad Gaming 3 15ach6](lenovo/ideapad/15ach6) | `` | | [Lenovo IdeaPad 5 Pro 16ach6](lenovo/ideapad/16ach6) | `` | | [Lenovo IdeaPad Z510](lenovo/ideapad/z510) | `` | | [Lenovo IdeaPad Slim 5](lenovo/ideapad/slim-5) | `` | @@ -248,6 +251,7 @@ See code for all available configurations. | [Lenovo ThinkPad X1 (9th Gen)](lenovo/thinkpad/x1/9th-gen) | `` | | [Lenovo ThinkPad X1 (10th Gen)](lenovo/thinkpad/x1/10th-gen) | `` | | [Lenovo ThinkPad X1 (11th Gen)](lenovo/thinkpad/x1/11th-gen) | `` | +| [Lenovo ThinkPad X1 (12th Gen)](lenovo/thinkpad/x1/12th-gen) | `` | | [Lenovo ThinkPad X1 Extreme Gen 2](lenovo/thinkpad/x1-extreme/gen2) | `` | | [Lenovo ThinkPad X1 Extreme Gen 4](lenovo/thinkpad/x1-extreme/gen4) | `` | | [Lenovo ThinkPad X1 Nano Gen 1](lenovo/thinkpad/x1-nano/gen1) | `` | @@ -287,9 +291,10 @@ See code for all available configurations. | [NXP iMX8 MQuad Evaluation Kit](nxp/imx8mq-evk) | `` | | [Hardkernel Odroid HC4](hardkernel/odroid-hc4/default.nix) | `` | | [Hardkernel Odroid H3](hardkernel/odroid-h3/default.nix) | `` | -| [Omen 15-en0010ca](omen/14-fb0798ng) | `` | +| [Omen 14-fb0798ng](omen/14-fb0798ng) | `` | | [Omen 15-en0010ca](omen/15-en0010ca) | `` | | [Omen 16-n0005ne](omen/16-n0005ne) | `` | +| [Omen 16-n0280nd](/omen/16-n0280nd) | `` | | [Omen 15-en1007sa](omen/15-en1007sa) | `` | | [Omen 15-en0002np](omen/15-en0002np) | `` | | [One-Netbook OneNetbook 4](onenetbook/4) | `` | diff --git a/apple/imac/18-2/README.md b/apple/imac/18-2/README.md new file mode 100644 index 0000000..7ed259b --- /dev/null +++ b/apple/imac/18-2/README.md @@ -0,0 +1,26 @@ +# iMac 18,2, NixOS 24.05 (2024) + +## Audio +- [ ] broken until https://github.com/NixOS/nixpkgs/pull/322968 lands in master + +## Bluetooth +- [ ] broken until https://github.com/NixOS/nixpkgs/pull/322964 lands in master + +## Thunderbolt +- [x] ok + +## SATA +- [x] ok + +## NVME +- [x] ok, older NVME / Controller may need workaround for resume + +## Suspend/Resumer +- [ ] Thunderbolt, WIFI, NVME may still need reboot (sometimes). + +## Wifi +- [x] Working (2,4Ghz & 5Ghz supported), WEP3 broken -> brcm fw blob (2015) + +## Resources (Intel iMac/MacBook share similar custom hardware) +- https://github.com/Dunedan/mbp-2016-linux?tab=readme-ov-file +- https://gist.github.com/roadrunner2/1289542a748d9a104e7baec6a92f9cd7 diff --git a/apple/imac/18-2/default.nix b/apple/imac/18-2/default.nix new file mode 100644 index 0000000..fbbfeba --- /dev/null +++ b/apple/imac/18-2/default.nix @@ -0,0 +1,30 @@ +{ + config, + lib, + pkgs, + ... +}: { + imports = [ + ../. + ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel + ../../../common/gpu/amd + ../../../common/hidpi.nix + ../../../common/pc/laptop/ssd + ../../../common/pc/laptop/acpi_call.nix + ]; + + # apple smc (TODO: check spi) + boot = { + initrd.kernelModules = ["applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ]; + kernelParams = [ "intel_iommu=on" ]; + kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest; + }; + + # Wifi, CPU Microcode FW updates + networking.enableB43Firmware = lib.mkDefault true; + hardware = { + enableRedistributableFirmware = lib.mkDefault true; + cpu.intel.updateMicrocode = lib.mkDefault true; + }; +} diff --git a/apple/imac/default.nix b/apple/imac/default.nix new file mode 100644 index 0000000..ea15175 --- /dev/null +++ b/apple/imac/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ../. + ../../common/cpu/intel + ../../common/pc/laptop + ../../common/pc/laptop/ssd + ]; +} diff --git a/apple/macbook-pro/14-1/README.md b/apple/macbook-pro/14-1/README.md index 0a0e2df..ce74d7c 100644 --- a/apple/macbook-pro/14-1/README.md +++ b/apple/macbook-pro/14-1/README.md @@ -1,25 +1,25 @@ -# MacBook Pro 14,1, NixOS 24.01 (2024) +# MacBook Pro 14,1, NixOS 24.05 (2024) ## Audio - [ ] Still broken, use usb/hdmi instead, nixos pkg needed: https://github.com/davidjo/snd_hda_macbookpro + - [ ] broken until https://github.com/NixOS/nixpkgs/pull/322968 lands in master ## Bluetooth - [ ] Still broken, even (hacky) workaround does not work any more with latest driver updates + - [ ] broken lands https://github.com/NixOS/nixpkgs/pull/322964 in master ## Touchpad - [x] Working, including 'disable while typing' usable quirk + - [x] Working, including 'disable while typing' usable quirk ## Thunderbolt - [x] Working + - [x] Working ## NVME - [x] Working, older NVME / Controller may need workaround for resume + - [x] Working, older NVME / Controller may need workaround for resume ## Suspend/Resume - [ ] Thunderbolt, WIFI, NVME may still need reboot (sometimes). + - [ ] Thunderbolt, WIFI, NVME may still need reboot (sometimes). ## Wifi - [x] Working (2,4Ghz & 5Ghz supported), WEP3 currently broken b/c old brcm fw + - [x] Working (2,4Ghz & 5Ghz supported), WEP3 broken -> brcm fw blob (2015) ## Resources - https://github.com/Dunedan/mbp-2016-linux?tab=readme-ov-file diff --git a/apple/macbook-pro/14-1/btfix.sh b/apple/macbook-pro/14-1/btfix.sh deleted file mode 100755 index f555bba..0000000 --- a/apple/macbook-pro/14-1/btfix.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -## -# For some reason /dev/ttyS0 is created, and then removed by udev. We need this -# for bluetooth, and the only way to get it again is to reload 8502_dw. Do so. -## - - -## -# /sys/devices/pci0000:00/0000:00:1e.0/driver -> intel-lpss -# /sys/bus/pci/devices/0000:00:1e.0 -# /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:8a/BCM2E7C:00 -## - -# udevadm info --query=all --path=/sys/bus/serial/devices/serial0-0 -# P: /devices/pci0000:00/0000:00:1e.0/dw-apb-uart.2/serial0/serial0-0 -# M: serial0-0 -# R: 0 -# U: serial -# E: DEVPATH=/devices/pci0000:00/0000:00:1e.0/dw-apb-uart.2/serial0/serial0-0 -# E: SUBSYSTEM=serial -# E: MODALIAS=acpi:BCM2E7C:APPLE-UART-BLTH: -# E: USEC_INITIALIZED=12406199 -# E: PATH=/nix/store/56jhf2k9q31gwvhjxmm2akkkhi4a8nz1-udev-path/bin:/nix/store/56jhf2k9q31gwvhjxmm2akkkhi4a8nz1-udev-path/sbin -# E: ID_VENDOR_FROM_DATABASE=Broadcom - - -if [[ ! -e "/sys/devices/pci0000:00/0000:00:1e.0/dw-apb-uart.2/tty/ttyS0" ]]; then - if [[ -e /sys/module/8250_dw ]]; then - rmmod 8250_dw - fi - - modprobe 8250_dw -fi - -exec btattach --protocol=h4 --bredr=/dev/ttyS0 --speed=3000000 diff --git a/apple/macbook-pro/14-1/default.nix b/apple/macbook-pro/14-1/default.nix index c2b61f9..02c8542 100644 --- a/apple/macbook-pro/14-1/default.nix +++ b/apple/macbook-pro/14-1/default.nix @@ -5,10 +5,10 @@ ... }: { imports = [ + ../. ../../../common/gpu/intel/kaby-lake ../../../common/gpu/intel ../../../common/hidpi.nix - ../../../common/pc/laptop ../../../common/pc/laptop/ssd ../../../common/pc/laptop/acpi_call.nix ]; @@ -49,34 +49,10 @@ cpu.intel.updateMicrocode = lib.mkDefault true; }; - # Bluetooth, only needed if kernel lacks support - custom kernel build - # boot.kernelPatches = [ - # { - # name = "bcrm-config"; - # patch = null; - # extraConfig = '' - # BT_HCIUART_BCM y ''; - # } - # ]; - - ## [Workaround seems not to work anymore! Any Ideas?] - # For some reason /dev/ttyS0 is created, and then removed by udev. We need this - # for bluetooth, and the only way to get it again is to reload 8502_dw. Luckily, - # nothing else uses it. - ## - # systemd.services.btattach-bcm2e7c = lib.mkIf config.hardware.bluetooth.enable { - # before = [ "bluetooth.target" ]; - # after = [ "sys-devices-platform-serial8250-tty-ttyS1.device" ]; - # path = [ pkgs.bash pkgs.kmod pkgs.bluez ]; - # serviceConfig.Type = "simple"; - # serviceConfig.ExecStart = "${./btfix.sh}"; - # wantedBy = [ "multi-user.target" ]; - # }; - - ## [Enable only if needed!] + # [Enable only if needed!] # Disable d3cold on older NVME controller, only if needed # https://github.com/Dunedan/mbp-2016-linux - ## + # #systemd.services.disable-nvme-d3cold = { # description = "Disables d3cold on the NVME controller"; # before = [ "suspend.target" ]; diff --git a/apple/t2/pkgs/linux-t2.nix b/apple/t2/pkgs/linux-t2.nix index 2691890..585c145 100644 --- a/apple/t2/pkgs/linux-t2.nix +++ b/apple/t2/pkgs/linux-t2.nix @@ -2,19 +2,19 @@ , ... } @ args: let - version = "6.9.8"; + version = "6.10.3"; majorVersion = with lib; (elemAt (take 1 (splitVersion version)) 0); patchRepo = fetchFromGitHub { owner = "t2linux"; repo = "linux-t2-patches"; - rev = "47b4069221c0ee3b6db56ab1ea90ae89e2de26f3"; - hash = "sha256-1B5DbLdyKdswy2ERmWVyjojdazTDbMsS+Vz/mrTdoFY="; + rev = "29d6f013088303623cd9f2c6f5951eb3455830a6"; + hash = "sha256-V0dakKRPC6Hj1I+SCiZXOCwtS0mZCCAsWnGtJnFlzxU="; }; kernel = fetchzip { url = "mirror://kernel/linux/kernel/v${majorVersion}.x/linux-${version}.tar.xz"; - hash = "sha256-o67tasZu4qGQ7obw+BCgNfaLqDcT3SPqsa3kTzWjmfg="; + hash = "sha256-+tWXv9j5bUJN7kzFZxuL+wB1fBCyXbtyms3Q5/dTtK4="; }; in buildLinux (args // { diff --git a/asus/fx506hm/default.nix b/asus/fx506hm/default.nix index 115882b..a50ffdf 100644 --- a/asus/fx506hm/default.nix +++ b/asus/fx506hm/default.nix @@ -1,4 +1,4 @@ -{ lib, ... }: +{ config, lib, ... }: { imports = @@ -14,6 +14,7 @@ hardware.nvidia = { modesetting.enable = lib.mkDefault true; + open = lib.mkIf (lib.versionAtLeast config.hardware.nvidia.package.version "555") true; prime = { diff --git a/asus/rog-strix/g713ie/default.nix b/asus/rog-strix/g713ie/default.nix new file mode 100644 index 0000000..e36585c --- /dev/null +++ b/asus/rog-strix/g713ie/default.nix @@ -0,0 +1,16 @@ +{ + imports = [ + ../../../common/cpu/amd + ../../../common/cpu/amd/pstate.nix + ../../../common/gpu/nvidia + ../../../common/gpu/nvidia/prime.nix + ../../../common/pc/laptop + ../../../common/pc/ssd + ../../battery.nix + ]; + + hardware.nvidia.prime = { + amdgpuBusId = "PCI:5:0:0"; + nvidiaBusId = "PCI:1:0:0"; + }; +} diff --git a/asus/rog-strix/x570e/default.nix b/asus/rog-strix/x570e/default.nix new file mode 100644 index 0000000..d8ee657 --- /dev/null +++ b/asus/rog-strix/x570e/default.nix @@ -0,0 +1,14 @@ +# Motherboard: ROG STRIX X570-E GAMING +{ ... }: + +{ + imports = [ + ../../../common/cpu/amd + ../../../common/cpu/amd/pstate.nix + ../../../common/cpu/amd/zenpower.nix + ../../../common/pc/ssd + ]; + + # Bluetooth driver for Intel AX200 802.11ax + boot.kernelModules = [ "btintel" ]; +} diff --git a/asus/zephyrus/ga402x/ATTR-SET-DEPRECATION.md b/asus/zephyrus/ga402x/ATTR-SET-DEPRECATION.md new file mode 100644 index 0000000..21d3d1e --- /dev/null +++ b/asus/zephyrus/ga402x/ATTR-SET-DEPRECATION.md @@ -0,0 +1,16 @@ +# Deprecation of //asus/zephyrus/ga402x/default.nix + +Background: +The `asus-zephyrus-ga402x` provides an attr-set with `amdgpu` and `nvidia` entries, to allow users +to choose whether to enable only the AMD-GPU driver, or also enable the NVidia driver with (by +default) Prime enabled. + +However, this attr-set style seems to be broken by [PR #1046](https://github.com/NixOS/nixos-hardware/pull/1046), +which exports modules as paths, instead. +That change seems to cause an error of "value is a path while a set was expected". + +[PR #1053](https://github.com/NixOS/nixos-hardware/pull/1053): +- Replaced `asus-zephyrus-ga402x.amdgpu` with a `asus-zephyrus-ga402x-amdgpu` entry. +- Replaced `asus-zephyrus-ga402x.nvidia` with a `asus-zephyrus-ga402x-nvidia` entry. +- Made `asus-zephyrus-ga402x` throw a deprecation error. +- [FIXES: #1052](https://github.com/NixOS/nixos-hardware/issues/1052) diff --git a/asus/zephyrus/ga402x/default.nix b/asus/zephyrus/ga402x/default.nix index 7e49eb6..e4e681e 100644 --- a/asus/zephyrus/ga402x/default.nix +++ b/asus/zephyrus/ga402x/default.nix @@ -1,15 +1,10 @@ -## When using from a Flake, you can access these via imports of the attr key, e.g: -# -# imports = [ -# nixos-hardware.nixosModules.asus-zephyrus-ga402x.amdgpu -# ]; -# -## or: -# imports = [ -# nixos-hardware.nixosModules.asus-zephyrus-ga402x.nvidia -# ]; +{ ... }: { - amdgpu = import ./amdgpu; - nvidia = import ./nvidia; + assertions = [ + { + assertion = false; + message = "Importing asus/zephyrus/ga402x/ (default.nix) directly is deprecated! See https://github.com/NixOS/nixos-hardware/blob/master/asus/zephyrus/ga402x/ATTR-SET-DEPRECATION.md for more details"; + } + ]; } diff --git a/asus/zephyrus/ga402x/shared.nix b/asus/zephyrus/ga402x/shared.nix index 5049d6e..91739ba 100644 --- a/asus/zephyrus/ga402x/shared.nix +++ b/asus/zephyrus/ga402x/shared.nix @@ -5,7 +5,11 @@ }: let - inherit (lib) mkDefault mkIf mkMerge version versionOlder; + inherit (lib) mkDefault mkEnableOption mkIf mkMerge version versionAtLeast versionOlder; + + cfg = config.hardware.asus.zephyrus.ga402x; + defaultAutosuspendEnable = versionAtLeast config.boot.kernelPackages.kernel.version "6.9"; + in { imports = [ @@ -18,6 +22,18 @@ in { ../../../common/pc/ssd ]; + options.hardware.asus.zephyrus.ga402x = { + # Kernels earlier than 6.9 (possibly even earlier) tend to take 1-2 key-presses + # to wake-up the internal keyboard after the device is suspended. + # Therefore, this option disables auto-suspend for the keyboard by default, but + # enables it for kernel 6.9.x onwards. + # + # Note: the device name is "ASUS N-KEY Device". + keyboard.autosuspend.enable = ( + mkEnableOption "Enable auto-suspend on the internal USB keyboard (ASUS N-KEY Device) on Zephyrus GA402X" + ) // { default = defaultAutosuspendEnable; }; + }; + config = mkMerge [ { # Configure basic system settings: @@ -43,9 +59,9 @@ in { evdev:name:*:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:* KEYBOARD_KEY_ff31007c=f20 ''; - extraRules = '' + extraRules = mkIf (! cfg.keyboard.autosuspend.enable) '' # Disable auto-suspend for the ASUS N-KEY Device, i.e. USB Keyboard - # Otherwise, it will tend to take 1-2 key-presses to wake-up after suspending + # Otherwise on certain kernel-versions, it will tend to take 1-2 key-presses to wake-up after the device suspends ACTION=="add", SUBSYSTEM=="usb", TEST=="power/autosuspend", ATTR{idVendor}=="0b05", ATTR{idProduct}=="19b6", ATTR{power/autosuspend}="-1" ''; }; diff --git a/common/gpu/24.05-compat.nix b/common/gpu/24.05-compat.nix index 3e3495f..1750888 100644 --- a/common/gpu/24.05-compat.nix +++ b/common/gpu/24.05-compat.nix @@ -9,5 +9,7 @@ (lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages" ] [ "hardware" "opengl" "extraPackages" ]) (lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages32" ] [ "hardware" "opengl" "extraPackages32" ]) (lib.mkAliasOptionModule [ "hardware" "graphics" "enable32Bit" ] [ "hardware" "opengl" "driSupport32Bit" ]) + (lib.mkAliasOptionModule [ "hardware" "graphics" "package" ] [ "hardware" "opengl" "package" ]) + (lib.mkAliasOptionModule [ "hardware" "graphics" "package32" ] [ "hardware" "opengl" "package32" ]) ]; } diff --git a/common/gpu/intel/default.nix b/common/gpu/intel/default.nix index be5a8c8..54f4eec 100644 --- a/common/gpu/intel/default.nix +++ b/common/gpu/intel/default.nix @@ -16,9 +16,8 @@ }; options.hardware.intelgpu.loadInInitrd = - lib.mkEnableOption ( - lib.mdDoc "Load the Intel GPU kernel module at stage 1 boot. (Added to `boot.initrd.kernelModules`)" - ) + lib.mkEnableOption + "Load the Intel GPU kernel module at stage 1 boot. (Added to `boot.initrd.kernelModules`)" // { default = true; }; diff --git a/dell/xps/15-9560/default.nix b/dell/xps/15-9560/default.nix index aee5665..510feab 100644 --- a/dell/xps/15-9560/default.nix +++ b/dell/xps/15-9560/default.nix @@ -4,36 +4,18 @@ ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop ./xps-common.nix - - # FIXME: remove this when bumblebee works again - ../../../common/gpu/nvidia/disable.nix + ../../../common/gpu/nvidia ]; + hardware.graphics.enable = true; - /* Bumblebee seems to fail to evaluate: - (stack trace truncated; use '--show-trace' to show the full trace) + hardware.nvidia.modesetting.enable = true; - error: assertion '(useSettings -> (! libsOnly))' failed + hardware.nvidia.prime = { + # integrated + intelBusId = "PCI:0:2:0"; - at /home/joerg/git/nixpkgs/pkgs/os-specific/linux/nvidia-x11/generic.nix:61:1: - - 60| - 61| assert useSettings -> !libsOnly; - | ^ - 62| assert !libsOnly -> kernel != null; - - # This configuration makes intel default and optionaly applications could run nvidia with optirun. - # To Optimize for your use case import intel or nvidia only configuration instead - # xps-9560/intel - # or - # xps-9560/nvidia - - - ##### bumblebee working, needs reboot to take affect and to use it run: optirun "" - services.xserver.videoDrivers = [ "intel" "nvidia" ]; - boot.blacklistedKernelModules = [ "nouveau" "bbswitch" ]; - boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ]; - hardware.bumblebee.enable = lib.mkDefault true; - hardware.bumblebee.pmMethod = lib.mkDefault "none"; - */ + # dedicated + nvidiaBusId = "PCI:1:0:0"; + }; } diff --git a/flake.nix b/flake.nix index 6c1a300..0be7245 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,7 @@ outputs = _: { nixosModules = let deprecated = issue: name: value: builtins.trace "warning: ${name} flake output is deprecated and will be removed. See https://github.com/NixOS/nixos-hardware/issues/${issue} for more information" value; + import = path: path; # let the module system know what we are exporting in { acer-aspire-4810t = import ./acer/aspire/4810t; airis-n990 = import ./airis/n990; @@ -16,6 +17,7 @@ apple-macbook-pro-12-1 = import ./apple/macbook-pro/12-1; apple-macbook-pro-14-1 = import ./apple/macbook-pro/14-1; apple-macmini-4-1 = import ./apple/macmini/4; + apple-imac-18-2 = import ./apple/imac/18-2; apple-t2 = import ./apple/t2; asus-battery = import ./asus/battery.nix; asus-ally-rc71l = import ./asus/ally/rc71l; @@ -25,11 +27,15 @@ asus-fa507rm = import ./asus/fa507rm; asus-pro-ws-x570-ace = import ./asus/pro-ws-x570-ace; asus-rog-strix-g513im = import ./asus/rog-strix/g513im; + asus-rog-strix-g713ie = import ./asus/rog-strix/g713ie; asus-rog-strix-g733qs = import ./asus/rog-strix/g733qs; + asus-rog-strix-x570e = import ./asus/rog-strix/x570e; asus-zenbook-ux371 = import ./asus/zenbook/ux371; asus-zephyrus-ga401 = import ./asus/zephyrus/ga401; asus-zephyrus-ga402 = import ./asus/zephyrus/ga402; asus-zephyrus-ga402x = import ./asus/zephyrus/ga402x; + asus-zephyrus-ga402x-amdgpu = import ./asus/zephyrus/ga402x/amdgpu; + asus-zephyrus-ga402x-nvidia = import ./asus/zephyrus/ga402x/nvidia; asus-zephyrus-ga502 = import ./asus/zephyrus/ga502; asus-zephyrus-ga503 = import ./asus/zephyrus/ga503; asus-zephyrus-gu603h = import ./asus/zephyrus/gu603h; @@ -109,6 +115,7 @@ intel-nuc-8i7beh = import ./intel/nuc/8i7beh; lenovo-ideapad-15alc6 = import ./lenovo/ideapad/15alc6; lenovo-ideapad-15arh05 = import ./lenovo/ideapad/15arh05; + lenovo-ideapad-15ach6 = import ./lenovo/ideapad/15ach6; lenovo-ideapad-16ach6 = import ./lenovo/ideapad/16ach6; lenovo-ideapad-z510 = import ./lenovo/ideapad/z510; lenovo-ideapad-slim-5 = import ./lenovo/ideapad/slim-5; @@ -154,6 +161,7 @@ lenovo-thinkpad-t14-amd-gen2 = import ./lenovo/thinkpad/t14/amd/gen2; lenovo-thinkpad-t14-amd-gen3 = import ./lenovo/thinkpad/t14/amd/gen3; lenovo-thinkpad-t14-amd-gen4 = import ./lenovo/thinkpad/t14/amd/gen4; + lenovo-thinkpad-t14-amd-gen5 = import ./lenovo/thinkpad/t14/amd/gen5; lenovo-thinkpad-t14s = import ./lenovo/thinkpad/t14s; lenovo-thinkpad-t14s-amd-gen1 = import ./lenovo/thinkpad/t14s/amd/gen1; lenovo-thinkpad-t14s-amd-gen4 = import ./lenovo/thinkpad/t14s/amd/gen4; @@ -183,6 +191,7 @@ lenovo-thinkpad-x1-9th-gen = import ./lenovo/thinkpad/x1/9th-gen; lenovo-thinkpad-x1-10th-gen = import ./lenovo/thinkpad/x1/10th-gen; lenovo-thinkpad-x1-11th-gen = import ./lenovo/thinkpad/x1/11th-gen; + lenovo-thinkpad-x1-12th-gen = import ./lenovo/thinkpad/x1/12th-gen; lenovo-thinkpad-x1-extreme = import ./lenovo/thinkpad/x1-extreme; lenovo-thinkpad-x1-extreme-gen2 = import ./lenovo/thinkpad/x1-extreme/gen2; lenovo-thinkpad-x1-extreme-gen4 = import ./lenovo/thinkpad/x1-extreme/gen4; @@ -206,6 +215,8 @@ lenovo-thinkpad-z13-gen2 = import ./lenovo/thinkpad/z/gen2/z13; lenovo-yoga-6-13ALC6 = import ./lenovo/yoga/6/13ALC6; lenovo-yoga-7-14ARH7 = import ./lenovo/yoga/7/14ARH7; + lenovo-yoga-7-14ARH7-amdgpu = import ./lenovo/yoga/7/14ARH7/amdgpu; + lenovo-yoga-7-14ARH7-nvidia = import ./lenovo/yoga/7/14ARH7/nvidia; lenovo-yoga-7-slim-gen8 = import ./lenovo/yoga/7/slim/gen8; letsnote-cf-lx4 = import ./panasonic/letsnote/cf-lx4; microchip-icicle-kit = import ./microchip/icicle-kit; @@ -229,6 +240,7 @@ omen-14-fb0798ng = import ./omen/14-fb0798ng; omen-15-en0010ca = import ./omen/15-en0010ca; omen-16-n0005ne = import ./omen/16-n0005ne; + omen-16-n0280nd = import ./omen/16-n0280nd; omen-15-en1007sa = import ./omen/15-en1007sa; omen-15-en0002np = import ./omen/15-en0002np; onenetbook-4 = import ./onenetbook/4; diff --git a/framework/16-inch/common/default.nix b/framework/16-inch/common/default.nix index 547f98f..07e5162 100644 --- a/framework/16-inch/common/default.nix +++ b/framework/16-inch/common/default.nix @@ -26,4 +26,14 @@ # Enable keyboard customization hardware.keyboard.qmk.enable = lib.mkDefault true; + + # Allow `services.libinput.touchpad.disableWhileTyping` to work correctly. + # Set unconditionally because libinput can also be configured dynamically via + # gsettings. + environment.etc."libinput/local-overrides.quirks".text = '' + [Serial Keyboards] + MatchUdevType=keyboard + MatchName=Framework Laptop 16 Keyboard Module - ANSI Keyboard + AttrKeyboardIntegration=internal + ''; } diff --git a/framework/kmod.nix b/framework/kmod.nix index 81ce37a..a6c30eb 100644 --- a/framework/kmod.nix +++ b/framework/kmod.nix @@ -1,8 +1,8 @@ { config, lib, ... }: { - options.hardware.framework.enableKmod = lib.mkEnableOption (lib.mdDoc + options.hardware.framework.enableKmod = lib.mkEnableOption "Enable the community created Framework kernel module that allows interacting with the embedded controller from sysfs." - ) // { + // { # Enable by default if on new enough version of NixOS default = (lib.versionAtLeast (lib.versions.majorMinor lib.version) "24.05"); }; diff --git a/gpd/win-max-2/2023/bmi260/default.nix b/gpd/win-max-2/2023/bmi260/default.nix index bbce72e..099367a 100644 --- a/gpd/win-max-2/2023/bmi260/default.nix +++ b/gpd/win-max-2/2023/bmi260/default.nix @@ -18,7 +18,7 @@ in hardware.sensor.iio.bmi260.enable = mkOption { default = false; type = types.bool; - description = mdDoc '' + description = '' Enable Bosch BMI260 IMU kernel module driver. ''; }; diff --git a/gpd/win-max-2/default.nix b/gpd/win-max-2/default.nix index ae821a3..d7ff52d 100644 --- a/gpd/win-max-2/default.nix +++ b/gpd/win-max-2/default.nix @@ -15,7 +15,7 @@ in # NOTICE: Whenever you can limit PPT to 15W by pressing Fn + Shift to enter quiet mode. options.hardware.gpd.ppt = { - enable = mkEnableOption (mdDoc "Enable PPT control for device by ryzenadj.") // { + enable = mkEnableOption "Enable PPT control for device by ryzenadj." // { # Default increase PPT to the BIOS default when power adapter plugin to increase performance. default = true; }; diff --git a/lenovo/ideapad/15ach6/README.md b/lenovo/ideapad/15ach6/README.md new file mode 100644 index 0000000..e429908 --- /dev/null +++ b/lenovo/ideapad/15ach6/README.md @@ -0,0 +1,25 @@ +# Lenovo IdeaPad Gaming 3 15ACH6 + +This device supports "battery conservation mode", which charges the battery to only ~60%. This mode can be enabled using [TLP](https://linrunner.de/tlp/settings/bc-vendors.html#lenovo-non-thinkpad-series): + +## Device information + +Details from `tlp-stat`: + +``` +System = LENOVO IdeaPad Gaming 3 15ACH6 82K2 +BIOS = H3CN31WW(V2.01) +EC Firmware = 1.31 +OS Release = NixOS 24.11 (Vicuna) +Kernel = 6.6.37 #1-NixOS SMP PREEMPT_DYNAMIC Fri Jul 5 07:34:07 UTC 2024 x86_64 +Init system = systemd +Boot mode = UEFI +Suspend mode = s2idle [deep] +``` + +`lspci` output: + +``` +01:00.0 3D controller: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] (rev a1) +06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6) +``` diff --git a/lenovo/ideapad/15ach6/default.nix b/lenovo/ideapad/15ach6/default.nix new file mode 100644 index 0000000..c771f1b --- /dev/null +++ b/lenovo/ideapad/15ach6/default.nix @@ -0,0 +1,20 @@ +{ lib, ... }: + +{ + imports = [ + ../../../common/cpu/amd + ../../../common/cpu/amd/pstate.nix + ../../../common/gpu/amd + ../../../common/gpu/nvidia/prime.nix + ../../../common/pc/laptop + ../../../common/pc/laptop/ssd + ]; + + hardware.nvidia = { + modesetting.enable = true; + prime = { + amdgpuBusId = "PCI:6:0:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; +} diff --git a/lenovo/legion/16arha7/default.nix b/lenovo/legion/16arha7/default.nix index fa46a73..8c258d5 100644 --- a/lenovo/legion/16arha7/default.nix +++ b/lenovo/legion/16arha7/default.nix @@ -14,8 +14,8 @@ in ../../../common/pc/laptop/ssd ]; - # Kernel 6.9 includes the speaker fix, so only install this on systems with older kernels. - boot.extraModulePackages = lib.mkIf (lib.versionOlder config.boot.kernelPackages.kernel.version "6.9") [ lenovo-speaker-fix ]; + # Kernel 6.10 includes the speaker fix, so only install this on systems with older kernels. + boot.extraModulePackages = lib.mkIf (lib.versionOlder config.boot.kernelPackages.kernel.version "6.10") [ lenovo-speaker-fix ]; # √(2560² + 1600²) px / 16 in ≃ 189 dpi services.xserver.dpi = 189; diff --git a/lenovo/thinkpad/t14/amd/gen5/default.nix b/lenovo/thinkpad/t14/amd/gen5/default.nix new file mode 100644 index 0000000..e61a3a0 --- /dev/null +++ b/lenovo/thinkpad/t14/amd/gen5/default.nix @@ -0,0 +1,12 @@ +{ lib, pkgs, config, ... }: + +{ + imports = [ + ../. + ../../../../../common/cpu/amd/pstate.nix + ]; + + # For the Qualcomm NFA765 [17cb:1103] wireless network controller + # See https://bugzilla.redhat.com/show_bug.cgi?id=2047878 + boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.16") pkgs.linuxPackages_latest; +} diff --git a/lenovo/thinkpad/t14/default.nix b/lenovo/thinkpad/t14/default.nix index 3466e95..b6fd228 100644 --- a/lenovo/thinkpad/t14/default.nix +++ b/lenovo/thinkpad/t14/default.nix @@ -14,7 +14,11 @@ # Force use of the thinkpad_acpi driver for backlight control. # This allows the backlight save/load systemd service to work. - boot.kernelParams = [ "acpi_backlight=native" ]; + boot.kernelParams = [ + "acpi_backlight=native" + # Needed for touchpad to work properly (click doesn't register by pushing down the touchpad). + "psmouse.synaptics_intertouch=0" + ]; # see https://github.com/NixOS/nixpkgs/issues/69289 boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.2") pkgs.linuxPackages_latest; diff --git a/lenovo/thinkpad/x1/12th-gen/default.nix b/lenovo/thinkpad/x1/12th-gen/default.nix new file mode 100644 index 0000000..7d17c71 --- /dev/null +++ b/lenovo/thinkpad/x1/12th-gen/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ../. + ../../../../common/pc/laptop/ssd + ]; + + hardware.trackpoint.device = "TPPS/2 Synaptics TrackPoint"; +} diff --git a/lenovo/thinkpad/x260/default.nix b/lenovo/thinkpad/x260/default.nix index c11ef98..409986d 100644 --- a/lenovo/thinkpad/x260/default.nix +++ b/lenovo/thinkpad/x260/default.nix @@ -9,9 +9,4 @@ # https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X260#Thinkpad_X260 "i915.enable_psr=0" ]; - - # https://wiki.archlinux.org/index.php/TLP#Btrfs - services.tlp.settings = { - SATA_LINKPWR_ON_BAT = "med_power_with_dipm"; - }; } diff --git a/lenovo/thinkpad/z/gen2/z13/asound.conf b/lenovo/thinkpad/z/gen2/z13/asound.conf new file mode 100644 index 0000000..e977df7 --- /dev/null +++ b/lenovo/thinkpad/z/gen2/z13/asound.conf @@ -0,0 +1,9 @@ +pcm.!default { + type plug + slave.pcm "hw:1,0" +} + +ctl.!default { + type hw + card 1 +} diff --git a/lenovo/thinkpad/z/gen2/z13/default.nix b/lenovo/thinkpad/z/gen2/z13/default.nix index 5eb6ef0..636d2e0 100644 --- a/lenovo/thinkpad/z/gen2/z13/default.nix +++ b/lenovo/thinkpad/z/gen2/z13/default.nix @@ -5,15 +5,5 @@ ../../../../../lenovo/thinkpad/z/gen2 ]; - sound.extraConfig = '' - pcm.!default { - type plug - slave.pcm "hw:1,0" - } - - ctl.!default { - type hw - card 1 - } - ''; + environment.etc."asound.conf".source = ./asound.conf; } diff --git a/lenovo/yoga/7/14ARH7/ATTR-SET-DEPRECATION.md b/lenovo/yoga/7/14ARH7/ATTR-SET-DEPRECATION.md new file mode 100644 index 0000000..9ef5239 --- /dev/null +++ b/lenovo/yoga/7/14ARH7/ATTR-SET-DEPRECATION.md @@ -0,0 +1,16 @@ +# Deprecation of //lenovo/yoga/7/14ARH7/default.nix + +Background: +The `lenovo-yoga-7-14ARH7` provides an attr-set with `amdgpu` and `nvidia` entries, to allow users +to choose whether to enable only the AMD-GPU driver, or also enable the NVidia driver with (by +default) Prime enabled. + +However, this attr-set style seems to be broken by [PR #1046](https://github.com/NixOS/nixos-hardware/pull/1046), +which exports modules as paths, instead. +That change seems to cause an error of "value is a path while a set was expected". + +[PR #1053](https://github.com/NixOS/nixos-hardware/pull/1053): +- Replaced `lenovo-yoga-7-14ARH7.amdgpu` with a `lenovo-yoga-7-14ARH7-amdgpu` entry. +- Replaced `lenovo-yoga-7-14ARH7.nvidia` with a `lenovo-yoga-7-14ARH7-nvidia` entry. +- Made `lenovo-yoga-7-14ARH7` throw a deprecation error. +- [FIXES: #1052](https://github.com/NixOS/nixos-hardware/issues/1052) diff --git a/lenovo/yoga/7/14ARH7/default.nix b/lenovo/yoga/7/14ARH7/default.nix index 851033c..36605a1 100644 --- a/lenovo/yoga/7/14ARH7/default.nix +++ b/lenovo/yoga/7/14ARH7/default.nix @@ -1,15 +1,10 @@ -# When using from a Flake, you can access these via imports of the attr key, e.g: -# -# imports = [ -# nixos-hardware.nixosModules.lenovo-yoga-7-14ARH7.amdgpu -# ]; -# -## or: -# imports = [ -# nixos-hardware.nixosModules.lenovo-yoga-7-14ARH7.nvidia -# ]; +{ ... }: { - amdgpu = import ./amdgpu; - nvidia = import ./nvidia; + assertions = [ + { + assertion = false; + message = "Importing lenovo/yoga/7/14ARH7/ (default.nix) directly is deprecated! See https://github.com/NixOS/nixos-hardware/blob/master/lenovo/yoga/7/14ARH7/ATTR-SET-DEPRECATION.md for more details"; + } + ]; } diff --git a/microsoft/surface/common/default.nix b/microsoft/surface/common/default.nix index 057142c..f4dbfe9 100644 --- a/microsoft/surface/common/default.nix +++ b/microsoft/surface/common/default.nix @@ -8,7 +8,7 @@ in { ./kernel ]; - microsoft-surface.kernelVersion = mkDefault "6.6"; + microsoft-surface.kernelVersion = mkDefault "6.10"; # Seems to be required to properly enable S0ix "Modern Standby": boot.kernelParams = mkDefault [ "mem_sleep_default=deep" ]; diff --git a/microsoft/surface/common/kernel/default.nix b/microsoft/surface/common/kernel/default.nix index a8f598d..84edc89 100644 --- a/microsoft/surface/common/kernel/default.nix +++ b/microsoft/surface/common/kernel/default.nix @@ -5,7 +5,7 @@ let in { imports = [ - ./linux-6.9.x + ./linux-6.10.x ]; options.microsoft-surface.kernelVersion = mkOption { diff --git a/microsoft/surface/common/kernel/linux-6.9.x/default.nix b/microsoft/surface/common/kernel/linux-6.10.x/default.nix similarity index 87% rename from microsoft/surface/common/kernel/linux-6.9.x/default.nix rename to microsoft/surface/common/kernel/linux-6.10.x/default.nix index c0fd5c9..5d6f7a6 100644 --- a/microsoft/surface/common/kernel/linux-6.9.x/default.nix +++ b/microsoft/surface/common/kernel/linux-6.10.x/default.nix @@ -7,14 +7,14 @@ let cfg = config.microsoft-surface; - version = "6.9.3"; + version = "6.10.3"; kernelPatches = surfacePatches { inherit version; patchFn = ./patches.nix; }; kernelPackages = linuxPackage { inherit version kernelPatches; - sha256 = "1bnzxparybwh320019pr2msaapas41dhjmvg4gy791rn05jc88f3"; + sha256 = "1666dypfg193l5460maadki4hc291hr7k9fw74nq21fxczyj4pzs"; ignoreConfigErrors=true; }; diff --git a/microsoft/surface/common/kernel/linux-6.9.x/patches.nix b/microsoft/surface/common/kernel/linux-6.10.x/patches.nix similarity index 100% rename from microsoft/surface/common/kernel/linux-6.9.x/patches.nix rename to microsoft/surface/common/kernel/linux-6.10.x/patches.nix diff --git a/microsoft/surface/common/kernel/linux-package.nix b/microsoft/surface/common/kernel/linux-package.nix index 45b4734..b179fcb 100644 --- a/microsoft/surface/common/kernel/linux-package.nix +++ b/microsoft/surface/common/kernel/linux-package.nix @@ -48,7 +48,7 @@ let isVersionOf = kernelVersion: version: # Test if the provided version is considered one of the list of versions from above: - elem version (versionsOf version); + elem kernelVersion (versionsOf version); in { inherit linuxPackage repos surfacePatches versionsOf isVersionOf versionsOfEnum; diff --git a/microsoft/surface/common/repos.nix b/microsoft/surface/common/repos.nix index 313f133..513f788 100644 --- a/microsoft/surface/common/repos.nix +++ b/microsoft/surface/common/repos.nix @@ -4,8 +4,8 @@ linux-surface = fetchFromGitHub { owner = "linux-surface"; repo = "linux-surface"; - rev = "arch-6.9.3-1"; - hash = "sha256-HoG7MuWAtiTAX9CJeqCGrfkfoue7XLtSMF6zjx4z7i8="; + rev = "arch-6.10.3-1"; + hash = "sha256-T7voXofI5W+YodHB2DtNSKKc4iUlN3NS0onP4TKFvQM="; }; # This is the owner and repo for the pre-patched kernel from the "linux-surface" project: diff --git a/omen/16-n0280nd/README.md b/omen/16-n0280nd/README.md new file mode 100644 index 0000000..1fa601c --- /dev/null +++ b/omen/16-n0280nd/README.md @@ -0,0 +1,5 @@ +# HP Omen 16-n0280nd + +## ACPI platform profiles + +This config enables `hp-wmi`, which allows switch between cool, balanced, and performance modes on the platform EC, used by power management tools like `power-profile-daemon` and `tlp`. diff --git a/omen/16-n0280nd/default.nix b/omen/16-n0280nd/default.nix new file mode 100644 index 0000000..3929c66 --- /dev/null +++ b/omen/16-n0280nd/default.nix @@ -0,0 +1,21 @@ +{ lib, pkgs, ... }: + +{ + imports = [ + ../../common/cpu/amd + ../../common/cpu/amd/pstate.nix + ../../common/gpu/nvidia/prime.nix + ../../common/pc/laptop + ../../common/pc/ssd + ]; + + # Enables ACPI platform profiles + boot = lib.mkIf (lib.versionAtLeast pkgs.linux.version "6.1") { + kernelModules = [ "hp-wmi" ]; + }; + + hardware.nvidia.prime = { + amdgpuBusId = "PCI:6:0:0"; + nvidiaBusId = "PCI:1:0:0"; + }; +} diff --git a/purism/librem/5r4/default.nix b/purism/librem/5r4/default.nix index 76854a6..339b43b 100644 --- a/purism/librem/5r4/default.nix +++ b/purism/librem/5r4/default.nix @@ -12,18 +12,18 @@ in { }; wifiCard = lib.mkOption { type = lib.types.enum [ "redpine" "sparklan" "none" ]; - description = lib.mdDoc '' + description = '' Which wi-fi card is installed in your phone. Phones shipped before January 2023 have redpine, newer phones have sparklan. ''; default = "redpine"; }; - customInitrdModules = lib.mkEnableOption (lib.mdDoc "use of custom kernel modules in the initrd."); - installUdevPackages = lib.mkEnableOption (lib.mdDoc "installation of udev packages from librem5-base."); - lockdownFix = lib.mkEnableOption (lib.mdDoc "fix for orientation and proximity sensors not working after lockdown."); + customInitrdModules = lib.mkEnableOption "use of custom kernel modules in the initrd."; + installUdevPackages = lib.mkEnableOption "installation of udev packages from librem5-base."; + lockdownFix = lib.mkEnableOption "fix for orientation and proximity sensors not working after lockdown."; audio = lib.mkOption { - description = lib.mdDoc '' + description = '' Whether to enable and configure PulseAudio for the Librem5 modem. This is required for audio during calls to work at all. diff --git a/raspberry-pi/4/digi-amp-plus.nix b/raspberry-pi/4/digi-amp-plus.nix index e9df06d..3c19f3a 100644 --- a/raspberry-pi/4/digi-amp-plus.nix +++ b/raspberry-pi/4/digi-amp-plus.nix @@ -13,7 +13,7 @@ in unmuteAmp = lib.mkOption { type = lib.types.bool; default = false; - description = lib.mdDoc '' + description = '' "one-shot" unmute when kernel module first loads. ''; }; @@ -21,7 +21,7 @@ in autoMuteAmp = lib.mkOption { type = lib.types.bool; default = true; - description = lib.mdDoc '' + description = '' Unmute the amp when an ALSA device is opened by a client. Mute, with a five-second delay when the ALSA device is closed. (Reopening the device within the five-second close window will cancel mute.) '';