Merge remote-tracking branch 'upstream/master'
Some checks failed
Test / tests (nixos-24.05) (push) Has been cancelled
Test / tests (nixos-unstable) (push) Has been cancelled

This commit is contained in:
Aires 2024-07-17 09:11:03 -04:00
commit 13dee7858d
107 changed files with 908 additions and 556 deletions

View file

@ -7,11 +7,15 @@ on:
jobs: jobs:
tests: tests:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
matrix:
# when updating channels, also update .mergify.yml
channel: [ nixos-unstable, nixos-24.05 ]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: cachix/install-nix-action@V27 - uses: cachix/install-nix-action@V27
with: with:
nix_path: nixpkgs=channel:nixos-unstable nix_path: nixpkgs=channel:${{ matrix.channel }}
- name: Show nixpkgs version - name: Show nixpkgs version
run: nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version' run: nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version'
- run: ./tests/run.py - run: ./tests/run.py

View file

@ -1,7 +1,8 @@
queue_rules: queue_rules:
- name: default - name: default
merge_conditions: merge_conditions:
- check-success=tests - check-success=tests (nixos-24.05)
- check-success=tests (nixos-unstable)
defaults: defaults:
actions: actions:
queue: queue:

View file

@ -11,3 +11,4 @@ purism/librem/13v3 @yegortimoshenko
system76/darp6 @khumba system76/darp6 @khumba
framework @emiller88 framework @emiller88
tuxedo/pulse/15/gen2 @trueNAHO tuxedo/pulse/15/gen2 @trueNAHO
tuxedo/pulse/14/gen3 @gabyx @britter @trueNAHO

View file

@ -65,6 +65,10 @@ you can easily pin to a particular revision if you desire more stability.
See [CONTRIBUTING.md](./CONTRIBUTING.md). See [CONTRIBUTING.md](./CONTRIBUTING.md).
## Get in touch
For questions and discussions, come join us in the [nixos-anywhere matrix](https://matrix.to/#/#nixos-hardware:nixos.org) room.
## List of Profiles ## List of Profiles
See code for all available configurations. See code for all available configurations.
@ -94,9 +98,12 @@ See code for all available configurations.
| [Asus ROG Zephyrus G15 GA503](asus/zephyrus/ga503) | `<nixos-hardware/asus/zephyrus/ga503>` | | [Asus ROG Zephyrus G15 GA503](asus/zephyrus/ga503) | `<nixos-hardware/asus/zephyrus/ga503>` |
| [Asus ROG Zephyrus M16 GU603H](asus/zephyrus/gu603h) | `<nixos-hardware/asus/zephyrus/gu603h>` | | [Asus ROG Zephyrus M16 GU603H](asus/zephyrus/gu603h) | `<nixos-hardware/asus/zephyrus/gu603h>` |
| [Asus TUF FX504GD](asus/fx504gd) | `<nixos-hardware/asus/fx504gd>` | | [Asus TUF FX504GD](asus/fx504gd) | `<nixos-hardware/asus/fx504gd>` |
| [Asus TUF FX506HM](asus/fx506hm) | `<nixos-hardware/asus/fx506hm>` |
| [Asus TUF FA507RM](asus/fa507rm) | `<nixos-hardware/asus/fa507rm>` | | [Asus TUF FA507RM](asus/fa507rm) | `<nixos-hardware/asus/fa507rm>` |
| [Asus TUF FA507NV](asus/fa507nv) | `<nixos-hardware/asus/fa507nv>` | | [Asus TUF FA507NV](asus/fa507nv) | `<nixos-hardware/asus/fa507nv>` |
| [Asus Zenbook Flip S13 UX371](asus/zenbook/ux371/) | `<nixos-hardware/asus/zenbook/ux371>` |
| [BeagleBoard PocketBeagle](beagleboard/pocketbeagle) | `<nixos-hardware/beagleboard/pocketbeagle>` | | [BeagleBoard PocketBeagle](beagleboard/pocketbeagle) | `<nixos-hardware/beagleboard/pocketbeagle>` |
| [Chuwi MiniBook X](chuwi/minibook-x) | `<nixos-hardware/chuwi/minibook-x>` |
| [Deciso DEC series](deciso/dec) | `<nixos-hardware/deciso/dec>` | | [Deciso DEC series](deciso/dec) | `<nixos-hardware/deciso/dec>` |
| [Dell G3 3779](dell/g3/3779) | `<nixos-hardware/dell/g3/3779>` | | [Dell G3 3779](dell/g3/3779) | `<nixos-hardware/dell/g3/3779>` |
| [Dell Inspiron 14 5420](dell/inspiron/14-5420) | `<nixos-hardawre/dell/inspiron/14-5420>` | | [Dell Inspiron 14 5420](dell/inspiron/14-5420) | `<nixos-hardawre/dell/inspiron/14-5420>` |
@ -110,6 +117,8 @@ See code for all available configurations.
| [Dell Latitude 7390](dell/latitude/7390) | `<nixos-hardware/dell/latitude/7390>` | | [Dell Latitude 7390](dell/latitude/7390) | `<nixos-hardware/dell/latitude/7390>` |
| [Dell Latitude 7430](dell/latitude/7430) | `<nixos-hardware/dell/latitude/7430>` | | [Dell Latitude 7430](dell/latitude/7430) | `<nixos-hardware/dell/latitude/7430>` |
| [Dell Latitude 7490](dell/latitude/7490) | `<nixos-hardware/dell/latitude/7490>` | | [Dell Latitude 7490](dell/latitude/7490) | `<nixos-hardware/dell/latitude/7490>` |
| [Dell Latitude 9430](dell/latitude/9430) | `<nixos-hardware/dell/latitude/9430>` |
| [Dell Optiplex 3050](dell/optiplex/3050) | `<nixos-hardware/dell/optiplex/3050>` |
| [Dell Poweredge R7515](dell/poweredge/r7515) | `<nixos-hardware/dell/poweredge/r7515>` | | [Dell Poweredge R7515](dell/poweredge/r7515) | `<nixos-hardware/dell/poweredge/r7515>` |
| [Dell Precision 3541](dell/precision/3541) | `<nixos-hardware/dell/precision/3541>` | | [Dell Precision 3541](dell/precision/3541) | `<nixos-hardware/dell/precision/3541>` |
| [Dell Precision 5530](dell/precision/5530) | `<nixos-hardware/dell/precision/5530>` | | [Dell Precision 5530](dell/precision/5530) | `<nixos-hardware/dell/precision/5530>` |
@ -164,12 +173,16 @@ See code for all available configurations.
| [HP Elitebook 845g8](hp/elitebook/845/g8) | `<nixos-hardware/hp/elitebook/845/g8>` | | [HP Elitebook 845g8](hp/elitebook/845/g8) | `<nixos-hardware/hp/elitebook/845/g8>` |
| [HP Elitebook 845g9](hp/elitebook/845/g9) | `<nixos-hardware/hp/elitebook/845/g9>` | | [HP Elitebook 845g9](hp/elitebook/845/g9) | `<nixos-hardware/hp/elitebook/845/g9>` |
| [HP Notebook 14-df0023](hp/notebook/14-df0023) | `<nixos-hardware/hp/notebook/14-df0023>` | | [HP Notebook 14-df0023](hp/notebook/14-df0023) | `<nixos-hardware/hp/notebook/14-df0023>` |
| [Huawei Matebook X Pro (2020)](huawei/machc-wa) | `<nixos-hardware/huawei/machc-wa>` |
| [i.MX8QuadMax Multisensory Enablement Kit](nxp/imx8qm-mek/) | `<nixos-hardware/nxp/imx8qm-mek>` | | [i.MX8QuadMax Multisensory Enablement Kit](nxp/imx8qm-mek/) | `<nixos-hardware/nxp/imx8qm-mek>` |
| [Intel NUC 8i7BEH](intel/nuc/8i7beh/) | `<nixos-hardware/intel/nuc/8i7beh>` | | [Intel NUC 8i7BEH](intel/nuc/8i7beh/) | `<nixos-hardware/intel/nuc/8i7beh>` |
| [Lenovo IdeaPad 3 15alc6](lenovo/ideapad/15alc6) | `<nixos-hardware/lenovo/ideapad/15alc6>` |
| [Lenovo IdeaPad Gaming 3 15arh05](lenovo/ideapad/15arh05) | `<nixos-hardware/lenovo/ideapad/15arh05>` | | [Lenovo IdeaPad Gaming 3 15arh05](lenovo/ideapad/15arh05) | `<nixos-hardware/lenovo/ideapad/15arh05>` |
| [Lenovo IdeaPad 5 Pro 16ach6](lenovo/ideapad/16ach6) | `<nixos-hardware/lenovo/ideapad/16ach6>` |
| [Lenovo IdeaPad Z510](lenovo/ideapad/z510) | `<nixos-hardware/lenovo/ideapad/z510>` | | [Lenovo IdeaPad Z510](lenovo/ideapad/z510) | `<nixos-hardware/lenovo/ideapad/z510>` |
| [Lenovo IdeaPad Slim 5](lenovo/ideapad/slim-5) | `<nixos-hardware/lenovo/ideapad/slim-5>` | | [Lenovo IdeaPad Slim 5](lenovo/ideapad/slim-5) | `<nixos-hardware/lenovo/ideapad/slim-5>` |
| [Lenovo IdeaPad S145 15api](lenovo/ideapad/s145-15api) | `<nixos-hardware/lenovo/ideapad/s145-15api>` | | [Lenovo IdeaPad S145 15api](lenovo/ideapad/s145-15api) | `<nixos-hardware/lenovo/ideapad/s145-15api>` |
| [Lenovo Legion 5 15ach6h](lenovo/legion/15ach6h) | `<nixos-hardware/lenovo/legion/15ach6h>` |
| [Lenovo Legion 5 15arh05h](lenovo/legion/15arh05h) | `<nixos-hardware/lenovo/legion/15arh05h>` | | [Lenovo Legion 5 15arh05h](lenovo/legion/15arh05h) | `<nixos-hardware/lenovo/legion/15arh05h>` |
| [Lenovo Legion 7 Slim 15ach6](lenovo/legion/15ach6) | `<nixos-hardware/lenovo/legion/15ach6>` | | [Lenovo Legion 7 Slim 15ach6](lenovo/legion/15ach6) | `<nixos-hardware/lenovo/legion/15ach6>` |
| [Lenovo Legion 5 Pro 16ach6h](lenovo/legion/16ach6h) | `<nixos-hardware/lenovo/legion/16ach6h>` | | [Lenovo Legion 5 Pro 16ach6h](lenovo/legion/16ach6h) | `<nixos-hardware/lenovo/legion/16ach6h>` |
@ -208,6 +221,7 @@ See code for all available configurations.
| [Lenovo ThinkPad T14 AMD Gen 4](lenovo/thinkpad/t14/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen4>` | | [Lenovo ThinkPad T14 AMD Gen 4](lenovo/thinkpad/t14/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen4>` |
| [Lenovo ThinkPad T14](lenovo/thinkpad/t14) | `<nixos-hardware/lenovo/thinkpad/t14>` | | [Lenovo ThinkPad T14](lenovo/thinkpad/t14) | `<nixos-hardware/lenovo/thinkpad/t14>` |
| [Lenovo ThinkPad T14s AMD Gen 1](lenovo/thinkpad/t14s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/t14s/amd/gen1>` | | [Lenovo ThinkPad T14s AMD Gen 1](lenovo/thinkpad/t14s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/t14s/amd/gen1>` |
| [Lenovo ThinkPad T14s AMD Gen 4](lenovo/thinkpad/t14s/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/t14s/amd/gen4>` |
| [Lenovo ThinkPad T14s](lenovo/thinkpad/t14s) | `<nixos-hardware/lenovo/thinkpad/t14s>` | | [Lenovo ThinkPad T14s](lenovo/thinkpad/t14s) | `<nixos-hardware/lenovo/thinkpad/t14s>` |
| [Lenovo ThinkPad T410](lenovo/thinkpad/t410) | `<nixos-hardware/lenovo/thinkpad/t410>` | | [Lenovo ThinkPad T410](lenovo/thinkpad/t410) | `<nixos-hardware/lenovo/thinkpad/t410>` |
| [Lenovo ThinkPad T420](lenovo/thinkpad/t420) | `<nixos-hardware/lenovo/thinkpad/t420>` | | [Lenovo ThinkPad T420](lenovo/thinkpad/t420) | `<nixos-hardware/lenovo/thinkpad/t420>` |
@ -289,6 +303,7 @@ See code for all available configurations.
| [Purism Librem 15v3](purism/librem/13v3) | `<nixos-hardware/purism/librem/15v3>` | | [Purism Librem 15v3](purism/librem/13v3) | `<nixos-hardware/purism/librem/15v3>` |
| [Purism Librem 5r4](purism/librem/5r4) | `<nixos-hardware/purism/librem/5r4>` | | [Purism Librem 5r4](purism/librem/5r4) | `<nixos-hardware/purism/librem/5r4>` |
| [Raspberry Pi 2](raspberry-pi/2) | `<nixos-hardware/raspberry-pi/2>` | | [Raspberry Pi 2](raspberry-pi/2) | `<nixos-hardware/raspberry-pi/2>` |
| [Raspberry Pi 3](raspberry-pi/3) | `<nixos-hardware/raspberry-pi/3>` |
| [Raspberry Pi 4](raspberry-pi/4) | `<nixos-hardware/raspberry-pi/4>` | | [Raspberry Pi 4](raspberry-pi/4) | `<nixos-hardware/raspberry-pi/4>` |
| [Raspberry Pi 5](raspberry-pi/5) | `<nixos-hardware/raspberry-pi/5>` | | [Raspberry Pi 5](raspberry-pi/5) | `<nixos-hardware/raspberry-pi/5>` |
| [Samsung Series 9 NP900X3C](samsung/np900x3c) | `<nixos-hardware/samsung/np900x3c>` | | [Samsung Series 9 NP900X3C](samsung/np900x3c) | `<nixos-hardware/samsung/np900x3c>` |
@ -300,6 +315,7 @@ See code for all available configurations.
| [Supermicro X12SCZ-TLN4F](supermicro/x12scz-tln4f) | `<nixos-hardware/supermicro/x12scz-tln4f>` | | [Supermicro X12SCZ-TLN4F](supermicro/x12scz-tln4f) | `<nixos-hardware/supermicro/x12scz-tln4f>` |
| [System76 (generic)](system76) | `<nixos-hardware/system76>` | | [System76 (generic)](system76) | `<nixos-hardware/system76>` |
| [System76 Darter Pro 6](system76/darp6) | `<nixos-hardware/system76/darp6>` | | [System76 Darter Pro 6](system76/darp6) | `<nixos-hardware/system76/darp6>` |
| [System76 Gazelle Gaze18](system76/gaze18) | `<nixos-hardware/system76/gaze18>` |
| [Toshiba Chromebook 2 `swanky`](toshiba/swanky) | `<nixos-hardware/toshiba/swanky>` | | [Toshiba Chromebook 2 `swanky`](toshiba/swanky) | `<nixos-hardware/toshiba/swanky>` |
| [Tuxedo InfinityBook v4](tuxedo/infinitybook/v4) | `<nixos-hardware/tuxedo/infinitybook/v4>` | | [Tuxedo InfinityBook v4](tuxedo/infinitybook/v4) | `<nixos-hardware/tuxedo/infinitybook/v4>` |
| [TUXEDO InfinityBook Pro 14 - Gen7](tuxedo/infinitybook/pro14/gen7) | `<nixos-hardware/tuxedo/infinitybook/pro14/gen7>` | | [TUXEDO InfinityBook Pro 14 - Gen7](tuxedo/infinitybook/pro14/gen7) | `<nixos-hardware/tuxedo/infinitybook/pro14/gen7>` |

View file

@ -19,9 +19,6 @@
]; ];
}; };
# TODO: reverse compat
hardware.opengl.driSupport = false;
# TODO: reverse compat # TODO: reverse compat
services.xserver = { services.xserver = {
defaultDepth = lib.mkDefault 24; defaultDepth = lib.mkDefault 24;

View file

@ -3,7 +3,7 @@
{ {
imports = [ imports = [
../. ../.
../../../common/cpu/intel/sandy-bridge ../../../common/gpu/intel/sandy-bridge
]; ];
boot.kernelParams = [ boot.kernelParams = [

View file

@ -1,11 +1,14 @@
{ lib, ... }:
{ {
imports = [ imports = [
../. ../.
../../../common/pc/laptop/ssd ../../../common/pc/laptop/ssd
../../../common/gpu/24.05-compat.nix
]; ];
# TODO: reverse compat # TODO: reverse compat
hardware.opengl.driSupport32Bit = true; hardware.graphics.enable32Bit = lib.mkDefault true;
services.xserver = { services.xserver = {
# TODO: we should not enable unfree drivers # TODO: we should not enable unfree drivers

View file

@ -1,17 +1,26 @@
# MacBook Pro 14,1 # MacBook Pro 14,1, NixOS 24.01 (2024)
## Audio ## Audio
[ ] Still broken, use usb/hdmi instead, nixos pkg needed: https://github.com/davidjo/snd_hda_macbookpro
Audio is a lost cause. Bribe an Apple or Cirrus engineer for the datasheet. ;)
## Thunderbolt
The thunderbolt module will oops upon system resume, and subsequently refuse to work until next reboot.
## Suspend/Resume
The d3cold state needs to be disabled on the NVME controller for it to wake up.
## Bluetooth ## Bluetooth
The Bluetooth UART (/dev/ttyS0) is created and then deleted by udev in early boot. [ ] Still broken, even (hacky) workaround does not work any more with latest driver updates
Hack around it by reloading the 8250_dw module, causing it to be re-created.
## Touchpad
[x] Working, including 'disable while typing' usable quirk
## Thunderbolt
[x] Working
## NVME
[x] Working, older NVME / Controller may need workaround for resume
## Suspend/Resume
[ ] Thunderbolt, WIFI, NVME may still need reboot (sometimes).
## Wifi
[x] Working (2,4Ghz & 5Ghz supported), WEP3 currently broken b/c old brcm fw
## Resources
- https://github.com/Dunedan/mbp-2016-linux?tab=readme-ov-file
- https://gist.github.com/roadrunner2/1289542a748d9a104e7baec6a92f9cd7

View file

@ -1,51 +1,89 @@
{ config, lib, pkgs, ... }:
{ {
config,
lib,
pkgs,
...
}: {
imports = [ imports = [
../. ../../../common/gpu/intel/kaby-lake
../../../common/gpu/intel
../../../common/hidpi.nix
../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/laptop/ssd
../../../common/pc/laptop/acpi_call.nix
]; ];
## # Make the keyboard work in stage1, enable iommu
# Make the keyboard work in stage1
# https://www.kernelconfig.io/config_keyboard_applespi # https://www.kernelconfig.io/config_keyboard_applespi
##
boot.initrd.kernelModules = [ "applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ];
boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest; boot = {
initrd.kernelModules = ["applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ];
## kernelParams = [ "intel_iommu=on" ];
# Disable d3cold on the NVME controller so the machine can actually kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest;
# wake up.
# https://github.com/Dunedan/mbp-2016-linux
##
systemd.services.disable-nvme-d3cold = {
description = "Disables d3cold on the NVME controller";
before = [ "suspend.target" ];
path = [ pkgs.bash pkgs.coreutils ];
serviceConfig.Type = "oneshot";
serviceConfig.ExecStart = "${./disable-nvme-d3cold.sh}";
serviceConfig.TimeoutSec = 0;
wantedBy = [ "multi-user.target" "suspend.target" ];
}; };
## # Touchpad quirks to make "disable-while-typing" actually work
services.libinput.enable = true;
environment.etc."libinput/local-overrides.quirks".text = ''
[MacBook(Pro) SPI Touchpads]
MatchName=*Apple SPI Touchpad*
ModelAppleTouchpad=1
AttrTouchSizeRange=200:150
AttrPalmSizeThreshold=1100
[MacBook(Pro) SPI Keyboards]
MatchName=*Apple SPI Keyboard*
AttrKeyboardIntegration=internal
[MacBookPro Touchbar]
MatchBus=usb
MatchVendor=0x05AC
MatchProduct=0x8600
AttrKeyboardIntegration=internal
'';
# Wifi, CPU Microcode FW updates
networking.enableB43Firmware = lib.mkDefault true;
hardware = {
enableRedistributableFirmware = lib.mkDefault true;
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 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, # for bluetooth, and the only way to get it again is to reload 8502_dw. Luckily,
# nothing else uses it. # nothing else uses it.
## ##
systemd.services.btattach-bcm2e7c = lib.mkIf config.hardware.bluetooth.enable { # systemd.services.btattach-bcm2e7c = lib.mkIf config.hardware.bluetooth.enable {
before = [ "bluetooth.target" ]; # 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" ];
# };
# Hacky, as it's a different device, but this always comes after ttyS0 ## [Enable only if needed!]
after = [ "sys-devices-platform-serial8250-tty-ttyS1.device" ]; # Disable d3cold on older NVME controller, only if needed
path = [ pkgs.bash pkgs.kmod pkgs.bluez ]; # https://github.com/Dunedan/mbp-2016-linux
##
serviceConfig.Type = "simple"; #systemd.services.disable-nvme-d3cold = {
serviceConfig.ExecStart = "${./btfix.sh}"; # description = "Disables d3cold on the NVME controller";
# before = [ "suspend.target" ];
wantedBy = [ "multi-user.target" ]; # path = [ pkgs.bash pkgs.coreutils ];
}; # serviceConfig.Type = "oneshot";
# serviceConfig.ExecStart = "${./disable-nvme-d3cold.sh}";
# serviceConfig.TimeoutSec = 0;
# wantedBy = [ "multi-user.target" "suspend.target" ];
#};
} }

View file

@ -8,21 +8,23 @@ in
{ {
imports = [ imports = [
../. ../.
../../../common/gpu/24.05-compat.nix
]; ];
services.xserver.videoDrivers = mkDefault [ "nvidiaLegacy340" ]; services.xserver.videoDrivers = mkDefault [ "nvidiaLegacy340" ];
hardware.opengl = { hardware = {
graphics = {
enable = mkDefault true; enable = mkDefault true;
driSupport = mkDefault true; enable32Bit = mkDefault true;
driSupport32Bit = mkDefault true;
}; };
hardware.nvidia = { nvidia = {
modesetting.enable = mkDefault true; modesetting.enable = mkDefault true;
powerManagement.enable = mkDefault false; powerManagement.enable = mkDefault false;
powerManagement.finegrained = mkDefault false; powerManagement.finegrained = mkDefault false;
open = mkDefault false; open = mkDefault false;
nvidiaSettings = mkDefault true; nvidiaSettings = mkDefault true;
}; };
};
} }

View file

@ -2,15 +2,20 @@
, ... } @ args: , ... } @ args:
let let
version = "6.9.8";
majorVersion = with lib; (elemAt (take 1 (splitVersion version)) 0);
patchRepo = fetchFromGitHub { patchRepo = fetchFromGitHub {
owner = "t2linux"; owner = "t2linux";
repo = "linux-t2-patches"; repo = "linux-t2-patches";
rev = "8b0e51ea87f170c559c9e2f437f85367838c2fad"; rev = "47b4069221c0ee3b6db56ab1ea90ae89e2de26f3";
hash = "sha256-4YFaLW4WTKdFysIJHnshEaqoiKBFegnZiw4Kv88LjIA="; hash = "sha256-1B5DbLdyKdswy2ERmWVyjojdazTDbMsS+Vz/mrTdoFY=";
}; };
version = "6.9"; kernel = fetchzip {
majorVersion = with lib; (elemAt (take 1 (splitVersion version)) 0); url = "mirror://kernel/linux/kernel/v${majorVersion}.x/linux-${version}.tar.xz";
hash = "sha256-o67tasZu4qGQ7obw+BCgNfaLqDcT3SPqsa3kTzWjmfg=";
};
in in
buildLinux (args // { buildLinux (args // {
inherit version; inherit version;
@ -20,10 +25,7 @@ buildLinux (args // {
modDirVersion = with lib; "${concatStringsSep "." (take 3 (splitVersion "${version}.0"))}"; modDirVersion = with lib; "${concatStringsSep "." (take 3 (splitVersion "${version}.0"))}";
src = runCommand "patched-source" {} '' src = runCommand "patched-source" {} ''
cp -r ${fetchzip { cp -r ${kernel} $out
url = "mirror://kernel/linux/kernel/v${majorVersion}.x/linux-${version}.tar.xz";
hash = "sha256-RIxLyvF5kw/to8MjAUq2iQ4X0bGk7FY+ovE3zd0eKxM=";
}} $out
chmod -R u+w $out chmod -R u+w $out
cd $out cd $out
while read -r patch; do while read -r patch; do
@ -35,6 +37,7 @@ buildLinux (args // {
structuredExtraConfig = with lib.kernel; { structuredExtraConfig = with lib.kernel; {
APPLE_BCE = module; APPLE_BCE = module;
APPLE_GMUX = module; APPLE_GMUX = module;
APFS_FS = module;
BRCMFMAC = module; BRCMFMAC = module;
BT_BCM = module; BT_BCM = module;
BT_HCIBCM4377 = module; BT_HCIBCM4377 = module;
@ -44,7 +47,6 @@ buildLinux (args // {
HID_APPLETB_KBD = module; HID_APPLETB_KBD = module;
HID_APPLE = module; HID_APPLE = module;
DRM_APPLETBDRM = module; DRM_APPLETBDRM = module;
HID_APPLE_MAGIC_BACKLIGHT = module;
HID_SENSOR_ALS = module; HID_SENSOR_ALS = module;
SND_PCM = module; SND_PCM = module;
STAGING = yes; STAGING = yes;

28
asus/fx506hm/README.md Normal file
View file

@ -0,0 +1,28 @@
<!-- vim: set fenc=utf-8 ts=2 sw=2 sts=-1 sr et si tw=0 fdm=marker fmr={{{,}}}: -->
# [ASUS TUF Gaming F15 FX506HM (2021)](https://www.asus.com/laptops/for-gaming/tuf-gaming/2021-asus-tuf-gaming-f15/)
This imports common modules for the Intel CPU and iGPU, Nvidia and PRIME render offloading, basic laptop configs, basic SSD configs and configs for ASUS batteries.
On top of that, it sets the right PCI bus IDs for the iGPU and dGPU to make PRIME work well and enables modesetting.
## Useful other things to consider in your configuration
### Battery charging limit
Due to the common module for ASUS batteries, you can make your battery only charge up to a certain percentage to improve its life. You can place something similar to the following in your configuration to enable it:
```nix
hardware.asus.battery =
{
chargeUpto = 85; # Maximum level of charge for your battery, as a percentage.
enableChargeUptoScript = true; # Whether to add charge-upto to environment.systemPackages. `charge-upto 85` temporarily sets the charge limit to 85%.
};
```
### OpenRGB
You can use OpenRGB to control the RGB keyboard on this laptop. There's also plugins for it to get some extra RGB lighting modes if you wish. You can place the following in your configuration to enable it:
```nix
boot.kernelModules = [ "i2c-dev" ];
hardware.i2c.enable = true;
services.udev.packages = [ pkgs.openrgb ];
services.hardware.openrgb.enable = true;
```

24
asus/fx506hm/default.nix Normal file
View file

@ -0,0 +1,24 @@
{ lib, ... }:
{
imports =
[
../../common/cpu/intel
../../common/gpu/nvidia
../../common/gpu/nvidia/prime.nix
../../common/pc/laptop
../../common/pc/ssd
../battery.nix
];
hardware.nvidia =
{
modesetting.enable = lib.mkDefault true;
prime =
{
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
};
}

View file

@ -0,0 +1,47 @@
# Asus Zenbook Flip S13
This is tested on an [UX371](https://www.asus.com/laptops/for-home/zenbook/zenbook-flip-s-ux371-11th-gen-intel/).
## Tested Hardware
```bash
lspci -nn
0000:00:00.0 Host bridge [0600]: Intel Corporation 11th Gen Core Processor Host Bridge/DRAM Registers [8086:9a14] (rev 01)
0000:00:02.0 VGA compatible controller [0300]: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] [8086:9a49] (rev 01)
0000:00:04.0 Signal processing controller [1180]: Intel Corporation TigerLake-LP Dynamic Tuning Processor Participant [8086:9a03] (rev 01)
0000:00:07.0 PCI bridge [0604]: Intel Corporation Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #0 [8086:9a23] (rev 01)
0000:00:07.1 PCI bridge [0604]: Intel Corporation Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #1 [8086:9a25] (rev 01)
0000:00:08.0 System peripheral [0880]: Intel Corporation GNA Scoring Accelerator module [8086:9a11] (rev 01)
0000:00:0a.0 Signal processing controller [1180]: Intel Corporation Tigerlake Telemetry Aggregator Driver [8086:9a0d] (rev 01)
0000:00:0d.0 USB controller [0c03]: Intel Corporation Tiger Lake-LP Thunderbolt 4 USB Controller [8086:9a13] (rev 01)
0000:00:0d.2 USB controller [0c03]: Intel Corporation Tiger Lake-LP Thunderbolt 4 NHI #0 [8086:9a1b] (rev 01)
0000:00:0e.0 RAID bus controller [0104]: Intel Corporation Volume Management Device NVMe RAID Controller [8086:9a0b]
0000:00:12.0 Serial controller [0700]: Intel Corporation Tiger Lake-LP Integrated Sensor Hub [8086:a0fc] (rev 20)
0000:00:14.0 USB controller [0c03]: Intel Corporation Tiger Lake-LP USB 3.2 Gen 2x1 xHCI Host Controller [8086:a0ed] (rev 20)
0000:00:14.2 RAM memory [0500]: Intel Corporation Tiger Lake-LP Shared SRAM [8086:a0ef] (rev 20)
0000:00:14.3 Network controller [0280]: Intel Corporation Wi-Fi 6 AX201 [8086:a0f0] (rev 20)
0000:00:15.0 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #0 [8086:a0e8] (rev 20)
0000:00:15.1 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #1 [8086:a0e9] (rev 20)
0000:00:16.0 Communication controller [0780]: Intel Corporation Tiger Lake-LP Management Engine Interface [8086:a0e0] (rev 20)
0000:00:1d.0 System peripheral [0880]: Intel Corporation RST VMD Managed Controller [8086:09ab]
0000:00:1f.0 ISA bridge [0601]: Intel Corporation Tiger Lake-LP LPC Controller [8086:a082] (rev 20)
0000:00:1f.3 Multimedia audio controller [0401]: Intel Corporation Tiger Lake-LP Smart Sound Technology Audio Controller [8086:a0c8] (rev 20)
0000:00:1f.4 SMBus [0c05]: Intel Corporation Tiger Lake-LP SMBus Controller [8086:a0a3] (rev 20)
0000:00:1f.5 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP SPI Controller [8086:a0a4] (rev 20)
10000:e0:1d.0 PCI bridge [0604]: Intel Corporation Tiger Lake-LP PCI Express Root Port #9 [8086:a0b0] (rev 20)
10000:e1:00.0 Non-Volatile memory controller [0108]: Sandisk Corp WD Black SN750 / PC SN730 / Red SN700 NVMe SSD [15b7:5006]
```
## Updating Firmware
First enable `fwupd` in your config
```nix
services.fwupd.enable = true;
```
Then run
```bash
$ fwupdmgr update
```

View file

@ -0,0 +1,24 @@
{
config,
lib,
pkgs,
inputs,
...
}:
{
imports = [
../../../common/gpu/intel/tiger-lake
../../../common/pc/laptop
../../../common/pc/laptop/ssd
../../battery.nix
];
boot.kernelParams = lib.mkIf (config.hardware.intelgpu.driver == "xe") [
"i915.force_probe=!9a49"
"xe.force_probe=9a49"
];
hardware.enableRedistributableFirmware = lib.mkDefault true;
services.thermald.enable = lib.mkDefault true;
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
}

View file

@ -1,11 +1,10 @@
{ config, { config,
lib, lib,
pkgs,
... ...
}: }:
let let
inherit (lib) mkDefault mkEnableOption mkIf mkMerge; inherit (lib) mkEnableOption mkIf mkMerge;
cfg = config.hardware.asus.zephyrus.ga402x; cfg = config.hardware.asus.zephyrus.ga402x;
in { in {
@ -20,19 +19,6 @@ in {
}; };
config = mkMerge [ config = mkMerge [
{
# AMD RX680
services.xserver.videoDrivers = mkDefault [ "amdgpu" ];
hardware = {
amdgpu.loadInInitrd = true;
opengl.extraPackages = with pkgs; [
vaapiVdpau
libvdpau-va-gl
];
};
}
(mkIf cfg.amdgpu.recovery.enable { (mkIf cfg.amdgpu.recovery.enable {
# Hopefully fixes for where the kernel sometimes hangs when suspending or hibernating # Hopefully fixes for where the kernel sometimes hangs when suspending or hibernating
# (Though, I'm very suspicious of the Mediatek Wifi...) # (Though, I'm very suspicious of the Mediatek Wifi...)

View file

@ -12,6 +12,7 @@ in {
## "prime.nix" loads this, aleady: ## "prime.nix" loads this, aleady:
# ../../../common/gpu/nvidia # ../../../common/gpu/nvidia
../../../../common/gpu/nvidia/prime.nix ../../../../common/gpu/nvidia/prime.nix
]; ];
# NVIDIA GeForce RTX 4060 Mobile # NVIDIA GeForce RTX 4060 Mobile
@ -25,12 +26,7 @@ in {
hardware = { hardware = {
## Enable the Nvidia card, as well as Prime and Offload: ## Enable the Nvidia card, as well as Prime and Offload:
amdgpu.loadInInitrd = true; amdgpu.initrd.enable = lib.mkDefault true;
opengl.extraPackages = with pkgs; [
# Also in nvidia/default.nix
vaapiVdpau
libvdpau-va-gl
];
nvidia = { nvidia = {
modesetting.enable = true; modesetting.enable = true;

View file

@ -0,0 +1,11 @@
{ ... }: {
imports = [
../../common/cpu/intel
../../common/pc/laptop
../../common/pc/laptop/ssd
../../common/hidpi.nix
];
# Fixes the display being rotated 90 degrees.
boot.kernelParams =
[ "fbcon=rotate:1" "video=DSI-1:panel_orientation=right_side_up" ];
}

View file

@ -1,9 +1,15 @@
{ lib, pkgs, config, ... }: {
lib,
pkgs,
config,
...
}:
{ {
# Sets the kernel version to the latest kernel to make the usage of the iGPU possible if your kernel version is too old # Sets the kernel version to the latest kernel to make the usage of the iGPU possible if your kernel version is too old
# Disables scatter/gather which was introduced with kernel version 6.2 # Disables scatter/gather which was introduced with kernel version 6.2
# It produces completely white or flashing screens when enabled while using the iGPU of Ryzen 7000-series CPUs (Raphael) # It produces completely white or flashing screens when enabled while using the iGPU of Ryzen 7000-series CPUs (Raphael)
# This issue is not seen in kernel 6.6 or newer versions
imports = [ ../. ]; imports = [ ../. ];
@ -12,8 +18,9 @@
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
}) })
(lib.mkIf (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") { (lib.mkIf (
kernelParams = ["amdgpu.sg_display=0"]; (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2")
}) && (lib.versionOlder config.boot.kernelPackages.kernel.version "6.6")
) { kernelParams = [ "amdgpu.sg_display=0" ]; })
]; ];
} }

View file

@ -1,6 +1,4 @@
{ config, lib, ... }: { config, lib, ... }:
{ {
hardware.cpu.intel.updateMicrocode = hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View file

@ -0,0 +1,13 @@
{
lib,
...
}:
{
# Backward-compat for 24.05, can be removed after we drop 24.05 support
imports = lib.optionals (lib.versionOlder lib.version "24.11pre") [
(lib.mkAliasOptionModule [ "hardware" "graphics" "enable" ] [ "hardware" "opengl" "enable" ])
(lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages" ] [ "hardware" "opengl" "extraPackages" ])
(lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages32" ] [ "hardware" "opengl" "extraPackages32" ])
(lib.mkAliasOptionModule [ "hardware" "graphics" "enable32Bit" ] [ "hardware" "opengl" "driSupport32Bit" ])
];
}

View file

@ -1,46 +1,15 @@
{ config, lib, pkgs, ... }: { lib, ... }:
{ {
options.hardware.amdgpu.loadInInitrd = lib.mkEnableOption (lib.mdDoc imports = [ ../24.05-compat.nix ];
"loading `amdgpu` kernelModule at stage 1. (Add `amdgpu` to `boot.initrd.kernelModules`)" config = {
) // {
default = true;
};
options.hardware.amdgpu.amdvlk = lib.mkEnableOption (lib.mdDoc
"use amdvlk drivers instead mesa radv drivers"
);
options.hardware.amdgpu.opencl = lib.mkEnableOption (lib.mdDoc
"rocm opencl runtime (Install rocmPackages.clr and rocmPackages.clr.icd)"
) // {
default = true;
};
config = lib.mkMerge [
{
services.xserver.videoDrivers = lib.mkDefault [ "modesetting" ]; services.xserver.videoDrivers = lib.mkDefault [ "modesetting" ];
hardware.opengl = { hardware.graphics = {
driSupport = lib.mkDefault true; enable = lib.mkDefault true;
driSupport32Bit = lib.mkDefault true; enable32Bit = lib.mkDefault true;
}; };
}
(lib.mkIf config.hardware.amdgpu.loadInInitrd {
boot.initrd.kernelModules = [ "amdgpu" ];
})
(lib.mkIf config.hardware.amdgpu.amdvlk {
hardware.opengl.extraPackages = with pkgs; [
amdvlk
];
hardware.opengl.extraPackages32 = with pkgs; [ hardware.amdgpu.initrd.enable = lib.mkDefault true;
driversi686Linux.amdvlk };
];
})
(lib.mkIf config.hardware.amdgpu.opencl {
hardware.opengl.extraPackages =
if pkgs ? rocmPackages.clr
then with pkgs.rocmPackages; [ clr clr.icd ]
else with pkgs; [ rocm-opencl-icd rocm-opencl-runtime ];
})
];
} }

View file

@ -1,11 +0,0 @@
{
imports = [ ./intel ];
warnings = [
''
DEPRECATED: The <nixos-hardware/common/gpu/intel.nix> module has been deprecated.
Switch to using <nixos-hardware/common/gpu/intel> instead.
''
];
}

View file

@ -1,32 +1,63 @@
{ config, lib, pkgs, ... }:
{ {
options.hardware.intelgpu.loadInInitrd = lib.mkEnableOption (lib.mdDoc config,
"loading `i195` kernelModule at stage 1. (Add `i915` to `boot.initrd.kernelModules`)" lib,
) // { pkgs,
...
}:
{
imports = [ ../24.05-compat.nix ];
options.hardware.intelgpu.driver = lib.mkOption {
description = "Intel GPU driver to use";
type = lib.types.enum [
"i915"
"xe"
];
default = "i915";
};
options.hardware.intelgpu.loadInInitrd =
lib.mkEnableOption (
lib.mdDoc "Load the Intel GPU kernel module at stage 1 boot. (Added to `boot.initrd.kernelModules`)"
)
// {
default = true; default = true;
}; };
config = lib.mkMerge [ config = {
(lib.mkIf config.hardware.intelgpu.loadInInitrd { boot.initrd.kernelModules = [ config.hardware.intelgpu.driver ];
boot.initrd.kernelModules = [ "i915" ];
})
{
environment.variables = { environment.variables = {
VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkDefault "va_gl"); VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl");
}; };
hardware.opengl.extraPackages = with pkgs; [ hardware.graphics.extraPackages = with pkgs; [
(if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver) (
libvdpau-va-gl if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then
vaapiIntel
else
intel-vaapi-driver
)
intel-media-driver intel-media-driver
]; ];
hardware.opengl.extraPackages32 = with pkgs.driversi686Linux; [ hardware.graphics.extraPackages32 = with pkgs.driversi686Linux; [
(if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver) (
libvdpau-va-gl if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then
vaapiIntel
else
intel-vaapi-driver
)
intel-media-driver intel-media-driver
]; ];
assertions = [
{
assertion = (
config.hardware.intelgpu.driver != "xe"
|| lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.8"
);
message = "Intel Xe GPU driver is not supported on kernels earlier than 6.8. Update or use the i915 driver.";
} }
]; ];
};
} }

View file

@ -0,0 +1,12 @@
{ config, lib, ... }:
{
imports = [ ../. ];
config = lib.mkMerge [
(lib.mkIf (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.8") {
hardware.intelgpu.driver = "xe";
})
(lib.mkIf (config.hardware.intelgpu.driver == "i915") {
boot.kernelParams = [ "i915.enable_guc=3" ];
})
];
}

View file

@ -1,11 +0,0 @@
{
imports = [ ./nvidia/disable.nix ];
warnings = [
''
DEPRECATED: The <nixos-hardware/common/gpu/nvidia-disable.nix> module has been deprecated.
Switch to using <nixos-hardware/common/gpu/nvidia/disable.nix> instead.
''
];
}

View file

@ -1,12 +0,0 @@
{
imports = [ ./nvidia/prime.nix ];
warnings = [
''
DEPRECATED: The <nixos-hardware/common/gpu/nvidia.nix> module has been deprecated.
Switch to using <nixos-hardware/common/gpu/nvidia/prime.nix> instead if you use prime offloading.
If you are using this without prime, consider switching to <nixos-hardware/common/gpu/nvidia> instead.
''
];
}

View file

@ -1,8 +1,8 @@
{ lib, pkgs, ... }: { lib, ... }:
{ {
imports = [ ../24.05-compat.nix ];
services.xserver.videoDrivers = lib.mkDefault [ "nvidia" ]; services.xserver.videoDrivers = lib.mkDefault [ "nvidia" ];
hardware.opengl.extraPackages = with pkgs; [ # TODO: this will be a default after https://github.com/NixOS/nixpkgs/pull/326369
vaapiVdpau hardware.nvidia.modesetting.enable = lib.mkDefault true;
];
} }

View file

@ -1,12 +1,6 @@
{ lib, pkgs, ... }: { lib, pkgs, ... }:
let {
# This option is removed from NixOS 23.05 and up
nixosVersion = lib.versions.majorMinor lib.version;
config = if lib.versionOlder nixosVersion "23.05" then {
hardware.video.hidpi.enable = lib.mkDefault true;
} else {
# Just set the console font, don't mess with the font settings # Just set the console font, don't mess with the font settings
console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz"; console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz";
console.earlySetup = lib.mkDefault true; console.earlySetup = lib.mkDefault true;
}; }
in config

View file

@ -1 +1,9 @@
{} {
warnings = [
''
DEPRECATED: The <nixos-hardware/common/hdd.nix> module has been deprecated.
This module has no effect and will be removed in a future release.
''
];
}

View file

@ -1,8 +1,6 @@
{ lib, ... }: { lib, ... }:
{ {
imports = [ ../../hdd ];
# Hard disk protection if the laptop falls: # Hard disk protection if the laptop falls:
services.hdapsd.enable = lib.mkDefault true; services.hdapsd.enable = lib.mkDefault true;
} }

View file

@ -1,8 +1,7 @@
{ lib, ... }: { lib, ... }:
{ {
imports = [ imports = [
../../../common/cpu/intel ../../../common/gpu/intel/tiger-lake
../../../common/gpu/intel
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/ssd ../../../common/pc/ssd
]; ];
@ -14,8 +13,8 @@
services.thermald.enable = lib.mkDefault true; services.thermald.enable = lib.mkDefault true;
# Touchpad # Touchpad
services.xserver = { services.libinput.touchpad = {
libinput.touchpad.tapping = true; tapping = true;
libinput.touchpad.tappingDragLock = true; tappingDragLock = true;
}; };
} }

View file

@ -0,0 +1,19 @@
{ lib, ... }:
{
imports = [
../../../common/cpu/intel
../../../common/pc/laptop
../../../common/pc/laptop/ssd
];
boot.kernelParams = [
# See https://discourse.nixos.org/t/i915-driver-has-bug-for-iris-xe-graphics/25006/12
# jheidbrink reports that without this setting there is a very high lag in Sway which makes it unusable
"i915.enable_psr=0"
];
# Make the webcam work (needs Linux >= 6.6):
hardware.ipu6.enable = true;
hardware.ipu6.platform = "ipu6ep";
}

View file

@ -0,0 +1,7 @@
{
imports = [
../../../common/cpu/intel
../../../common/pc
../../../common/pc/ssd
];
}

View file

@ -1,12 +1,10 @@
{ {
config, config,
lib, lib,
pkgs,
inputs,
... ...
}: { }: {
imports = [ imports = [
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/laptop/ssd
../../../common/gpu/nvidia ../../../common/gpu/nvidia
@ -21,7 +19,12 @@
}; };
boot.kernelParams = ["i915.modeset=1"]; boot.kernelParams = ["i915.modeset=1"];
hardware.nvidia = { hardware = {
graphics = {
enable = lib.mkDefault true;
enable32Bit = lib.mkDefault true;
};
nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.legacy_390; package = config.boot.kernelPackages.nvidiaPackages.legacy_390;
nvidiaSettings = lib.mkDefault true; nvidiaSettings = lib.mkDefault true;
modesetting.enable = lib.mkDefault true; modesetting.enable = lib.mkDefault true;
@ -31,15 +34,11 @@
nvidiaBusId = "PCI:1:0:0"; nvidiaBusId = "PCI:1:0:0";
}; };
}; };
hardware.opengl = {
enable = lib.mkDefault true;
driSupport = lib.mkDefault true;
driSupport32Bit = lib.mkDefault true;
}; };
# Override the intel gpu driver setting imported above # Override the intel gpu driver setting imported above
environment.variables = { environment.variables = {
VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkOverride 990 "nvidia"); VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkOverride 990 "nvidia");
}; };
services.thermald.enable = lib.mkDefault true; services.thermald.enable = lib.mkDefault true;

View file

@ -1,6 +1,6 @@
{ {
imports = [ imports = [
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/pc/laptop ../../../common/pc/laptop
]; ];

View file

@ -2,7 +2,7 @@
{ {
imports = [ imports = [
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/acpi_call.nix ../../../common/pc/laptop/acpi_call.nix
]; ];

View file

@ -5,6 +5,11 @@
services.switcherooControl.enable = lib.mkDefault true; services.switcherooControl.enable = lib.mkDefault true;
hardware = { hardware = {
graphics = {
enable = lib.mkDefault true;
enable32Bit = lib.mkDefault true;
extraPackages = with pkgs; [ intel-media-driver intel-compute-runtime ];
};
nvidia = { nvidia = {
prime = { prime = {
# Bus ID of the Intel GPU. # Bus ID of the Intel GPU.
@ -20,10 +25,5 @@
finegrained = lib.mkDefault true; finegrained = lib.mkDefault true;
}; };
}; };
opengl = {
enable = lib.mkDefault true;
driSupport32Bit = lib.mkDefault true;
extraPackages = with pkgs; [ intel-media-driver intel-compute-runtime ];
};
}; };
} }

View file

@ -1,7 +1,7 @@
{ {
imports = [ imports = [
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/pc/laptop ../../../common/pc/laptop
./xps-common.nix ./xps-common.nix

View file

@ -1,7 +1,7 @@
{ {
imports = [ imports = [
../../../../common/cpu/intel ../../../../common/cpu/intel
../../../../common/cpu/intel/kaby-lake ../../../../common/gpu/intel/kaby-lake
../../../../common/pc/laptop ../../../../common/pc/laptop
../../../../common/gpu/nvidia/disable.nix ../../../../common/gpu/nvidia/disable.nix
../xps-common.nix ../xps-common.nix

View file

@ -2,7 +2,7 @@
{ {
imports = [ imports = [
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/pc/laptop ../../../common/pc/laptop
./xps-common.nix ./xps-common.nix
]; ];

View file

@ -2,7 +2,9 @@
description = "nixos-hardware"; description = "nixos-hardware";
outputs = _: { outputs = _: {
nixosModules = { 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;
in {
acer-aspire-4810t = import ./acer/aspire/4810t; acer-aspire-4810t = import ./acer/aspire/4810t;
airis-n990 = import ./airis/n990; airis-n990 = import ./airis/n990;
apple-macbook-air-3 = import ./apple/macbook-air/3; apple-macbook-air-3 = import ./apple/macbook-air/3;
@ -18,11 +20,13 @@
asus-battery = import ./asus/battery.nix; asus-battery = import ./asus/battery.nix;
asus-ally-rc71l = import ./asus/ally/rc71l; asus-ally-rc71l = import ./asus/ally/rc71l;
asus-fx504gd = import ./asus/fx504gd; asus-fx504gd = import ./asus/fx504gd;
asus-fx506hm = import ./asus/fx506hm;
asus-fa507nv = import ./asus/fa507nv; asus-fa507nv = import ./asus/fa507nv;
asus-fa507rm = import ./asus/fa507rm; asus-fa507rm = import ./asus/fa507rm;
asus-pro-ws-x570-ace = import ./asus/pro-ws-x570-ace; asus-pro-ws-x570-ace = import ./asus/pro-ws-x570-ace;
asus-rog-strix-g513im = import ./asus/rog-strix/g513im; asus-rog-strix-g513im = import ./asus/rog-strix/g513im;
asus-rog-strix-g733qs = import ./asus/rog-strix/g733qs; asus-rog-strix-g733qs = import ./asus/rog-strix/g733qs;
asus-zenbook-ux371 = import ./asus/zenbook/ux371;
asus-zephyrus-ga401 = import ./asus/zephyrus/ga401; asus-zephyrus-ga401 = import ./asus/zephyrus/ga401;
asus-zephyrus-ga402 = import ./asus/zephyrus/ga402; asus-zephyrus-ga402 = import ./asus/zephyrus/ga402;
asus-zephyrus-ga402x = import ./asus/zephyrus/ga402x; asus-zephyrus-ga402x = import ./asus/zephyrus/ga402x;
@ -30,6 +34,7 @@
asus-zephyrus-ga503 = import ./asus/zephyrus/ga503; asus-zephyrus-ga503 = import ./asus/zephyrus/ga503;
asus-zephyrus-gu603h = import ./asus/zephyrus/gu603h; asus-zephyrus-gu603h = import ./asus/zephyrus/gu603h;
beagleboard-pocketbeagle = import ./beagleboard/pocketbeagle; beagleboard-pocketbeagle = import ./beagleboard/pocketbeagle;
chuwi-minibook-x = import ./chuwi/minibook-x;
deciso-dec = import ./deciso/dec; deciso-dec = import ./deciso/dec;
dell-e7240 = import ./dell/e7240; dell-e7240 = import ./dell/e7240;
dell-g3-3779 = import ./dell/g3/3779; dell-g3-3779 = import ./dell/g3/3779;
@ -44,6 +49,8 @@
dell-latitude-7390 = import ./dell/latitude/7390; dell-latitude-7390 = import ./dell/latitude/7390;
dell-latitude-7430 = import ./dell/latitude/7430; dell-latitude-7430 = import ./dell/latitude/7430;
dell-latitude-7490 = import ./dell/latitude/7490; dell-latitude-7490 = import ./dell/latitude/7490;
dell-latitude-9430 = import ./dell/latitude/9430;
dell-optiplex-3050 = import ./dell/optiplex/3050;
dell-poweredge-r7515 = import ./dell/poweredge/r7515; dell-poweredge-r7515 = import ./dell/poweredge/r7515;
dell-precision-3541 = import ./dell/precision/3541; dell-precision-3541 = import ./dell/precision/3541;
dell-precision-5530 = import ./dell/precision/5530; dell-precision-5530 = import ./dell/precision/5530;
@ -85,6 +92,7 @@
friendlyarm-nanopc-t4 = import ./friendlyarm/nanopc-t4; friendlyarm-nanopc-t4 = import ./friendlyarm/nanopc-t4;
friendlyarm-nanopi-r5s = import ./friendlyarm/nanopi-r5s; friendlyarm-nanopi-r5s = import ./friendlyarm/nanopi-r5s;
focus-m2-gen1 = import ./focus/m2/gen1; focus-m2-gen1 = import ./focus/m2/gen1;
gigabyte-b550 = import ./gigabyte/b550;
google-pixelbook = import ./google/pixelbook; google-pixelbook = import ./google/pixelbook;
gpd-micropc = import ./gpd/micropc; gpd-micropc = import ./gpd/micropc;
gpd-p2-max = import ./gpd/p2-max; gpd-p2-max = import ./gpd/p2-max;
@ -96,13 +104,17 @@
hp-elitebook-845g7 = import ./hp/elitebook/845/g7; hp-elitebook-845g7 = import ./hp/elitebook/845/g7;
hp-elitebook-845g8 = import ./hp/elitebook/845/g8; hp-elitebook-845g8 = import ./hp/elitebook/845/g8;
hp-elitebook-845g9 = import ./hp/elitebook/845/g9; hp-elitebook-845g9 = import ./hp/elitebook/845/g9;
huawei-machc-wa = import ./huawei/machc-wa;
hp-notebook-14-df0023 = import ./hp/notebook/14-df0023; hp-notebook-14-df0023 = import ./hp/notebook/14-df0023;
intel-nuc-8i7beh = import ./intel/nuc/8i7beh; intel-nuc-8i7beh = import ./intel/nuc/8i7beh;
lenovo-ideapad-15alc6 = import ./lenovo/ideapad/15alc6;
lenovo-ideapad-15arh05 = import ./lenovo/ideapad/15arh05; lenovo-ideapad-15arh05 = import ./lenovo/ideapad/15arh05;
lenovo-ideapad-16ach6 = import ./lenovo/ideapad/16ach6;
lenovo-ideapad-z510 = import ./lenovo/ideapad/z510; lenovo-ideapad-z510 = import ./lenovo/ideapad/z510;
lenovo-ideapad-slim-5 = import ./lenovo/ideapad/slim-5; lenovo-ideapad-slim-5 = import ./lenovo/ideapad/slim-5;
lenovo-ideapad-s145-15api = import ./lenovo/ideapad/s145-15api; lenovo-ideapad-s145-15api = import ./lenovo/ideapad/s145-15api;
lenovo-legion-15ach6 = import ./lenovo/legion/15ach6; lenovo-legion-15ach6 = import ./lenovo/legion/15ach6;
lenovo-legion-15ach6h = import ./lenovo/legion/15ach6h;
lenovo-legion-15arh05h = import ./lenovo/legion/15arh05h; lenovo-legion-15arh05h = import ./lenovo/legion/15arh05h;
lenovo-legion-16ach6h = import ./lenovo/legion/16ach6h; lenovo-legion-16ach6h = import ./lenovo/legion/16ach6h;
lenovo-legion-16ach6h-hybrid = import ./lenovo/legion/16ach6h/hybrid; lenovo-legion-16ach6h-hybrid = import ./lenovo/legion/16ach6h/hybrid;
@ -144,6 +156,7 @@
lenovo-thinkpad-t14-amd-gen4 = import ./lenovo/thinkpad/t14/amd/gen4; lenovo-thinkpad-t14-amd-gen4 = import ./lenovo/thinkpad/t14/amd/gen4;
lenovo-thinkpad-t14s = import ./lenovo/thinkpad/t14s; lenovo-thinkpad-t14s = import ./lenovo/thinkpad/t14s;
lenovo-thinkpad-t14s-amd-gen1 = import ./lenovo/thinkpad/t14s/amd/gen1; lenovo-thinkpad-t14s-amd-gen1 = import ./lenovo/thinkpad/t14s/amd/gen1;
lenovo-thinkpad-t14s-amd-gen4 = import ./lenovo/thinkpad/t14s/amd/gen4;
lenovo-thinkpad-t410 = import ./lenovo/thinkpad/t410; lenovo-thinkpad-t410 = import ./lenovo/thinkpad/t410;
lenovo-thinkpad-t420 = import ./lenovo/thinkpad/t420; lenovo-thinkpad-t420 = import ./lenovo/thinkpad/t420;
lenovo-thinkpad-t430 = import ./lenovo/thinkpad/t430; lenovo-thinkpad-t430 = import ./lenovo/thinkpad/t430;
@ -229,6 +242,7 @@
purism-librem-15v3 = import ./purism/librem/15v3; purism-librem-15v3 = import ./purism/librem/15v3;
purism-librem-5r4 = import ./purism/librem/5r4; purism-librem-5r4 = import ./purism/librem/5r4;
raspberry-pi-2 = import ./raspberry-pi/2; raspberry-pi-2 = import ./raspberry-pi/2;
raspberry-pi-3 = import ./raspberry-pi/3;
raspberry-pi-4 = import ./raspberry-pi/4; raspberry-pi-4 = import ./raspberry-pi/4;
raspberry-pi-5 = import ./raspberry-pi/5; raspberry-pi-5 = import ./raspberry-pi/5;
kobol-helios4 = import ./kobol/helios4; kobol-helios4 = import ./kobol/helios4;
@ -241,6 +255,7 @@
supermicro-x10sll-f = import ./supermicro/x10sll-f; supermicro-x10sll-f = import ./supermicro/x10sll-f;
supermicro-x12scz-tln4f = import ./supermicro/x12scz-tln4f; supermicro-x12scz-tln4f = import ./supermicro/x12scz-tln4f;
system76 = import ./system76; system76 = import ./system76;
system76-gaze18 = import ./system76/gaze18;
system76-darp6 = import ./system76/darp6; system76-darp6 = import ./system76/darp6;
toshiba-swanky = import ./toshiba/swanky; toshiba-swanky = import ./toshiba/swanky;
tuxedo-infinitybook-v4 = import ./tuxedo/infinitybook/v4; tuxedo-infinitybook-v4 = import ./tuxedo/infinitybook/v4;
@ -253,10 +268,10 @@
common-cpu-amd-zenpower = import ./common/cpu/amd/zenpower.nix; common-cpu-amd-zenpower = import ./common/cpu/amd/zenpower.nix;
common-cpu-amd-raphael-igpu = import ./common/cpu/amd/raphael/igpu.nix; common-cpu-amd-raphael-igpu = import ./common/cpu/amd/raphael/igpu.nix;
common-cpu-intel = import ./common/cpu/intel; common-cpu-intel = import ./common/cpu/intel;
common-cpu-intel-comet-lake = import ./common/cpu/intel/comet-lake; common-gpu-intel-comet-lake = deprecated "992" "common-gpu-intel-comet-lake" (import ./common/gpu/intel/comet-lake);
common-cpu-intel-cpu-only = import ./common/cpu/intel/cpu-only.nix; common-cpu-intel-cpu-only = import ./common/cpu/intel/cpu-only.nix;
common-cpu-intel-kaby-lake = import ./common/cpu/intel/kaby-lake; common-gpu-intel-kaby-lake = deprecated "992" "common-gpu-intel-kaby-lake" (import ./common/gpu/intel/kaby-lake);
common-cpu-intel-sandy-bridge = import ./common/cpu/intel/sandy-bridge; common-gpu-intel-sandy-bridge = deprecated "992" "common-gpu-intel-sandy-bridge" (import ./common/gpu/intel/sandy-bridge);
common-gpu-amd = import ./common/gpu/amd; common-gpu-amd = import ./common/gpu/amd;
common-gpu-amd-sea-islands = import ./common/gpu/amd/sea-islands; common-gpu-amd-sea-islands = import ./common/gpu/amd/sea-islands;
common-gpu-amd-southern-islands = import ./common/gpu/amd/southern-islands; common-gpu-amd-southern-islands = import ./common/gpu/amd/southern-islands;

View file

@ -18,10 +18,9 @@
boot.blacklistedKernelModules = [ "i2c_nvidia_gpu" ]; boot.blacklistedKernelModules = [ "i2c_nvidia_gpu" ];
hardware.nvidia.modesetting.enable = lib.mkDefault true; hardware.nvidia.modesetting.enable = lib.mkDefault true;
hardware.opengl = { hardware.graphics = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
driSupport = lib.mkDefault true; enable32Bit = lib.mkDefault true;
driSupport32Bit = lib.mkDefault true;
}; };
hardware.nvidia.prime = { hardware.nvidia.prime = {

View file

@ -2,6 +2,7 @@
imports = [ imports = [
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/laptop/ssd
../../kmod.nix
../../framework-tool.nix ../../framework-tool.nix
]; ];

View file

@ -13,12 +13,38 @@ First put enable `fwupd`
services.fwupd.enable = true; services.fwupd.enable = true;
``` ```
> [!Note]
> For Intel CPU's, even [stable BIOS versions](https://community.frame.work/t/responded-11th-gen-intel-core-bios-3-17-release/25137#update-april-11-2023-2) are currently marked as [test versions](https://fwupd.org/lvfs/devices/work.frame.Laptop.TGL.BIOS.firmware) in LVFS (the default remote fwupd uses to get firmware).
>
> If you want to use these versions, you'll have to [explicitly enable the lvfs-testing remote](https://community.frame.work/t/responded-11th-gen-intel-core-bios-3-17-release/25137#linuxlvfs-7):
>
> ```nix
> services.fwupd.extraRemotes = [ "lvfs-testing" ];
> # Might be necessary once to make the update succeed
> services.fwupd.uefiCapsuleSettings.DisableCapsuleUpdateOnDisk = true;
> ```
> [!Caution]
> Before running the update, make sure you have a [NixOS live ISO](https://nixos.org/download/#nixos-iso) on a USB stick, because some firmware updates [make your system unbootable](https://community.frame.work/t/drive-not-bootable-after-bios-update/12887).
Then run Then run
```sh ```sh
$ fwupdmgr update $ fwupdmgr update
``` ```
If you cannot boot into your system after upgrading:
1. Boot into the live USB
2. Mount your system into `/mnt`
3. Run
```
sudo nixos-enter
```
4. Run
```
NIXOS_INSTALL_BOOTLOADER=1 /run/current-system/bin/switch-to-configuration boot
```
## Common Modules ## Common Modules
For the Framework 13 laptops, there are common configuration modules available under the `13-inch/common/` directory, For the Framework 13 laptops, there are common configuration modules available under the `13-inch/common/` directory,

View file

@ -26,7 +26,7 @@
}; };
serviceConfig = { serviceConfig = {
User = "root"; User = "root";
ExecStart = "-${pkgs.bash}/bin/bash -c 'if grep 'GPP8' /proc/acpi/wakeup | grep -q 'enabled'; then echo 'GPP8' > /proc/acpi/wakeup; fi''"; ExecStart = "-${pkgs.bash}/bin/bash -c 'if grep 'GPP8' /proc/acpi/wakeup | grep -q 'enabled'; then echo 'GPP8' > /proc/acpi/wakeup; fi'";
RemainAfterExit = "yes"; RemainAfterExit = "yes";
}; };
wantedBy = ["multi-user.target"]; wantedBy = ["multi-user.target"];

View file

@ -4,6 +4,6 @@
imports = [ imports = [
../../common/pc/laptop ../../common/pc/laptop
../../common/pc/laptop/ssd ../../common/pc/laptop/ssd
../../common/cpu/intel/kaby-lake ../../common/gpu/intel/kaby-lake
]; ];
} }

View file

@ -3,7 +3,7 @@
../../common/pc/laptop ../../common/pc/laptop
../../common/pc/laptop/ssd ../../common/pc/laptop/ssd
../../common/cpu/intel ../../common/cpu/intel
../../common/cpu/intel/kaby-lake ../../common/gpu/intel/kaby-lake
../../common/hidpi.nix ../../common/hidpi.nix
]; ];
} }

View file

@ -6,6 +6,7 @@ in
../../common/pc/laptop ../../common/pc/laptop
../../common/pc/laptop/ssd ../../common/pc/laptop/ssd
../../common/hidpi.nix ../../common/hidpi.nix
../../common/gpu/24.05-compat.nix
]; ];
# Necessary kernel modules # Necessary kernel modules
@ -14,7 +15,7 @@ in
# GPU is an Intel Iris Xe, on a “TigerLake” mobile CPU # GPU is an Intel Iris Xe, on a “TigerLake” mobile CPU
boot.initrd.kernelModules = [ "i915" ]; # Early loading so the passphrase prompt appears on external displays boot.initrd.kernelModules = [ "i915" ]; # Early loading so the passphrase prompt appears on external displays
services.xserver.videoDrivers = [ "intel" ]; services.xserver.videoDrivers = [ "intel" ];
hardware.opengl.extraPackages = with pkgs; [ hardware.graphics.extraPackages = with pkgs; [
intel-media-driver intel-media-driver
(if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver) (if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver)
]; ];

View file

@ -1,5 +1,5 @@
{ {
imports = [ imports = [
../../common/cpu/intel/jasper-lake ../../common/gpu/intel/jasper-lake
]; ];
} }

View file

@ -3,11 +3,10 @@ with lib;
{ {
imports = [ imports = [
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/cpu/intel/sandy-bridge ../../../common/gpu/intel/sandy-bridge
../../../common/pc ../../../common/pc
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/hdd ../../../common/pc/laptop/hdd
../../../common/pc/hdd
./network.nix ./network.nix
]; ];

View file

@ -3,11 +3,10 @@ with lib;
{ {
imports = [ imports = [
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/cpu/intel/sandy-bridge ../../../common/gpu/intel/sandy-bridge
../../../common/pc ../../../common/pc
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/hdd ../../../common/pc/laptop/hdd
../../../common/pc/hdd
]; ];
config = { config = {

View file

@ -0,0 +1,3 @@
# Huawei Matebook X Pro (2020)
This is a very standard device that needs little configuration. The module mainly imports the common modules for its CPU, GPU, SSD etc. and enables ppd for power management. Nvidia prime offload is also enabled. This configuration should work with all Matebook X Pro models from 2020 (MACHC-WA*) other than MACHC-WAH9L as it does not contain the Nvidia GPU.

View file

@ -0,0 +1,28 @@
{
lib,
pkgs,
config,
...
}: {
imports = [
../../common/cpu/intel
../../common/gpu/intel/comet-lake
../../common/gpu/nvidia
../../common/gpu/nvidia/prime.nix
../../common/hidpi.nix
../../common/pc/laptop
../../common/pc/ssd
];
hardware.nvidia = {
modesetting.enable = lib.mkDefault true;
open = lib.mkDefault false;
nvidiaSettings = lib.mkDefault true;
prime = {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
};
};
services.power-profiles-daemon.enable = lib.mkDefault true;
}

View file

@ -0,0 +1,11 @@
{ lib, ... }:
{
imports = [
../../../common/cpu/amd
../../../common/gpu/amd
../../../common/pc/laptop
../../../common/pc/laptop/acpi_call.nix
../../../common/pc/laptop/ssd
];
}

View file

@ -0,0 +1,41 @@
# Lenovo IdeaPad 5 Pro 16ACH6
This laptop comes with an AMD CPU+GPU and dedicated NVIDIA graphics. Unlike the similarly named [Legion 5 Pro 16ACH6*H*](../../legion/16ach6h/), there is no direct dedicated graphics setting.
The `nvidia.hardware.powerManagement.enable` option is not enabled in this configuration, since it seemed to cause issues when waking up from suspend, while also not providing much in terms of power saving. I've tested with `finegrained` both enabled and disabled, and it caused the screen to go dark a few moments after waking up from suspend. Most times this only happened once and the screen came back after a few moments, but on some occasions it kept occurring repeatedly.
This device also has a "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):
```nix
services.power-profiles-daemon.enable = false;
services.tlp.enable = true;
services.tlp.settings = {
# Enable battery conservation mode
# Run `sudo tlp fullcharge` to enable a full charge until next reboot,
# and `sudo tlp setcharge` to reset to conservation mode.
START_CHARGE_THRESH_BAT0 = 0;
STOP_CHARGE_THRESH_BAT0 = 1;
};
```
## Device information
Details from `tlp-stat`:
```
System = LENOVO IdeaPad 5 Pro 16ACH6 82L5
BIOS = GSCN35WW
EC Firmware = 1.35
OS Release = NixOS 23.11 (Tapir)
Kernel = 6.6.10 #1-NixOS SMP PREEMPT_DYNAMIC Fri Jan 5 14:19:45 UTC 2024 x86_64
Init system = systemd
Boot mode = UEFI
Suspend mode = [s2idle]
```
`lspci` output:
```
01:00.0 3D controller: NVIDIA Corporation GA107M [GeForce RTX 3050 Mobile] (rev a1)
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c4)
```

View file

@ -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:5:0:0";
nvidiaBusId = "PCI:1:0:0";
};
};
}

View file

@ -20,7 +20,7 @@
services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.videoDrivers = [ "nvidia" ];
hardware = { hardware = {
amdgpu.loadInInitrd = lib.mkDefault false; amdgpu.initrd.enable = false;
nvidia = { nvidia = {
modesetting.enable = lib.mkDefault true; modesetting.enable = lib.mkDefault true;

View file

@ -1,4 +1,4 @@
{ ... }: { lib, options, ... }:
{ {
imports = [ ../hybrid ]; imports = [ ../hybrid ];
@ -9,18 +9,11 @@
# because when writing the specialization of Dual-Direct GFX, I did not completely # because when writing the specialization of Dual-Direct GFX, I did not completely
# remove all packages for amd igpu. I only removed amdgpu from # remove all packages for amd igpu. I only removed amdgpu from
# services.xserver.videoDrivers by overriding. This is because the specialization # services.xserver.videoDrivers by overriding. This is because the specialization
# of nix cannot implement such an operation as canceling an import. In the end, if # of nix cannot implement such an operation as canceling an import.
# it is enabled in Dual-Direct GFX In the absence of amd igpu, the amdvlk package
# caused the proton to crash. In order to solve this problem, I add the option of
# whether to enable amdvlk to the configuration file of amd gpu, and open it by
# default, and turn it off in specialization, so as to delete amdvlk package and
# other packages for amd igpu in specialization. At the same time, I also added an
# option to amdgpu's opencl runtime.
hardware = { hardware = {
nvidia.prime.offload.enable = false; nvidia.prime.offload.enable = false;
amdgpu = { } // lib.optionalAttrs (options ? amdgpu.opencl.enable) {
amdvlk = false; # introduced in https://github.com/NixOS/nixpkgs/pull/319865
opencl = false; amdgpu.opencl.enable = lib.mkDefault false;
};
}; };
} }

View file

@ -4,6 +4,7 @@
imports = [ imports = [
../../../../common/cpu/amd ../../../../common/cpu/amd
../../../../common/cpu/amd/pstate.nix ../../../../common/cpu/amd/pstate.nix
../../../../common/cpu/amd/zenpower.nix
../../../../common/gpu/amd ../../../../common/gpu/amd
../../../../common/gpu/nvidia/prime.nix ../../../../common/gpu/nvidia/prime.nix
../../../../common/pc/laptop ../../../../common/pc/laptop
@ -21,7 +22,7 @@
services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.videoDrivers = [ "nvidia" ];
hardware = { hardware = {
amdgpu.loadInInitrd = lib.mkDefault false; amdgpu.initrd.enable = false;
nvidia = { nvidia = {
modesetting.enable = lib.mkDefault true; modesetting.enable = lib.mkDefault true;

View file

@ -1,4 +1,4 @@
{ ... }: { lib, options, ... }:
{ {
imports = [ ../hybrid ]; imports = [ ../hybrid ];
@ -9,18 +9,11 @@
# because when writing the specialization of Dual-Direct GFX, I did not completely # because when writing the specialization of Dual-Direct GFX, I did not completely
# remove all packages for amd igpu. I only removed amdgpu from # remove all packages for amd igpu. I only removed amdgpu from
# services.xserver.videoDrivers by overriding. This is because the specialization # services.xserver.videoDrivers by overriding. This is because the specialization
# of nix cannot implement such an operation as canceling an import. In the end, if # of nix cannot implement such an operation as canceling an import.
# it is enabled in Dual-Direct GFX In the absence of amd igpu, the amdvlk package
# caused the proton to crash. In order to solve this problem, I add the option of
# whether to enable amdvlk to the configuration file of amd gpu, and open it by
# default, and turn it off in specialization, so as to delete amdvlk package and
# other packages for amd igpu in specialization. At the same time, I also added an
# option to amdgpu's opencl runtime.
hardware = { hardware = {
nvidia.prime.offload.enable = false; nvidia.prime.offload.enable = false;
amdgpu = { } // lib.optionalAttrs (options ? amdgpu.opencl.enable) {
amdvlk = false; # introduced in https://github.com/NixOS/nixpkgs/pull/319865
opencl = false; amdgpu.opencl.enable = lib.mkDefault false;
};
}; };
} }

View file

@ -1,13 +1,12 @@
{ ... }: { lib, options, ... }:
{ {
imports = [ ../hybrid ]; imports = [ ../hybrid ];
services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.videoDrivers = [ "nvidia" ];
hardware = { hardware = {
nvidia.prime.offload.enable = false; nvidia.prime.offload.enable = false;
amdgpu = { } // lib.optionalAttrs (options ? amdgpu.opencl.enable) {
amdvlk = false; # introduced in https://github.com/NixOS/nixpkgs/pull/319865
opencl = false; amdgpu.opencl.enable = lib.mkDefault false;
};
}; };
} }

View file

@ -3,7 +3,7 @@
{ {
imports = [ imports = [
../. ../.
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
]; ];

View file

@ -2,7 +2,7 @@
{ {
imports = [ imports = [
../. ../.
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/pc/laptop/ssd ../../../common/pc/laptop/ssd
]; ];

View file

@ -1,13 +1,21 @@
{ lib, ... }: { lib, ... }:
{ {
hardware.nvidia.modesetting.enable = true; imports = [
hardware.opengl.driSupport32Bit = true; ../../../../common/gpu/24.05-compat.nix
hardware.opengl.enable = true; ];
hardware = {
hardware.nvidia.prime = { graphics = {
enable = lib.mkDefault true;
enable32Bit = lib.mkDefault true;
};
nvidia = {
modesetting.enable = lib.mkDefault true;
prime = {
# Bus ID of the Intel GPU. # Bus ID of the Intel GPU.
intelBusId = lib.mkDefault "PCI:0:2:0"; intelBusId = lib.mkDefault "PCI:0:2:0";
# Bus ID of the NVIDIA GPU. # Bus ID of the NVIDIA GPU.
nvidiaBusId = lib.mkDefault "PCI:1:0:0"; nvidiaBusId = lib.mkDefault "PCI:1:0:0";
}; };
};
};
} }

View file

@ -13,12 +13,6 @@
nvidiaBusId = lib.mkDefault "PCI:1:0:0"; nvidiaBusId = lib.mkDefault "PCI:1:0:0";
}; };
}; };
# is this too much? It's convenient for Steam.
opengl = {
driSupport = lib.mkDefault true;
driSupport32Bit = lib.mkDefault true;
};
}; };
# required to make wireless work # required to make wireless work

View file

@ -1,25 +1,25 @@
{ config, lib, ... }: { { config, lib, ... }: {
imports = [ imports = [
../../../common/gpu/24.05-compat.nix
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/pc/laptop/acpi_call.nix ../../../common/pc/laptop/acpi_call.nix
../. ../.
]; ];
hardware = { hardware = {
graphics = {
enable = lib.mkDefault true;
enable32Bit = lib.mkDefault true;
};
nvidia = { nvidia = {
prime = { prime = {
intelBusId = lib.mkDefault "PCI:0:2:0"; intelBusId = lib.mkDefault "PCI:0:2:0";
nvidiaBusId = lib.mkDefault "PCI:1:0:0"; nvidiaBusId = lib.mkDefault "PCI:1:0:0";
}; };
}; };
# is this too much? It's convenient for Steam.
opengl = {
driSupport = lib.mkDefault true;
driSupport32Bit = lib.mkDefault true;
};
}; };
# required to make wireless work # required to make wireless work

View file

@ -1,5 +1,6 @@
{ lib, config, ... }: { { lib, config, ... }: {
imports = [ imports = [
../../../common/gpu/24.05-compat.nix
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/pc/laptop/acpi_call.nix ../../../common/pc/laptop/acpi_call.nix
@ -7,18 +8,18 @@
]; ];
hardware = { hardware = {
# is this too much? It's convenient for Steam.
graphics = {
enable = lib.mkDefault true;
enable32Bit = lib.mkDefault true;
};
nvidia = { nvidia = {
prime = { prime = {
intelBusId = lib.mkDefault "PCI:0:2:0"; intelBusId = lib.mkDefault "PCI:0:2:0";
nvidiaBusId = lib.mkDefault "PCI:1:0:0"; nvidiaBusId = lib.mkDefault "PCI:1:0:0";
}; };
}; };
# is this too much? It's convenient for Steam.
opengl = {
driSupport = lib.mkDefault true;
driSupport32Bit = lib.mkDefault true;
};
}; };
# required to make wireless work # required to make wireless work

View file

@ -0,0 +1,9 @@
{ lib, pkgs, ... }:
{
imports = [
../.
];
# Fix laptop not properly powering off during shutdown.
boot.kernelParams = [ "apm=power_off" ];
}

View file

@ -2,7 +2,7 @@
imports = [ imports = [
../. ../.
../tp-smapi.nix ../tp-smapi.nix
../../../common/cpu/intel/sandy-bridge ../../../common/gpu/intel/sandy-bridge
../../../common/pc/laptop/acpi_call.nix ../../../common/pc/laptop/acpi_call.nix
]; ];
} }

View file

@ -2,7 +2,7 @@
imports = [ imports = [
../. ../.
../tp-smapi.nix ../tp-smapi.nix
../../../common/cpu/intel/sandy-bridge ../../../common/gpu/intel/sandy-bridge
../../../common/pc/laptop/acpi_call.nix ../../../common/pc/laptop/acpi_call.nix
]; ];
} }

View file

@ -2,7 +2,7 @@
imports = [ imports = [
../. ../.
../tp-smapi.nix ../tp-smapi.nix
../../../common/cpu/intel/sandy-bridge ../../../common/gpu/intel/sandy-bridge
../../../common/pc/laptop/acpi_call.nix ../../../common/pc/laptop/acpi_call.nix
]; ];
} }

View file

@ -1,7 +1,7 @@
{ {
imports = [ imports = [
../. ../.
../../../common/cpu/intel/sandy-bridge ../../../common/gpu/intel/sandy-bridge
../../../common/pc/laptop/hdd # TODO: reverse compat ../../../common/pc/laptop/hdd # TODO: reverse compat
../tp-smapi.nix ../tp-smapi.nix
]; ];

View file

@ -7,14 +7,12 @@
]; ];
boot.initrd.kernelModules = [ "ideapad_laptop" ]; boot.initrd.kernelModules = [ "ideapad_laptop" ];
hardware.opengl.extraPackages = with pkgs; [
vaapiVdpau
libvdpau-va-gl
];
# latest kernel needed to make wifi work # latest kernel needed to make wifi work
boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.16") pkgs.linuxPackages_latest; boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.16") pkgs.linuxPackages_latest;
# energy savings # energy savings
boot.kernelParams = ["mem_sleep_default=deep" "pcie_aspm.policy=powersupersave"]; boot.kernelParams = ["mem_sleep_default=deep" "pcie_aspm.policy=powersupersave"];
hardware.bluetooth.enable = true;
} }

View file

@ -1,23 +1,4 @@
# Including this file will enable the AMD-GPU driver # Including this file will enable the AMD-GPU driver (in shared.nix)
{
{ lib, pkgs, ... }: imports = [ ../shared.nix ];
let
inherit (lib) mkDefault;
in {
imports = [
../shared.nix
];
# AMD RX680
services.xserver.videoDrivers = mkDefault [ "amdgpu" ];
hardware = {
amdgpu.loadInInitrd = true;
opengl.extraPackages = with pkgs; [
vaapiVdpau
libvdpau-va-gl
];
};
} }

View file

@ -18,11 +18,7 @@ in {
hardware = { hardware = {
## Enable the Nvidia card, as well as Prime and Offload: ## Enable the Nvidia card, as well as Prime and Offload:
amdgpu.loadInInitrd = true; amdgpu.initrd.enable = true;
opengl.extraPackages = with pkgs; [
vaapiVdpau
libvdpau-va-gl
];
nvidia = { nvidia = {
modesetting.enable = true; modesetting.enable = true;

View file

@ -6,8 +6,6 @@ let
in { in {
imports = [ imports = [
./kernel ./kernel
./ipts
./surface-control
]; ];
microsoft-surface.kernelVersion = mkDefault "6.6"; microsoft-surface.kernelVersion = mkDefault "6.6";

View file

@ -1,48 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkDefault mkEnableOption mkIf mkMerge mkOption types;
cfg = config.microsoft-surface.ipts;
iptsConfFile = pkgs.writeTextFile {
name = "iptsd.conf";
text = lib.generators.toINI { } cfg.config;
};
in
{
options.microsoft-surface.ipts = {
enable = mkEnableOption "Enable IPTSd for Microsoft Surface";
config = mkOption {
type = types.attrs;
default = { };
description = ''
Values to wrote to iptsd.conf, first key is section, second key is property.
See the example config; https://github.com/linux-surface/iptsd/blob/v1.4.0/etc/iptsd.conf
'';
example = ''
DFT = {
ButtonMinMag = 1000;
};
'';
};
};
config = mkMerge [
{
microsoft-surface.ipts.enable = mkDefault false;
}
(mkIf cfg.enable {
systemd.services.iptsd = {
description = "IPTSD";
path = with pkgs; [ iptsd ];
script = "iptsd $(iptsd-find-hidraw)";
wantedBy = [ "multi-user.target" ];
};
environment.etc."iptsd/iptsd.conf".source = "${iptsConfFile}";
})
];
}

View file

@ -5,7 +5,7 @@ let
in { in {
imports = [ imports = [
./linux-6.8.x ./linux-6.9.x
]; ];
options.microsoft-surface.kernelVersion = mkOption { options.microsoft-surface.kernelVersion = mkOption {

View file

@ -7,14 +7,14 @@ let
cfg = config.microsoft-surface; cfg = config.microsoft-surface;
version = "6.8.9"; version = "6.9.3";
kernelPatches = surfacePatches { kernelPatches = surfacePatches {
inherit version; inherit version;
patchFn = ./patches.nix; patchFn = ./patches.nix;
}; };
kernelPackages = linuxPackage { kernelPackages = linuxPackage {
inherit version kernelPatches; inherit version kernelPatches;
sha256 = "sha256-+QXxI46nqOhTFLrPKDMC6AlwBgENJfzqcm0N4OpbybY="; sha256 = "1bnzxparybwh320019pr2msaapas41dhjmvg4gy791rn05jc88f3";
ignoreConfigErrors=true; ignoreConfigErrors=true;
}; };

View file

@ -86,59 +86,63 @@
}; };
} }
{ {
name = "ms-surface/0001-surface3-oemb"; name = "ms-surface/0001-secureboot";
patch = patchSrc + "/0001-surface3-oemb.patch"; patch = patchSrc + "/0001-secureboot.patch";
} }
{ {
name = "ms-surface/0002-mwifiex"; name = "ms-surface/0002-surface3-oemb";
patch = patchSrc + "/0002-mwifiex.patch"; patch = patchSrc + "/0002-surface3-oemb.patch";
} }
{ {
name = "ms-surface/0003-ath10k"; name = "ms-surface/0003-mwifiex";
patch = patchSrc + "/0003-ath10k.patch"; patch = patchSrc + "/0003-mwifiex.patch";
} }
{ {
name = "ms-surface/0004-ipts"; name = "ms-surface/0004-ath10k";
patch = patchSrc + "/0004-ipts.patch"; patch = patchSrc + "/0004-ath10k.patch";
} }
{ {
name = "ms-surface/0005-ithc"; name = "ms-surface/0005-ipts";
patch = patchSrc + "/0005-ithc.patch"; patch = patchSrc + "/0005-ipts.patch";
} }
{ {
name = "ms-surface/0006-surface-sam"; name = "ms-surface/0006-ithc";
patch = patchSrc + "/0006-surface-sam.patch"; patch = patchSrc + "/0006-ithc.patch";
} }
{ {
name = "ms-surface/0007-surface-sam-over-hid"; name = "ms-surface/0007-surface-sam";
patch = patchSrc + "/0007-surface-sam-over-hid.patch"; patch = patchSrc + "/0007-surface-sam.patch";
} }
{ {
name = "ms-surface/0008-surface-button"; name = "ms-surface/0008-surface-sam-over-hid";
patch = patchSrc + "/0008-surface-button.patch"; patch = patchSrc + "/0008-surface-sam-over-hid.patch";
} }
{ {
name = "ms-surface/0009-surface-typecover"; name = "ms-surface/0009-surface-button";
patch = patchSrc + "/0009-surface-typecover.patch"; patch = patchSrc + "/0009-surface-button.patch";
} }
{ {
name = "ms-surface/0010-surface-shutdown"; name = "ms-surface/0010-surface-typecover";
patch = patchSrc + "/0010-surface-shutdown.patch"; patch = patchSrc + "/0010-surface-typecover.patch";
} }
{ {
name = "ms-surface/0011-surface-gpe"; name = "ms-surface/0011-surface-shutdown";
patch = patchSrc + "/0011-surface-gpe.patch"; patch = patchSrc + "/0011-surface-shutdown.patch";
} }
{ {
name = "ms-surface/0012-cameras"; name = "ms-surface/0012-surface-gpe";
patch = patchSrc + "/0012-cameras.patch"; patch = patchSrc + "/0012-surface-gpe.patch";
} }
{ {
name = "ms-surface/0013-amd-gpio"; name = "ms-surface/0013-cameras";
patch = patchSrc + "/0013-amd-gpio.patch"; patch = patchSrc + "/0013-cameras.patch";
} }
{ {
name = "ms-surface/0014-rtc"; name = "ms-surface/0014-amd-gpio";
patch = patchSrc + "/0014-rtc.patch"; patch = patchSrc + "/0014-amd-gpio.patch";
}
{
name = "ms-surface/0015-rtc";
patch = patchSrc + "/0015-rtc.patch";
} }
] ]

View file

@ -4,8 +4,8 @@
linux-surface = fetchFromGitHub { linux-surface = fetchFromGitHub {
owner = "linux-surface"; owner = "linux-surface";
repo = "linux-surface"; repo = "linux-surface";
rev = "arch-6.8.6-1"; rev = "arch-6.9.3-1";
hash = "sha256-kLnHcYFeQ7/8lbSL4p9D2aC4V/Ib1tU225UOkRcNnH4="; hash = "sha256-HoG7MuWAtiTAX9CJeqCGrfkfoue7XLtSMF6zjx4z7i8=";
}; };
# This is the owner and repo for the pre-patched kernel from the "linux-surface" project: # This is the owner and repo for the pre-patched kernel from the "linux-surface" project:

View file

@ -1,25 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkDefault mkEnableOption mkIf mkMerge;
cfg = config.microsoft-surface.surface-control;
in {
options.microsoft-surface.surface-control = {
enable = mkEnableOption "Enable 'surface-control' for Microsoft Surface";
};
config = mkMerge [
{
microsoft-surface.surface-control.enable = mkDefault false;
}
(mkIf cfg.enable {
environment.systemPackages = with pkgs; [ surface-control ];
services.udev.packages = with pkgs; [ surface-control];
users.groups.surface-control = { };
})
];
}

View file

@ -14,7 +14,7 @@ in {
../../../common/pc/ssd ../../../common/pc/ssd
# The Intel CPU module auto-includes Intel's GPU: # The Intel CPU module auto-includes Intel's GPU:
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/cpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
]; ];
boot.kernelParams = [ boot.kernelParams = [

View file

@ -1,4 +1,4 @@
{ ... }: { lib, pkgs, ... }:
# This module is intended to support the Surface Laptop range, specifically those with AMD CPUs. # This module is intended to support the Surface Laptop range, specifically those with AMD CPUs.
# It's expected it will work equally well on many other Surface models, but they may need further # It's expected it will work equally well on many other Surface models, but they may need further
@ -15,6 +15,6 @@
]; ];
# Note: The IPTS module is not often required on devices with Surface Laptop 3 (AMD). # Note: The IPTS module is not often required on devices with Surface Laptop 3 (AMD).
microsoft-surface.ipts.enable = true; services.iptsd.enable = lib.mkDefault true;
microsoft-surface.surface-control.enable = true; environment.systemPackages = [ pkgs.surface-control ];
} }

View file

@ -1,4 +1,4 @@
{ ... }: { lib, pkgs, ... }:
# This module is intended to support the Surface Pro range, specifically those with Intel CPUs. # This module is intended to support the Surface Pro range, specifically those with Intel CPUs.
# It's expected it will work equally well on many other Surface models, but they may need further # It's expected it will work equally well on many other Surface models, but they may need further
@ -13,6 +13,11 @@
../../../common/cpu/intel ../../../common/cpu/intel
]; ];
microsoft-surface.ipts.enable = true; services.iptsd.enable = lib.mkDefault true;
microsoft-surface.surface-control.enable = true; environment.systemPackages = [ pkgs.surface-control ];
services.thermald = lib.mkDefault {
enable = true;
configFile = ./thermal-conf.xml;
};
} }

View file

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<ThermalConfiguration>
<Platform>
<Name>Surface Pro Intel Thermal Workaround</Name>
<ProductName>*</ProductName>
<Preference>QUIET</Preference>
<ThermalZones>
<ThermalZone>
<Type>cpu</Type>
<TripPoints>
<TripPoint>
<SensorType>x86_pkg_temp</SensorType>
<Temperature>65000</Temperature>
<type>passive</type>
<ControlType>SEQUENTIAL</ControlType>
<CoolingDevice>
<index>1</index>
<type>rapl_controller</type>
<influence>100</influence>
<SamplingPeriod>10</SamplingPeriod>
</CoolingDevice>
</TripPoint>
</TripPoints>
</ThermalZone>
</ThermalZones>
</Platform>
</ThermalConfiguration>

View file

@ -32,14 +32,6 @@ https://github.com/NixOS/nixos-hardware/blob/6d1bd5bc2e8b9992a3f57e416ba50fbed55
HDMI over Type-C works only for the custom kernel and the audio dosen't work (it's an upstream problem). HDMI over Type-C works only for the custom kernel and the audio dosen't work (it's an upstream problem).
#### `rockchipdrm` and `efifb`
This can be worked around by booting with the `efifb=off` kernel command-line.
This is already handled for you by this configuration. If using the generic
UEFI AArch64 iso, you will need to add the option yourself to the command-line
using GRUB.
#### _EFI_ and poweroff #### _EFI_ and poweroff
When booted using EFI, the system will not power off. It will stay seemingly When booted using EFI, the system will not power off. It will stay seemingly

View file

@ -1,6 +1,6 @@
{ {
imports = [ imports = [
../../common/cpu/intel/comet-lake ../../common/gpu/intel/comet-lake
]; ];
boot.initrd.kernelModules = [ boot.initrd.kernelModules = [

View file

@ -6,14 +6,14 @@
buildLinux (args buildLinux (args
// rec { // rec {
defconfig = "librem5_defconfig"; defconfig = "librem5_defconfig";
version = "6.6.6-librem5"; version = "6.6.29-librem5";
modDirVersion = version; modDirVersion = version;
src = fetchFromGitLab { src = fetchFromGitLab {
domain = "source.puri.sm"; domain = "source.puri.sm";
owner = "Librem5"; owner = "Librem5";
repo = "linux"; repo = "linux";
rev = "pureos/6.6.6pureos1"; rev = "pureos/6.6.29pureos1";
hash = "sha256-LJfY45yNYgFYLCGxb+WRMYBUHnY4HCI2rkflPeaeFe0="; hash = "sha256-i8HSAJ1/Z2Ux2s3Srse+L0S1Zd/70ldpGBhIgEZ6nBw=";
}; };
kernelPatches = [ ]; kernelPatches = [ ];
structuredExtraConfig = with lib.kernel; { structuredExtraConfig = with lib.kernel; {

View file

@ -51,6 +51,7 @@ let
rev = "956aa590c93977992743b41c45d3c7ee5a024915"; # this is the latest commit on the upstream/librem5 branch rev = "956aa590c93977992743b41c45d3c7ee5a024915"; # this is the latest commit on the upstream/librem5 branch
hash = "sha256-MsIIlarN+WFFEzc0ptLAgS7BwJ6Cosy42xo0EwPn1AU="; hash = "sha256-MsIIlarN+WFFEzc0ptLAgS7BwJ6Cosy42xo0EwPn1AU=";
}; };
patches = [];
BL31 = "${arm-trusted-firmware-imx8mq}/bl31.bin"; BL31 = "${arm-trusted-firmware-imx8mq}/bl31.bin";
preConfigure = '' preConfigure = ''
cp $BL31 . cp $BL31 .

View file

@ -0,0 +1,34 @@
{ lib
, pkgs
, ...
}:
{
boot.kernelPackages = lib.mkDefault pkgs.linuxKernel.packages.linux_rpi3;
# fix the following error :
# modprobe: FATAL: Module ahci not found in directory
# https://github.com/NixOS/nixpkgs/issues/154163#issuecomment-1350599022
nixpkgs.overlays = [
(_final: super: {
makeModulesClosure = x:
super.makeModulesClosure (x // { allowMissing = true; });
})
];
# https://github.com/NixOS/nixpkgs/blob/b72bde7c4a1f9c9bf1a161f0c267186ce3c6483c/nixos/modules/installer/sd-card/sd-image-aarch64.nix#L12
# Use the extlinux boot loader. (NixOS wants to enable GRUB by default)
boot.loader.grub.enable = lib.mkDefault false;
# Enables the generation of /boot/extlinux/extlinux.conf
boot.loader.generic-extlinux-compatible.enable = lib.mkDefault true;
# The last console argument in the list that linux can find at boot will receive kernel logs.
# The serial ports listed here are:
# - ttyS0: serial
# - tty0: hdmi
boot.kernelParams = [
"console=ttyS0,115200n8"
"console=tty0"
];
}

View file

@ -0,0 +1,44 @@
{ config, lib, ... }:
let
cfg = config.hardware.raspberry-pi."4".bluetooth;
in
{
options.hardware = {
raspberry-pi."4".bluetooth = {
enable = lib.mkEnableOption ''
configuration for bluetooth
'';
};
};
config = lib.mkIf cfg.enable {
hardware.raspberry-pi."4".apply-overlays-dtmerge.enable = lib.mkDefault true;
# doesn't work for the CM module, so we exclude e.g. bcm2711-rpi-cm4.dts
hardware.deviceTree.filter = "bcm2711-rpi-4*.dtb";
hardware.deviceTree = {
overlays = [
{
name = "bluetooth-overlay";
dtsText = ''
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2711";
fragment@0 {
target = <&uart0_pins>;
__overlay__ {
brcm,pins = <30 31 32 33>;
brcm,pull = <2 0 0 2>;
};
};
};
'';
}
];
};
};
}

View file

@ -4,6 +4,7 @@
imports = [ imports = [
./audio.nix ./audio.nix
./backlight.nix ./backlight.nix
./bluetooth.nix
./cpu-revision.nix ./cpu-revision.nix
./digi-amp-plus.nix ./digi-amp-plus.nix
./dwc2.nix ./dwc2.nix

View file

@ -1,11 +0,0 @@
/dts-v1/;
/plugin/;
/ {
compatible = "starfive,jh7110";
fragment@0 {
target-path = "/memory@40000000";
__overlay__ {
reg = <0x0 0x40000000 0x2 0x0>;
};
};
};

Some files were not shown because too many files have changed in this diff Show more