Merge branch 'NixOS:master' into master

This commit is contained in:
Nunya Bidness 2025-07-07 19:25:48 -05:00 committed by GitHub
commit c0b045c56b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
440 changed files with 6929 additions and 3484 deletions

12
.git-blame-ignore-revs Normal file
View file

@ -0,0 +1,12 @@
# This file contains commits that should be ignored by git blame
# See https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-file
# and https://github.com/NixOS/nixpkgs/blob/master/.git-blame-ignore-revs for more info
# To enable this in your local repository, run:
# git config blame.ignoreRevsFile .git-blame-ignore-revs
# For rebasing PRs, commits marked with !autorebase will be automatically
# reapplied by the auto-rebase script
# nixfmt-rfc-style formatting
51e51e601448705c0d2f92ef90ec7b680123077c #!autorebase cd tests && nix fmt ..

View file

@ -4,10 +4,18 @@ on:
push: push:
branches: branches:
- master - master
merge_group:
jobs: jobs:
tests: nixfmt:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: cachix/install-nix-action@v30 - uses: cachix/install-nix-action@v31
- run: nix run ./tests#run . - run: cd tests && nix fmt .. -- --fail-on-change
tests:
needs: nixfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v31
- run: nix run ./tests#run .

View file

@ -48,8 +48,6 @@ assurance is up to *you*.
# For reviewers: # For reviewers:
This repository has bors enabled for easier merging after a successfull build: This repository has [mergify](https://mergify.com/) enabled for easier merging after a successfull build:
* `bors try` - check if the PR builds. * `@mergify queue` will add the current pull request to the merge queue and merge when all tests succeed
* `bors merge` - same as `bors try` but will also merge the PR if it builds successfully.
* https://bors.tech/documentation/

641
README.md
View file

@ -69,304 +69,351 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md).
For questions and discussions, come join us in the [nixos-anywhere matrix](https://matrix.to/#/#nixos-hardware:nixos.org) room. For questions and discussions, come join us in the [nixos-anywhere matrix](https://matrix.to/#/#nixos-hardware:nixos.org) room.
# Community Meetings
The [NixOS hardware](https://github.com/orgs/NixOS/teams/nixos-hardware) team meets regularly to discuss hardware profiles and maintenance:
- **When**: Every 3rd Friday of the month
- **Time**: 04:00 pm (UTC) / 16:00 (UTC)
- **Where**: https://jitsi.lassul.us/Hardware-team
- **Contact**: hardware@nixos.org
All contributors and users are welcome to join!
## List of Profiles ## List of Profiles
See code for all available configurations. See code for all available configurations.
| Model | Path | | Model | Path | Flake Module |
| --------------------------------------------------------------------------------- | ------------------------------------------------------- | | --------------------------------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------- |
| [Acer Aspire 4810T](acer/aspire/4810t) | `<nixos-hardware/acer/aspire/4810t>` | | [Acer Aspire 4810T](acer/aspire/4810t) | `<nixos-hardware/acer/aspire/4810t>` | `acer-aspire-4810t` |
| [Airis N990](airis/n990) | `<nixos-hardware/airis/n990>` | | [Airis N990](airis/n990) | `<nixos-hardware/airis/n990>` | `airis-n990` |
| [Apple iMac 14.2](apple/imac/14-2) | `<nixos-hardware/apple/imac/14-2>` | | [Apple iMac 14.2](apple/imac/14-2) | `<nixos-hardware/apple/imac/14-2>` | `apple-imac-14-2` |
| [Apple iMac 18.2](apple/imac/18-2) | `<nixos-hardware/apple/imac/18-2>` | | [Apple iMac 18.2](apple/imac/18-2) | `<nixos-hardware/apple/imac/18-2>` | `apple-imac-18-2` |
| [Apple MacBook Air 3,X](apple/macbook-air/3) | `<nixos-hardware/apple/macbook-air/3>` | | [Apple MacBook Air 3,X](apple/macbook-air/3) | `<nixos-hardware/apple/macbook-air/3>` | `apple-macbook-air-3` |
| [Apple MacBook Air 4,X](apple/macbook-air/4) | `<nixos-hardware/apple/macbook-air/4>` | | [Apple MacBook Air 4,X](apple/macbook-air/4) | `<nixos-hardware/apple/macbook-air/4>` | `apple-macbook-air-4` |
| [Apple MacBook Air 6,X](apple/macbook-air/6) | `<nixos-hardware/apple/macbook-air/6>` | | [Apple MacBook Air 6,X](apple/macbook-air/6) | `<nixos-hardware/apple/macbook-air/6>` | `apple-macbook-air-6` |
| [Apple MacBook Air 7,X](apple/macbook-air/7) | `<nixos-hardware/apple/macbook-air/7>` | | [Apple MacBook Air 7,X](apple/macbook-air/7) | `<nixos-hardware/apple/macbook-air/7>` | `apple-macbook-air-7` |
| [Apple MacBook Pro 8,1](apple/macbook-pro/8-1) | `<nixos-hardware/apple/macbook-pro/8-1>` | | [Apple MacBook Pro 8,1](apple/macbook-pro/8-1) | `<nixos-hardware/apple/macbook-pro/8-1>` | `apple-macbook-pro-8-1` |
| [Apple MacBook Pro 10,1](apple/macbook-pro/10-1) | `<nixos-hardware/apple/macbook-pro/10-1>` | | [Apple MacBook Pro 10,1](apple/macbook-pro/10-1) | `<nixos-hardware/apple/macbook-pro/10-1>` | `apple-macbook-pro-10-1` |
| [Apple MacBook Pro 11,1](apple/macbook-pro/11-1) | `<nixos-hardware/apple/macbook-pro/11-1>` | | [Apple MacBook Pro 11,1](apple/macbook-pro/11-1) | `<nixos-hardware/apple/macbook-pro/11-1>` | `apple-macbook-pro-11-1` |
| [Apple MacBook Pro 11,5](apple/macbook-pro/11-5) | `<nixos-hardware/apple/macbook-pro/11-5>` | | [Apple MacBook Pro 11,5](apple/macbook-pro/11-5) | `<nixos-hardware/apple/macbook-pro/11-5>` | `apple-macbook-pro-11-5` |
| [Apple MacBook Pro 12,1](apple/macbook-pro/12-1) | `<nixos-hardware/apple/macbook-pro/12-1>` | | [Apple MacBook Pro 12,1](apple/macbook-pro/12-1) | `<nixos-hardware/apple/macbook-pro/12-1>` | `apple-macbook-pro-12-1` |
| [Apple MacBook Pro 14,1](apple/macbook-pro/14-1) | `<nixos-hardware/apple/macbook-pro/14-1>` | | [Apple MacBook Pro 14,1](apple/macbook-pro/14-1) | `<nixos-hardware/apple/macbook-pro/14-1>` | `apple-macbook-pro-14-1` |
| [Apple MacMini (2010, Intel, Nvidia)](apple/macmini/4) | `<nixos-hardware/apple/macmini/4>` | | [Apple MacMini (2010, Intel, Nvidia)](apple/macmini/4) | `<nixos-hardware/apple/macmini/4>` | `apple-macmini-4-1` |
| [Apple Macs with a T2 Chip](apple/t2) | `<nixos-hardware/apple/t2>` | | [Apple Macs with a T2 Chip](apple/t2) | `<nixos-hardware/apple/t2>` | `apple-t2` |
| [Asus Pro WS X570-ACE](asus/pro-ws-x570-ace) | `<nixos-hardware/asus/pro-ws-x570-ace>` | | [Aoostar R1 N100](aoostar/r1/n100) | `<nixos-hardware/aoostar/r1/n100>` | `aoostar-r1-n100` |
| [Asus ROG Ally RC71L (2023)](asus/ally/rc71l) | `<nixos-hardware/asus/ally/rc71l>` | | [Asus Pro WS X570-ACE](asus/pro-ws-x570-ace) | `<nixos-hardware/asus/pro-ws-x570-ace>` | `asus-pro-ws-x570-ace` |
| [Asus ROG Flow X13 GV302X\* (2023)](asus/flow/gv302x/amdgpu) | `<nixos-hardware/asus/flow/gv302x/amdgpu>` | | [Asus ROG Ally RC71L (2023)](asus/ally/rc71l) | `<nixos-hardware/asus/ally/rc71l>` | `asus-ally-rc71l` |
| [Asus ROG Flow X13 GV302X\* (2023)](asus/flow/gv302x/nvidia) | `<nixos-hardware/asus/flow/gv302x/nvidia>` | | [Asus ROG Flow X13 GV302X\* (2023)](asus/flow/gv302x/amdgpu) | `<nixos-hardware/asus/flow/gv302x/amdgpu>` | `asus-flow-gv302x-amdgpu` |
| [Asus ROG Strix G513IM](asus/rog-strix/g513im) | `<nixos-hardware/asus/rog-strix/g513im>` | | [Asus ROG Flow X13 GV302X\* (2023)](asus/flow/gv302x/nvidia) | `<nixos-hardware/asus/flow/gv302x/nvidia>` | `asus-flow-gv302x-nvidia` |
| [Asus ROG Strix G713IE](asus/rog-strix/g713ie) | `<nixos-hardware/asus/rog-strix/g713ie>` | | [Asus ROG Strix G513IM](asus/rog-strix/g513im) | `<nixos-hardware/asus/rog-strix/g513im>` | `asus-rog-strix-g513im` |
| [Asus ROG Strix G733QS](asus/rog-strix/g733qs) | `<nixos-hardware/asus/rog-strix/g733qs>` | | [Asus ROG Strix G533ZW](asus/rog-strix/g533zw) | `<nixos-hardware/asus/rog-strix/g533zw>` | `asus-rog-strix-g533zw` |
| [Asus ROG Strix X570-E GAMING](asus/rog-strix/x570e) | `<nixos-hardware/asus/rog-strix/x570e>` | | [Asus ROG Strix G713IE](asus/rog-strix/g713ie) | `<nixos-hardware/asus/rog-strix/g713ie>` | `asus-rog-strix-g713ie` |
| [Asus ROG Zephyrus G14 GA401](asus/zephyrus/ga401) | `<nixos-hardware/asus/zephyrus/ga401>` | | [Asus ROG Strix G733QS](asus/rog-strix/g733qs) | `<nixos-hardware/asus/rog-strix/g733qs>` | `asus-rog-strix-g733qs` |
| [Asus ROG Zephyrus G14 GA402](asus/zephyrus/ga402) | `<nixos-hardware/asus/zephyrus/ga402>` | | [Asus ROG Strix X570-E GAMING](asus/rog-strix/x570e) | `<nixos-hardware/asus/rog-strix/x570e>` | `asus-rog-strix-x570e` |
| [Asus ROG Zephyrus G14 GA402X\* (2023)](asus/zephyrus/ga402x/amdgpu) | `<nixos-hardware/asus/zephyrus/ga402x/amdgpu>` | | [Asus ROG Zephyrus G14 GA401](asus/zephyrus/ga401) | `<nixos-hardware/asus/zephyrus/ga401>` | `asus-zephyrus-ga401` |
| [Asus ROG Zephyrus G14 GA402X\* (2023)](asus/zephyrus/ga402x/nvidia) | `<nixos-hardware/asus/zephyrus/ga402x/nvidia>` | | [Asus ROG Zephyrus G14 GA402](asus/zephyrus/ga402) | `<nixos-hardware/asus/zephyrus/ga402>` | `asus-zephyrus-ga402` |
| [Asus ROG Zephyrus G15 GA502](asus/zephyrus/ga502) | `<nixos-hardware/asus/zephyrus/ga502>` | | [Asus ROG Zephyrus G14 GA402X\* (2023)](asus/zephyrus/ga402x/amdgpu) | `<nixos-hardware/asus/zephyrus/ga402x/amdgpu>` | `asus-zephyrus-ga402x-amdgpu` |
| [Asus ROG Zephyrus G15 GA503](asus/zephyrus/ga503) | `<nixos-hardware/asus/zephyrus/ga503>` | | [Asus ROG Zephyrus G14 GA402X\* (2023)](asus/zephyrus/ga402x/nvidia) | `<nixos-hardware/asus/zephyrus/ga402x/nvidia>` | `asus-zephyrus-ga402x-nvidia` |
| [Asus ROG Zephyrus G16 GU605MY](asus/zephyrus/gu605my) | `<nixos-hardware/asus/zephyrus/gu605my>` | | [Asus ROG Zephyrus G15 GA502](asus/zephyrus/ga502) | `<nixos-hardware/asus/zephyrus/ga502>` | `asus-zephyrus-ga502` |
| [Asus ROG Zephyrus M16 GU603H](asus/zephyrus/gu603h) | `<nixos-hardware/asus/zephyrus/gu603h>` | | [Asus ROG Zephyrus G15 GA503](asus/zephyrus/ga503) | `<nixos-hardware/asus/zephyrus/ga503>` | `asus-zephyrus-ga503` |
| [Asus TUF FX504GD](asus/fx504gd) | `<nixos-hardware/asus/fx504gd>` | | [Asus ROG Zephyrus G16 GU605MY](asus/zephyrus/gu605my) | `<nixos-hardware/asus/zephyrus/gu605my>` | `asus-zephyrus-gu605my` |
| [Asus TUF FX506HM](asus/fx506hm) | `<nixos-hardware/asus/fx506hm>` | | [Asus ROG Zephyrus M16 GU603H](asus/zephyrus/gu603h) | `<nixos-hardware/asus/zephyrus/gu603h>` | `asus-zephyrus-gu603h` |
| [Asus TUF FA506IC](asus/fa506ic) | `<nixos-hardware/asus/fa506ic>` | | [Asus TUF FX504GD](asus/fx504gd) | `<nixos-hardware/asus/fx504gd>` | `asus-fx504gd` |
| [Asus TUF FA507RM](asus/fa507rm) | `<nixos-hardware/asus/fa507rm>` | | [Asus TUF FX506HM](asus/fx506hm) | `<nixos-hardware/asus/fx506hm>` | `asus-fx506hm` |
| [Asus TUF FA507NV](asus/fa507nv) | `<nixos-hardware/asus/fa507nv>` | | [Asus TUF FA506IC](asus/fa506ic) | `<nixos-hardware/asus/fa506ic>` | `asus-fa506ic` |
| [Asus Zenbook Flip S13 UX371](asus/zenbook/ux371/) | `<nixos-hardware/asus/zenbook/ux371>` | | [Asus TUF FA507RM](asus/fa507rm) | `<nixos-hardware/asus/fa507rm>` | `asus-fa507rm` |
| [Asus Zenbook Pro 15 UX535](asus/zenbook/ux535/) | `<nixos-hardware/asus/zenbook/ux535>` | | [Asus TUF FA507NV](asus/fa507nv) | `<nixos-hardware/asus/fa507nv>` | `asus-fa507nv` |
| [BeagleBoard PocketBeagle](beagleboard/pocketbeagle) | `<nixos-hardware/beagleboard/pocketbeagle>` | | [Asus Zenbook Duo 14 UX481](asus/zenbook/ux481/intelgpu/) | `<nixos-hardware/asus/zenbook/ux481/intelgpu>` | `asus-zenbook-ux481-intelgpu` |
| [Chuwi MiniBook X](chuwi/minibook-x) | `<nixos-hardware/chuwi/minibook-x>` | | [Asus Zenbook Duo 14 UX481](asus/zenbook/ux481/nvidia/) | `<nixos-hardware/asus/zenbook/ux481/nvidia>` | `asus-zenbook-ux481-nvidia` |
| [Deciso DEC series](deciso/dec) | `<nixos-hardware/deciso/dec>` | | [Asus Zenbook Flip S13 UX371](asus/zenbook/ux371/) | `<nixos-hardware/asus/zenbook/ux371>` | `asus-zenbook-ux371` |
| [Dell G3 3779](dell/g3/3779) | `<nixos-hardware/dell/g3/3779>` | | [Asus Zenbook Pro 15 UX535](asus/zenbook/ux535/) | `<nixos-hardware/asus/zenbook/ux535>` | `asus-zenbook-ux535` |
| [Dell G3 3579](dell/g3/3579) | `<nixos-hardware/dell/g3/3579>` | | [BeagleBoard PocketBeagle](beagleboard/pocketbeagle) | `<nixos-hardware/beagleboard/pocketbeagle>` | `beagleboard-pocketbeagle` |
| [Dell Inspiron 3442](dell/inspiron/3442) | `<nixos-hardawre/dell/inspiron/3442>` | | [Chuwi MiniBook X](chuwi/minibook-x) | `<nixos-hardware/chuwi/minibook-x>` | `chuwi-minibook-x` |
| [Dell Inspiron 14 5420](dell/inspiron/14-5420) | `<nixos-hardawre/dell/inspiron/14-5420>` | | [Deciso DEC series](deciso/dec) | `<nixos-hardware/deciso/dec>` | `deciso-dec` |
| [Dell Inspiron 5509](dell/inspiron/5509) | `<nixos-hardware/dell/inspiron/5509>` | | [Dell G3 3779](dell/g3/3779) | `<nixos-hardware/dell/g3/3779>` | `dell-g3-3779` |
| [Dell Inspiron 5515](dell/inspiron/5515) | `<nixos-hardware/dell/inspiron/5515>` | | [Dell G3 3579](dell/g3/3579) | `<nixos-hardware/dell/g3/3579>` | `dell-g3-3579` |
| [Dell Inspiron 7405](dell/inspiron/7405) | `<nixos-hardware/dell/inspiron/7405>` | | [Dell Inspiron 3442](dell/inspiron/3442) | `<nixos-hardware/dell/inspiron/3442>` | `dell-inspiron-3442` |
| [Dell Inspiron 7460](dell/inspiron/7460) | `<nixos-hardware/dell/inspiron/7460>` | | [Dell Inspiron 14 5420](dell/inspiron/14-5420) | `<nixos-hardware/dell/inspiron/14-5420>` | `dell-inspiron-14-5420` |
| [Dell Latitude 3340](dell/latitude/3340) | `<nixos-hardware/dell/latitude/3340>` | | [Dell Inspiron 5509](dell/inspiron/5509) | `<nixos-hardware/dell/inspiron/5509>` | `dell-inspiron-5509` |
| [Dell Latitude 3480](dell/latitude/3480) | `<nixos-hardware/dell/latitude/3480>` | | [Dell Inspiron 5515](dell/inspiron/5515) | `<nixos-hardware/dell/inspiron/5515>` | `dell-inspiron-5515` |
| [Dell Latitude 5490](dell/latitude/5490) | `<nixos-hardware/dell/latitude/5490>` | | [Dell Inspiron 7405](dell/inspiron/7405) | `<nixos-hardware/dell/inspiron/7405>` | `dell-inspiron-7405` |
| [Dell Latitude 5520](dell/latitude/5520) | `<nixos-hardware/dell/latitude/5520>` | | [Dell Inspiron 7460](dell/inspiron/7460) | `<nixos-hardware/dell/inspiron/7460>` | `dell-inspiron-7460` |
| [Dell Latitude 7280](dell/latitude/7280) | `<nixos-hardware/dell/latitude/7280>` | | [Dell Inspiron 7559](dell/inspiron/7559) | `<nixos-hardware/dell/inspiron/7559>` | `dell-inspiron-7559` |
| [Dell Latitude 7390](dell/latitude/7390) | `<nixos-hardware/dell/latitude/7390>` | | [Dell Latitude 3340](dell/latitude/3340) | `<nixos-hardware/dell/latitude/3340>` | `dell-latitude-3340` |
| [Dell Latitude 7420](dell/latitude/7420) | `<nixos-hardware/dell/latitude/7420>` | | [Dell Latitude 3480](dell/latitude/3480) | `<nixos-hardware/dell/latitude/3480>` | `dell-latitude-3480` |
| [Dell Latitude 7430](dell/latitude/7430) | `<nixos-hardware/dell/latitude/7430>` | | [Dell Latitude 5490](dell/latitude/5490) | `<nixos-hardware/dell/latitude/5490>` | `dell-latitude-5490` |
| [Dell Latitude 7490](dell/latitude/7490) | `<nixos-hardware/dell/latitude/7490>` | | [Dell Latitude 5520](dell/latitude/5520) | `<nixos-hardware/dell/latitude/5520>` | `dell-latitude-5520` |
| [Dell Latitude 9430](dell/latitude/9430) | `<nixos-hardware/dell/latitude/9430>` | | [Dell Latitude 7280](dell/latitude/7280) | `<nixos-hardware/dell/latitude/7280>` | `dell-latitude-7280` |
| [Dell Optiplex 3050](dell/optiplex/3050) | `<nixos-hardware/dell/optiplex/3050>` | | [Dell Latitude 7390](dell/latitude/7390) | `<nixos-hardware/dell/latitude/7390>` | `dell-latitude-7390` |
| [Dell Poweredge R7515](dell/poweredge/r7515) | `<nixos-hardware/dell/poweredge/r7515>` | | [Dell Latitude 7420](dell/latitude/7420) | `<nixos-hardware/dell/latitude/7420>` | `dell-latitude-7420` |
| [Dell Precision 3541](dell/precision/3541) | `<nixos-hardware/dell/precision/3541>` | | [Dell Latitude 7430](dell/latitude/7430) | `<nixos-hardware/dell/latitude/7430>` | `dell-latitude-7430` |
| [Dell Precision 5490](dell/precision/5490) | `<nixos-hardware/dell/precision/5490>` | | [Dell Latitude 7490](dell/latitude/7490) | `<nixos-hardware/dell/latitude/7490>` | `dell-latitude-7490` |
| [Dell Precision 5530](dell/precision/5530) | `<nixos-hardware/dell/precision/5530>` | | [Dell Latitude 9430](dell/latitude/9430) | `<nixos-hardware/dell/latitude/9430>` | `dell-latitude-9430` |
| [Dell Precision 7520](dell/precision/7520) | `<nixos-hardware/dell/precision/7520>` | | [Dell Latitude E7240](dell/latitude/e7240) | `<nixos-hardware/dell/latitude/e7240>` | `dell-latitude-e7240` |
| [Dell XPS 13 7390](dell/xps/13-7390) | `<nixos-hardware/dell/xps/13-7390>` | | [Dell Optiplex 3050](dell/optiplex/3050) | `<nixos-hardware/dell/optiplex/3050>` | `dell-optiplex-3050` |
| [Dell XPS 13 9300](dell/xps/13-9300) | `<nixos-hardware/dell/xps/13-9300>` | | [Dell Poweredge R7515](dell/poweredge/r7515) | `<nixos-hardware/dell/poweredge/r7515>` | `dell-poweredge-r7515` |
| [Dell XPS 13 9310](dell/xps/13-9310) | `<nixos-hardware/dell/xps/13-9310>` | | [Dell Precision 3490, nvidia](dell/precision/3490/nvidia) | `<nixos-hardware/dell/precision/3490/nvidia>` | `dell-precision-3490-nvidia` |
| [Dell XPS 13 9315](dell/xps/13-9315) | `<nixos-hardware/dell/xps/13-9315>` | | [Dell Precision 3490, intel](dell/precision/3490/intel) | `<nixos-hardware/dell/precision/3490/intel>` | `dell-precision-3490-intel` |
| [Dell XPS 13 9333](dell/xps/13-9333) | `<nixos-hardware/dell/xps/13-9333>` | | [Dell Precision 3541](dell/precision/3541) | `<nixos-hardware/dell/precision/3541>` | `dell-precision-3541` |
| [Dell XPS 13 9343](dell/xps/13-9343) | `<nixos-hardware/dell/xps/13-9343>` | | [Dell Precision 5490](dell/precision/5490) | `<nixos-hardware/dell/precision/5490>` | `dell-precision-5490` |
| [Dell XPS 13 9350](dell/xps/13-9350) | `<nixos-hardware/dell/xps/13-9350>` | | [Dell Precision 5530](dell/precision/5530) | `<nixos-hardware/dell/precision/5530>` | `dell-precision-5530` |
| [Dell XPS 13 9360](dell/xps/13-9360) | `<nixos-hardware/dell/xps/13-9360>` | | [Dell Precision 7520](dell/precision/7520) | `<nixos-hardware/dell/precision/7520>` | `dell-precision-7520` |
| [Dell XPS 13 9370](dell/xps/13-9370) | `<nixos-hardware/dell/xps/13-9370>` | | [Dell XPS 13 7390](dell/xps/13-7390) | `<nixos-hardware/dell/xps/13-7390>` | `dell-xps-13-7390` |
| [Dell XPS 13 9380](dell/xps/13-9380) | `<nixos-hardware/dell/xps/13-9380>` | | [Dell XPS 13 9300](dell/xps/13-9300) | `<nixos-hardware/dell/xps/13-9300>` | `dell-xps-13-9300` |
| [Dell XPS 15 7590, nvidia](dell/xps/15-7590/nvidia) | `<nixos-hardware/dell/xps/15-7590/nvidia>` | | [Dell XPS 13 9310](dell/xps/13-9310) | `<nixos-hardware/dell/xps/13-9310>` | `dell-xps-13-9310` |
| [Dell XPS 15 7590](dell/xps/15-7590) | `<nixos-hardware/dell/xps/15-7590>` | | [Dell XPS 13 9315](dell/xps/13-9315) | `<nixos-hardware/dell/xps/13-9315>` | `dell-xps-13-9315` |
| [Dell XPS 15 9500, nvidia](dell/xps/15-9500/nvidia) | `<nixos-hardware/dell/xps/15-9500/nvidia>` | | [Dell XPS 13 9333](dell/xps/13-9333) | `<nixos-hardware/dell/xps/13-9333>` | `dell-xps-13-9333` |
| [Dell XPS 15 9500](dell/xps/15-9500) | `<nixos-hardware/dell/xps/15-9500>` | | [Dell XPS 13 9343](dell/xps/13-9343) | `<nixos-hardware/dell/xps/13-9343>` | `dell-xps-13-9343` |
| [Dell XPS 15 9510, nvidia](dell/xps/15-9510/nvidia) | `<nixos-hardware/dell/xps/15-9510/nvidia>` | | [Dell XPS 13 9350](dell/xps/13-9350) | `<nixos-hardware/dell/xps/13-9350>` | `dell-xps-13-9350` |
| [Dell XPS 15 9510](dell/xps/15-9510) | `<nixos-hardware/dell/xps/15-9510>` | | [Dell XPS 13 9360](dell/xps/13-9360) | `<nixos-hardware/dell/xps/13-9360>` | `dell-xps-13-9360` |
| [Dell XPS 15 9520, nvidia](dell/xps/15-9520/nvidia) | `<nixos-hardware/dell/xps/15-9520/nvidia>` | | [Dell XPS 13 9370](dell/xps/13-9370) | `<nixos-hardware/dell/xps/13-9370>` | `dell-xps-13-9370` |
| [Dell XPS 15 9520](dell/xps/15-9520) | `<nixos-hardware/dell/xps/15-9520>` | | [Dell XPS 13 9380](dell/xps/13-9380) | `<nixos-hardware/dell/xps/13-9380>` | `dell-xps-13-9380` |
| [Dell XPS 15 9530, nvidia](dell/xps/15-9520/nvidia) | `<nixos-hardware/dell/xps/15-9530/nvidia>` | | [Dell XPS 15 7590, nvidia](dell/xps/15-7590/nvidia) | `<nixos-hardware/dell/xps/15-7590/nvidia>` | `dell-xps-15-7590-nvidia` |
| [Dell XPS 15 9420](dell/xps/15-9520) | `<nixos-hardware/dell/xps/15-9530>` | | [Dell XPS 15 7590](dell/xps/15-7590) | `<nixos-hardware/dell/xps/15-7590>` | `dell-xps-15-7590` |
| [Dell XPS 15 9550, nvidia](dell/xps/15-9550/nvidia) | `<nixos-hardware/dell/xps/15-9550/nvidia>` | | [Dell XPS 15 9500, nvidia](dell/xps/15-9500/nvidia) | `<nixos-hardware/dell/xps/15-9500/nvidia>` | `dell-xps-15-9500-nvidia` |
| [Dell XPS 15 9550](dell/xps/15-9550) | `<nixos-hardware/dell/xps/15-9550>` | | [Dell XPS 15 9500](dell/xps/15-9500) | `<nixos-hardware/dell/xps/15-9500>` | `dell-xps-15-9500` |
| [Dell XPS 15 9560, intel only](dell/xps/15-9560/intel) | `<nixos-hardware/dell/xps/15-9560/intel>` | | [Dell XPS 15 9510, nvidia](dell/xps/15-9510/nvidia) | `<nixos-hardware/dell/xps/15-9510/nvidia>` | `dell-xps-15-9510-nvidia` |
| [Dell XPS 15 9560, nvidia only](dell/xps/15-9560/nvidia) | `<nixos-hardware/dell/xps/15-9560/nvidia>` | | [Dell XPS 15 9510](dell/xps/15-9510) | `<nixos-hardware/dell/xps/15-9510>` | `dell-xps-15-9510` |
| [Dell XPS 15 9560](dell/xps/15-9560) | `<nixos-hardware/dell/xps/15-9560>` | | [Dell XPS 15 9520, nvidia](dell/xps/15-9520/nvidia) | `<nixos-hardware/dell/xps/15-9520/nvidia>` | `dell-xps-15-9520-nvidia` |
| [Dell XPS 15 9570, intel only](dell/xps/15-9570/intel) | `<nixos-hardware/dell/xps/15-9570/intel>` | | [Dell XPS 15 9520](dell/xps/15-9520) | `<nixos-hardware/dell/xps/15-9520>` | `dell-xps-15-9520` |
| [Dell XPS 15 9570, nvidia](dell/xps/15-9570/nvidia) | `<nixos-hardware/dell/xps/15-9570/nvidia>` | | [Dell XPS 15 9530, nvidia](dell/xps/15-9530/nvidia) | `<nixos-hardware/dell/xps/15-9530/nvidia>` | `dell-xps-15-9530-nvidia` |
| [Dell XPS 15 9570](dell/xps/15-9570) | `<nixos-hardware/dell/xps/15-9570>` | | [Dell XPS 15 9530](dell/xps/15-9530) | `<nixos-hardware/dell/xps/15-9530>` | `dell-xps-15-9530` |
| [Dell XPS 17 9700, intel](dell/xps/17-9700/intel) | `<nixos-hardware/dell/xps/17-9700/intel` | | [Dell XPS 15 9550, nvidia](dell/xps/15-9550/nvidia) | `<nixos-hardware/dell/xps/15-9550/nvidia>` | `dell-xps-15-9550-nvidia` |
| [Dell XPS 17 9700, nvidia](dell/xps/17-9700/nvidia) | `<nixos-hardware/dell/xps/17-9700/nvidia>` | | [Dell XPS 15 9550](dell/xps/15-9550) | `<nixos-hardware/dell/xps/15-9550>` | `dell-xps-15-9550` |
| [Dell XPS 17 9710, intel only](dell/xps/17-9710/intel) | `<nixos-hardware/dell/xps/17-9710/intel>` | | [Dell XPS 15 9560, intel only](dell/xps/15-9560/intel) | `<nixos-hardware/dell/xps/15-9560/intel>` | `dell-xps-15-9560-intel` |
| [Dell XPS E7240](dell/e7240) | `<nixos-hardware/dell/e7240>` | | [Dell XPS 15 9560, nvidia only](dell/xps/15-9560/nvidia) | `<nixos-hardware/dell/xps/15-9560/nvidia>` | `dell-xps-15-9560-nvidia` |
| [Framework 11th Gen Intel Core](framework/13-inch/11th-gen-intel) | `<nixos-hardware/framework/13-inch/11th-gen-intel>` | | [Dell XPS 15 9560](dell/xps/15-9560) | `<nixos-hardware/dell/xps/15-9560>` | `dell-xps-15-9560` |
| [Framework 12th Gen Intel Core](framework/13-inch/12th-gen-intel) | `<nixos-hardware/framework/13-inch/12th-gen-intel>` | | [Dell XPS 15 9570, intel only](dell/xps/15-9570/intel) | `<nixos-hardware/dell/xps/15-9570/intel>` | `dell-xps-15-9570-intel` |
| [Framework 13th Gen Intel Core](framework/13-inch/13th-gen-intel) | `<nixos-hardware/framework/13-inch/13th-gen-intel>` | | [Dell XPS 15 9570, nvidia](dell/xps/15-9570/nvidia) | `<nixos-hardware/dell/xps/15-9570/nvidia>` | `dell-xps-15-9570-nvidia` |
| [Framework Intel Core Ultra Series 1](framework/13-inch/intel-core-ultra-series1) | `<nixos-hardware/framework/13-inch/intel-core-ultra-series1>` | | [Dell XPS 15 9570](dell/xps/15-9570) | `<nixos-hardware/dell/xps/15-9570>` | `dell-xps-15-9570` |
| [Framework 13 AMD Ryzen 7040 Series](framework/13-inch/7040-amd) | `<nixos-hardware/framework/13-inch/7040-amd>` | | [Dell XPS 17 9700, intel](dell/xps/17-9700/intel) | `<nixos-hardware/dell/xps/17-9700/intel` | `dell-xps-17-9700-intel` |
| [Framework 16 AMD Ryzen 7040 Series](framework/16-inch/7040-amd) | `<nixos-hardware/framework/16-inch/7040-amd>` | | [Dell XPS 17 9700, nvidia](dell/xps/17-9700/nvidia) | `<nixos-hardware/dell/xps/17-9700/nvidia>` | `dell-xps-17-9700-nvidia` |
| [FriendlyARM NanoPC-T4](friendlyarm/nanopc-t4) | `<nixos-hardware/friendlyarm/nanopc-t4>` | | [Dell XPS 17 9710, intel only](dell/xps/17-9710/intel) | `<nixos-hardware/dell/xps/17-9710/intel>` | `dell-xps-17-9710-intel` |
| [FriendlyARM NanoPi R5s](friendlyarm/nanopi-r5s) | `<nixos-hardware/friendlyarm/nanopi-r5s>` | | [Framework 11th Gen Intel Core](framework/13-inch/11th-gen-intel) | `<nixos-hardware/framework/13-inch/11th-gen-intel>` | `framework-11th-gen-intel` |
| [Focus M2 Gen 1](focus/m2/gen1) | `<nixos-hardware/focus/m2/gen1>` | | [Framework 12th Gen Intel Core](framework/12-inch/13th-gen-intel) | `<nixos-hardware/framework/12-inch/13th-gen-intel>` | `framework-12th-gen-intel` |
| [Gigabyte B550](gigabyte/b550) | `<nixos-hardware/gigabyte/b550>` | | [Framework 13th Gen Intel Core](framework/13-inch/13th-gen-intel) | `<nixos-hardware/framework/13-inch/13th-gen-intel>` | `framework-13th-gen-intel` |
| [GPD MicroPC](gpd/micropc) | `<nixos-hardware/gpd/micropc>` | | [Framework Intel Core Ultra Series 1](framework/13-inch/intel-core-ultra-series1) | `<nixos-hardware/framework/13-inch/intel-core-ultra-series1>` | `framework-intel-core-ultra-series1` |
| [GPD P2 Max](gpd/p2-max) | `<nixos-hardware/gpd/p2-max>` | | [Framework 13 AMD Ryzen 7040 Series](framework/13-inch/7040-amd) | `<nixos-hardware/framework/13-inch/7040-amd>` | `framework-13-7040-amd` |
| [GPD Pocket 3](gpd/pocket-3) | `<nixos-hardware/gpd/pocket-3>` | | [Framework 13 AMD AI 300 Series](framework/13-inch/amd-ai-300-series) | `<nixos-hardware/framework/13-inch/amd-ai-300-series>` | `framework-amd-ai-300-series` |
| [GPD Pocket 4](gpd/pocket-4) | `<nixos-hardware/gpd/pocket-4>` | | [Framework 12 13th Gen Intel Core](framework/12-inch/13th-gen-intel) | `<nixos-hardware/framework/12-inch/13th-gen-intel>` | `framework-12-13th-gen-intel` |
| [GPD WIN 2](gpd/win-2) | `<nixos-hardware/gpd/win-2>` | | [Framework 16 AMD Ryzen 7040 Series](framework/16-inch/7040-amd) | `<nixos-hardware/framework/16-inch/7040-amd>` | `framework-16-7040-amd` |
| [GPD WIN Max 2 2023](gpd/win-max-2/2023) | `<nixos-hardware/gpd/win-max-2/2023>` | | [FriendlyARM NanoPC-T4](friendlyarm/nanopc-t4) | `<nixos-hardware/friendlyarm/nanopc-t4>` | `friendlyarm-nanopc-t4` |
| [GPD WIN Mini 2024](gpd/win-mini/2024) | `<nixos-hardware/gpd/win-mini/2024>` | | [FriendlyARM NanoPi R5s](friendlyarm/nanopi-r5s) | `<nixos-hardware/friendlyarm/nanopi-r5s>` | `friendlyarm-nanopi-r5s` |
| [Google Pixelbook](google/pixelbook) | `<nixos-hardware/google/pixelbook>` | | [Focus M2 Gen 1](focus/m2/gen1) | `<nixos-hardware/focus/m2/gen1>` | `focus-m2-gen1` |
| [HP Elitebook 2560p](hp/elitebook/2560p) | `<nixos-hardware/hp/elitebook/2560p>` | | [Gigabyte B550](gigabyte/b550) | `<nixos-hardware/gigabyte/b550>` | `gigabyte-b550` |
| [HP Elitebook 830g6](hp/elitebook/830/g6) | `<nixos-hardware/hp/elitebook/830/g6>` | | [Gigabyte B650](gigabyte/b650) | `<nixos-hardware/gigabyte/b650>` | `gigabyte-b650` |
| [HP Elitebook 845g7](hp/elitebook/845/g7) | `<nixos-hardware/hp/elitebook/845/g7>` | | [GMKtec NucBox G3 Plus](gmktec/nucbox/g3-plus) | `<nixos-hardware/gmktec/nucbox/g3-plus>` | `gmktec-nucbox-g3-plus` |
| [HP Elitebook 845g8](hp/elitebook/845/g8) | `<nixos-hardware/hp/elitebook/845/g8>` | | [GPD MicroPC](gpd/micropc) | `<nixos-hardware/gpd/micropc>` | `gpd-micropc` |
| [HP Elitebook 845g9](hp/elitebook/845/g9) | `<nixos-hardware/hp/elitebook/845/g9>` | | [GPD P2 Max](gpd/p2-max) | `<nixos-hardware/gpd/p2-max>` | `gpd-p2-max` |
| [HP Laptop 14s-dq2024nf](hp/laptop/14s-dq2024nf) | `<nixos-hardware/hp/laptop/14s-dq2024nf>` | | [GPD Pocket 3](gpd/pocket-3) | `<nixos-hardware/gpd/pocket-3>` | `gpd-pocket-3` |
| [HP Notebook 14-df0023](hp/notebook/14-df0023) | `<nixos-hardware/hp/notebook/14-df0023>` | | [GPD Pocket 4](gpd/pocket-4) | `<nixos-hardware/gpd/pocket-4>` | `gpd-pocket-4` |
| [HP Probook 440G5](hp/probook/440g5) | `<nixos-hardware/hp/probook/440g5>` | | [GPD WIN 2](gpd/win-2) | `<nixos-hardware/gpd/win-2>` | `gpd-win-2` |
| [Huawei Matebook X Pro (2020)](huawei/machc-wa) | `<nixos-hardware/huawei/machc-wa>` | | [GPD WIN Max 2 2023](gpd/win-max-2/2023) | `<nixos-hardware/gpd/win-max-2/2023>` | `gpd-win-max-2-2023` |
| [i.MX8QuadMax Multisensory Enablement Kit](nxp/imx8qm-mek/) | `<nixos-hardware/nxp/imx8qm-mek>` | | [GPD WIN Mini 2024](gpd/win-mini/2024) | `<nixos-hardware/gpd/win-mini/2024>` | `gpd-win-mini-2024` |
| [Intel NUC 8i7BEH](intel/nuc/8i7beh/) | `<nixos-hardware/intel/nuc/8i7beh>` | | [Google Pixelbook](google/pixelbook) | `<nixos-hardware/google/pixelbook>` | `google-pixelbook` |
| [Lenovo IdeaCentre K330](lenovo/ideacentre/k330) | `<nixos-hardware/lenovo/ideacentre/k330>` | | [HP Elitebook 2560p](hp/elitebook/2560p) | `<nixos-hardware/hp/elitebook/2560p>` | `hp-elitebook-2560p` |
| [Lenovo IdeaPad 3 15alc6](lenovo/ideapad/15alc6) | `<nixos-hardware/lenovo/ideapad/15alc6>` | | [HP Elitebook 830g6](hp/elitebook/830/g6) | `<nixos-hardware/hp/elitebook/830/g6>` | `hp-elitebook-830g6` |
| [Lenovo IdeaPad Gaming 3 15arh05](lenovo/ideapad/15arh05) | `<nixos-hardware/lenovo/ideapad/15arh05>` | | [HP Elitebook 845g7](hp/elitebook/845/g7) | `<nixos-hardware/hp/elitebook/845/g7>` | `hp-elitebook-845g7` |
| [Lenovo IdeaPad Gaming 3 15ach6](lenovo/ideapad/15ach6) | `<nixos-hardware/lenovo/ideapad/15ach6>` | | [HP Elitebook 845g8](hp/elitebook/845/g8) | `<nixos-hardware/hp/elitebook/845/g8>` | `hp-elitebook-845g8` |
| [Lenovo IdeaPad 5 Pro 16ach6](lenovo/ideapad/16ach6) | `<nixos-hardware/lenovo/ideapad/16ach6>` | | [HP Elitebook 845g9](hp/elitebook/845/g9) | `<nixos-hardware/hp/elitebook/845/g9>` | `hp-elitebook-845g9` |
| [Lenovo IdeaPad Z510](lenovo/ideapad/z510) | `<nixos-hardware/lenovo/ideapad/z510>` | | [HP Laptop 14s-dq2024nf](hp/laptop/14s-dq2024nf) | `<nixos-hardware/hp/laptop/14s-dq2024nf>` | `hp-laptop-14s-dq2024nf` |
| [Lenovo IdeaPad Slim 5](lenovo/ideapad/slim-5) | `<nixos-hardware/lenovo/ideapad/slim-5>` | | [HP Notebook 14-df0023](hp/notebook/14-df0023) | `<nixos-hardware/hp/notebook/14-df0023>` | `hp-notebook-14-df0023` |
| [Lenovo IdeaPad Slim 5 16iah8](lenovo/ideapad/16iah8) | `<nixos-hardware/lenovo/ideapad/16iah8` | | [HP Probook 440G5](hp/probook/440g5) | `<nixos-hardware/hp/probook/440g5>` | `hp-probook-440G5` |
| [Lenovo IdeaPad 2-in-1 16ahp9](lenovo/ideapad/16ahp09) | `<nixos-hardware/lenovo/ideapad/16ahp9` | | [Huawei Matebook X Pro (2020)](huawei/machc-wa) | `<nixos-hardware/huawei/machc-wa>` | `huawei-machc-wa` |
| [Lenovo IdeaPad S145 15api](lenovo/ideapad/s145-15api) | `<nixos-hardware/lenovo/ideapad/s145-15api>` | | [i.MX8QuadMax Multisensory Enablement Kit](nxp/imx8qm-mek/) | `<nixos-hardware/nxp/imx8qm-mek>` | `nxp-imx8qm-mek` |
| [Lenovo Legion 5 15ach6h](lenovo/legion/15ach6h) | `<nixos-hardware/lenovo/legion/15ach6h>` | | [Intel NUC 8i7BEH](intel/nuc/8i7beh/) | `<nixos-hardware/intel/nuc/8i7beh>` | `intel-nuc-8i7beh` |
| [Lenovo Legion 5 15arh05h](lenovo/legion/15arh05h) | `<nixos-hardware/lenovo/legion/15arh05h>` | | [Lenovo IdeaCentre K330](lenovo/ideacentre/k330) | `<nixos-hardware/lenovo/ideacentre/k330>` | `lenovo-ideacentre-k330` |
| [Lenovo Legion 7 Slim 15ach6](lenovo/legion/15ach6) | `<nixos-hardware/lenovo/legion/15ach6>` | | [Lenovo IdeaPad 3 15alc6](lenovo/ideapad/15alc6) | `<nixos-hardware/lenovo/ideapad/15alc6>` | `lenovo-ideapad-15alc6` |
| [Lenovo Legion 5 Pro 16ach6h](lenovo/legion/16ach6h) | `<nixos-hardware/lenovo/legion/16ach6h>` | | [Lenovo IdeaPad Gaming 3 15arh05](lenovo/ideapad/15arh05) | `<nixos-hardware/lenovo/ideapad/15arh05>` | `lenovo-ideapad-15arh05` |
| [Lenovo Legion 5 Pro 16ach6h (Hybrid)](lenovo/legion/16ach6h/hybrid) | `<nixos-hardware/lenovo/legion/16ach6h/hybrid>` | | [Lenovo IdeaPad Gaming 3 15ach6](lenovo/ideapad/15ach6) | `<nixos-hardware/lenovo/ideapad/15ach6>` | `lenovo-ideapad-15ach6` |
| [Lenovo Legion 5 Pro 16ach6h (Nvidia)](lenovo/legion/16ach6h/nvidia) | `<nixos-hardware/lenovo/legion/16ach6h/nvidia>` | | [Lenovo IdeaPad 5 Pro 14imh9](lenovo/ideapad/14imh9) | `<nixos-hardware/lenovo/ideapad/14imh9>` | `lenovo-ideapad-14imh9` |
| [Lenovo Legion 7 16achg6 (Hybrid)](lenovo/legion/16achg6/hybrid) | `<nixos-hardware/lenovo/legion/16achg6/hybrid>` | | [Lenovo IdeaPad 5 Pro 16ach6](lenovo/ideapad/16ach6) | `<nixos-hardware/lenovo/ideapad/16ach6>` | `lenovo-ideapad-16ach6` |
| [Lenovo Legion 7 16achg6 (Nvidia)](lenovo/legion/16achg6/nvidia) | `<nixos-hardware/lenovo/legion/16achg6/nvidia>` | | [Lenovo IdeaPad Z510](lenovo/ideapad/z510) | `<nixos-hardware/lenovo/ideapad/z510>` | `lenovo-ideapad-z510` |
| [Lenovo Legion 7i Pro 16irx8h (Intel)](lenovo/legion/16irx8h) | `<nixos-hardware/lenovo/legion/16irx8h>` | | [Lenovo IdeaPad Slim 5](lenovo/ideapad/slim-5) | `<nixos-hardware/lenovo/ideapad/slim-5>` | `lenovo-ideapad-slim-5` |
| [Lenovo Legion 7 Pro 16irx9h (Intel)](lenovo/legion/16irx9h) | `<nixos-hardware/lenovo/legion/16irx9h>` | | [Lenovo IdeaPad Slim 5 16iah8](lenovo/ideapad/16iah8) | `<nixos-hardware/lenovo/ideapad/16iah8` | `lenovo-ideapad-s5-16iah8` |
| [Lenovo Legion Slim 7 Gen 7 (AMD)](lenovo/legion/16arha7/) | `<nixos-hardware/lenovo/legion/16arha7>` | | [Lenovo IdeaPad 2-in-1 16ahp9](lenovo/ideapad/16ahp9) | `<nixos-hardware/lenovo/ideapad/16ahp9>` | `lenovo-ideapad-16ahp9` |
| [Lenovo Legion T5 AMR5](lenovo/legion/t526amr5) | `<nixos-hardware/lenovo/legion/t526amr5>` | | [Lenovo IdeaPad S145 15api](lenovo/ideapad/s145-15api) | `<nixos-hardware/lenovo/ideapad/s145-15api>` | `lenovo-ideapad-s145-15api` |
| [Lenovo Legion Y530 15ICH](lenovo/legion/15ich) | `<nixos-hardware/lenovo/legion/15ich>` | | [Lenovo Legion 5 15ach6h](lenovo/legion/15ach6h) | `<nixos-hardware/lenovo/legion/15ach6h>` | `lenovo-legion-15ach6h` |
| [Lenovo ThinkPad A475](lenovo/thinkpad/a475) | `<nixos-hardware/lenovo/thinkpad/a475>` | | [Lenovo Legion 5 15arh05h](lenovo/legion/15arh05h) | `<nixos-hardware/lenovo/legion/15arh05h>` | `lenovo-legion-15arh05h` |
| [Lenovo ThinkPad E14 (AMD)](lenovo/thinkpad/e14/amd) | `<nixos-hardware/lenovo/thinkpad/e14/amd>` | | [Lenovo Legion 7 Slim 15ach6](lenovo/legion/15ach6) | `<nixos-hardware/lenovo/legion/15ach6>` | `lenovo-legion-15ach6` |
| [Lenovo ThinkPad E14 (Intel)](lenovo/thinkpad/e14/intel) | `<nixos-hardware/lenovo/thinkpad/e14/intel>` | | [Lenovo Legion 5 Pro 16ach6h](lenovo/legion/16ach6h) | `<nixos-hardware/lenovo/legion/16ach6h>` | `lenovo-legion-16ach6h` |
| [Lenovo ThinkPad E470](lenovo/thinkpad/e470) | `<nixos-hardware/lenovo/thinkpad/e470>` | | [Lenovo Legion 5 Pro 16ach6h (Hybrid)](lenovo/legion/16ach6h/hybrid) | `<nixos-hardware/lenovo/legion/16ach6h/hybrid>` | `lenovo-legion-16ach6h-hybrid` |
| [Lenovo ThinkPad E495](lenovo/thinkpad/e495) | `<nixos-hardware/lenovo/thinkpad/e495>` | | [Lenovo Legion 5 Pro 16ach6h (Nvidia)](lenovo/legion/16ach6h/nvidia) | `<nixos-hardware/lenovo/legion/16ach6h/nvidia>` | `lenovo-legion-16ach6h-nvidia` |
| [Lenovo ThinkPad L13 Yoga](lenovo/thinkpad/l13/yoga) | `<nixos-hardware/lenovo/thinkpad/l13/yoga>` | | [Lenovo Legion 5 Pro 16arh7h (IGPU Only)](lenovo/legion/16arh7h/igpu-only) | `<nixos-hardware/lenovo/legion/16arh7h/igpu-only>` | `lenovo-legion-16arh7h-igpu-only` |
| [Lenovo ThinkPad L13](lenovo/thinkpad/l13) | `<nixos-hardware/lenovo/thinkpad/l13>` | | [Lenovo Legion 5 Pro 16arh7h (Hybrid)](lenovo/legion/16arh7h/hybrid) | `<nixos-hardware/lenovo/legion/16arh7h/hybrid>` | `lenovo-legion-16arh7h-hybrid` |
| [Lenovo ThinkPad L14 (AMD)](lenovo/thinkpad/l14/amd) | `<nixos-hardware/lenovo/thinkpad/l14/amd>` | | [Lenovo Legion 5 Pro 16IAH7H (Intel)](lenovo/legion/16iah7h/) | `<nixos-hardware/lenovo/legion/16iah7h>` | `lenovo-legion-16iah7h` |
| [Lenovo ThinkPad L14 (Intel)](lenovo/thinkpad/l14/intel) | `<nixos-hardware/lenovo/thinkpad/l14/intel>` | | [Lenovo Legion 7 16achg6 (Hybrid)](lenovo/legion/16achg6/hybrid) | `<nixos-hardware/lenovo/legion/16achg6/hybrid>` | `lenovo-legion-16achg6-hybrid` |
| [Lenovo ThinkPad L480](lenovo/thinkpad/l480) | `<nixos-hardware/lenovo/thinkpad/l480>` | | [Lenovo Legion 7 16achg6 (Nvidia)](lenovo/legion/16achg6/nvidia) | `<nixos-hardware/lenovo/legion/16achg6/nvidia>` | `lenovo-legion-16achg6-nvidia` |
| [Lenovo ThinkPad P1 Gen 3](lenovo/thinkpad/p1/3th-gen) | `<nixos-hardware/lenovo/thinkpad/p1/3th-gen>` | | [Lenovo Legion 7i Pro 16irx8h (Intel)](lenovo/legion/16irx8h) | `<nixos-hardware/lenovo/legion/16irx8h>` | `lenovo-legion-16irx8h` |
| [Lenovo ThinkPad P14s AMD Gen 1](lenovo/thinkpad/p14s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen1>` | | [Lenovo Legion 7 Pro 16irx9h (Intel)](lenovo/legion/16irx9h) | `<nixos-hardware/lenovo/legion/16irx9h>` | `lenovo-legion-16irx9h` |
| [Lenovo ThinkPad P14s AMD Gen 2](lenovo/thinkpad/p14s/amd/gen2) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen2>` | | [Lenovo Legion Slim 7 Gen 7 (AMD)](lenovo/legion/16arha7/) | `<nixos-hardware/lenovo/legion/16arha7>` | `lenovo-legion-16arha7` |
| [Lenovo ThinkPad P14s AMD Gen 3](lenovo/thinkpad/p14s/amd/gen3) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen3>` | | [Lenovo Legion T5 AMR5](lenovo/legion/t526amr5) | `<nixos-hardware/lenovo/legion/t526amr5>` | `lenovo-legion-t526amr5` |
| [Lenovo ThinkPad P14s AMD Gen 4](lenovo/thinkpad/p14s/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen4>` | | [Lenovo Legion Y530 15ICH](lenovo/legion/15ich) | `<nixos-hardware/lenovo/legion/15ich>` | `lenovo-legion-15ich` |
| [Lenovo ThinkPad P14s Intel Gen 3](lenovo/thinkpad/p14s/intel/gen3) | `<nixos-hardware/lenovo/thinkpad/p14s/intel/gen3>` | | [Lenovo ThinkPad A475](lenovo/thinkpad/a475) | `<nixos-hardware/lenovo/thinkpad/a475>` | `lenovo-thinkpad-a475` |
| [Lenovo ThinkPad P16s AMD Gen 1](lenovo/thinkpad/p16s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/p16s/amd/gen1>` | | [Lenovo ThinkPad E14 (AMD)](lenovo/thinkpad/e14/amd) | `<nixos-hardware/lenovo/thinkpad/e14/amd>` | `lenovo-thinkpad-e14-amd` |
| [Lenovo ThinkPad P1](lenovo/thinkpad/p1) | `<nixos-hardware/lenovo/thinkpad/p1>` | | [Lenovo ThinkPad E14 (Intel - Gen 1)](lenovo/thinkpad/e14/intel) | `<nixos-hardware/lenovo/thinkpad/e14/intel>` | `lenovo-thinkpad-e14-intel` |
| [Lenovo ThinkPad P50](lenovo/thinkpad/p50) | `<nixos-hardware/lenovo/thinkpad/p50>` | | [Lenovo ThinkPad E14 (Intel - Gen 4)](lenovo/thinkpad/e14/intel/gen4) | `<nixos-hardware/lenovo/thinkpad/e14/intel/gen4>` | `lenovo-thinkpad-e14-intel-gen4` |
| [Lenovo ThinkPad P51](lenovo/thinkpad/p51) | `<nixos-hardware/lenovo/thinkpad/p51>` | | [Lenovo ThinkPad E14 (Intel - Gen 6)](lenovo/thinkpad/e14/intel/gen6) | `<nixos-hardware/lenovo/thinkpad/e14/intel/gen6>` | `lenovo-thinkpad-e14-intel-gen6` |
| [Lenovo ThinkPad P52](lenovo/thinkpad/p52) | `<nixos-hardware/lenovo/thinkpad/p52>` | | [Lenovo ThinkPad E15 (Intel)](lenovo/thinkpad/e15/intel) | `<nixos-hardware/lenovo/thinkpad/e15/intel>` | `lenovo-thinkpad-e15-intel` |
| [Lenovo ThinkPad P53](lenovo/thinkpad/p53) | `<nixos-hardware/lenovo/thinkpad/p53>` | | [Lenovo ThinkPad E470](lenovo/thinkpad/e470) | `<nixos-hardware/lenovo/thinkpad/e470>` | `lenovo-thinkpad-e470` |
| [Lenovo ThinkPad T14 AMD Gen 1](lenovo/thinkpad/t14/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen1>` | | [Lenovo ThinkPad E495](lenovo/thinkpad/e495) | `<nixos-hardware/lenovo/thinkpad/e495>` | `lenovo-thinkpad-e495` |
| [Lenovo ThinkPad T14 AMD Gen 2](lenovo/thinkpad/t14/amd/gen2) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen2>` | | [Lenovo ThinkPad L13 Yoga](lenovo/thinkpad/l13/yoga) | `<nixos-hardware/lenovo/thinkpad/l13/yoga>` | `lenovo-thinkpad-l13-yoga` |
| [Lenovo ThinkPad T14 AMD Gen 3](lenovo/thinkpad/t14/amd/gen3) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen3>` | | [Lenovo ThinkPad L13](lenovo/thinkpad/l13) | `<nixos-hardware/lenovo/thinkpad/l13>` | `lenovo-thinkpad-l13` |
| [Lenovo ThinkPad T14 AMD Gen 4](lenovo/thinkpad/t14/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen4>` | | [Lenovo ThinkPad L14 (AMD)](lenovo/thinkpad/l14/amd) | `<nixos-hardware/lenovo/thinkpad/l14/amd>` | `lenovo-thinkpad-l14-amd` |
| [Lenovo ThinkPad T14 AMD Gen 5](lenovo/thinkpad/t14/amd/gen5) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen5>` | | [Lenovo ThinkPad L14 (Intel)](lenovo/thinkpad/l14/intel) | `<nixos-hardware/lenovo/thinkpad/l14/intel>` | `lenovo-thinkpad-l14-intel` |
| [Lenovo ThinkPad T14](lenovo/thinkpad/t14) | `<nixos-hardware/lenovo/thinkpad/t14>` | | [Lenovo ThinkPad L480](lenovo/thinkpad/l480) | `<nixos-hardware/lenovo/thinkpad/l480>` | `lenovo-thinkpad-l480` |
| [Lenovo ThinkPad T14s AMD Gen 1](lenovo/thinkpad/t14s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/t14s/amd/gen1>` | | [Lenovo ThinkPad P1 Gen 3](lenovo/thinkpad/p1/3th-gen) | `<nixos-hardware/lenovo/thinkpad/p1/3th-gen>` | `lenovo-thinkpad-p1-gen3` |
| [Lenovo ThinkPad T14s AMD Gen 4](lenovo/thinkpad/t14s/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/t14s/amd/gen4>` | | [Lenovo ThinkPad P14s AMD Gen 1](lenovo/thinkpad/p14s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen1>` | `lenovo-thinkpad-p14s-amd-gen1` |
| [Lenovo ThinkPad T14s](lenovo/thinkpad/t14s) | `<nixos-hardware/lenovo/thinkpad/t14s>` | | [Lenovo ThinkPad P14s AMD Gen 2](lenovo/thinkpad/p14s/amd/gen2) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen2>` | `lenovo-thinkpad-p14s-amd-gen2` |
| [Lenovo ThinkPad T410](lenovo/thinkpad/t410) | `<nixos-hardware/lenovo/thinkpad/t410>` | | [Lenovo ThinkPad P14s AMD Gen 3](lenovo/thinkpad/p14s/amd/gen3) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen3>` | `lenovo-thinkpad-p14s-amd-gen3` |
| [Lenovo ThinkPad T420](lenovo/thinkpad/t420) | `<nixos-hardware/lenovo/thinkpad/t420>` | | [Lenovo ThinkPad P14s AMD Gen 4](lenovo/thinkpad/p14s/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen4>` | `lenovo-thinkpad-p14s-amd-gen4` |
| [Lenovo ThinkPad T430](lenovo/thinkpad/t430) | `<nixos-hardware/lenovo/thinkpad/t430>` | | [Lenovo ThinkPad P14s AMD Gen 5](lenovo/thinkpad/p14s/amd/gen5) | `<nixos-hardware/lenovo/thinkpad/p14s/amd/gen5>` | `lenovo-thinkpad-p14s-amd-gen5` |
| [Lenovo ThinkPad T440p](lenovo/thinkpad/t440p) | `<nixos-hardware/lenovo/thinkpad/t440p>` | | [Lenovo ThinkPad P14s Intel Gen 3](lenovo/thinkpad/p14s/intel/gen3) | `<nixos-hardware/lenovo/thinkpad/p14s/intel/gen3>` | `lenovo-thinkpad-p14s-intel-gen3`|
| [Lenovo ThinkPad T440s](lenovo/thinkpad/t440s) | `<nixos-hardware/lenovo/thinkpad/t440s>` | | [Lenovo ThinkPad P14s Intel Gen 5](lenovo/thinkpad/p14s/intel/gen5) | `<nixos-hardware/lenovo/thinkpad/p14s/intel/gen5>` | `lenovo-thinkpad-p14s-intel-gen5`|
| [Lenovo ThinkPad T450s](lenovo/thinkpad/t450s) | `<nixos-hardware/lenovo/thinkpad/t450s>` | | [Lenovo ThinkPad P16s AMD Gen 1](lenovo/thinkpad/p16s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/p16s/amd/gen1>` | `lenovo-thinkpad-p16s-amd-gen1` |
| [Lenovo ThinkPad T460](lenovo/thinkpad/t460) | `<nixos-hardware/lenovo/thinkpad/t460>` | | [Lenovo ThinkPad P16s AMD Gen 2](lenovo/thinkpad/p16s/amd/gen2) | `<nixos-hardware/lenovo/thinkpad/p16s/amd/gen2>` | `lenovo-thinkpad-p16s-amd-gen2` |
| [Lenovo ThinkPad T460p](lenovo/thinkpad/t460p) | `<nixos-hardware/lenovo/thinkpad/t460p>` | | [Lenovo ThinkPad P16s Intel Gen 2](lenovo/thinkpad/p16s/intel/gen2) | `<nixos-hardware/lenovo/thinkpad/p16s/intel/gen2>` | `lenovo-thinkpad-p16s-intel-gen2`|
| [Lenovo ThinkPad T460s](lenovo/thinkpad/t460s) | `<nixos-hardware/lenovo/thinkpad/t460s>` | | [Lenovo ThinkPad P1](lenovo/thinkpad/p1) | `<nixos-hardware/lenovo/thinkpad/p1>` | `lenovo-thinkpad-p1` |
| [Lenovo ThinkPad T470s](lenovo/thinkpad/t470s) | `<nixos-hardware/lenovo/thinkpad/t470s>` | | [Lenovo ThinkPad P43s](lenovo/thinkpad/p43s) | `<nixos-hardware/lenovo/thinkpad/p43s>` | `lenovo-thinkpad-p43s` |
| [Lenovo ThinkPad T480](lenovo/thinkpad/t480) | `<nixos-hardware/lenovo/thinkpad/t480>` | | [Lenovo ThinkPad P50](lenovo/thinkpad/p50) | `<nixos-hardware/lenovo/thinkpad/p50>` | `lenovo-thinkpad-p50` |
| [Lenovo ThinkPad T480s](lenovo/thinkpad/t480s) | `<nixos-hardware/lenovo/thinkpad/t480s>` | | [Lenovo ThinkPad P51](lenovo/thinkpad/p51) | `<nixos-hardware/lenovo/thinkpad/p51>` | `lenovo-thinkpad-p51` |
| [Lenovo ThinkPad T490](lenovo/thinkpad/t490) | `<nixos-hardware/lenovo/thinkpad/t490>` | | [Lenovo ThinkPad P52](lenovo/thinkpad/p52) | `<nixos-hardware/lenovo/thinkpad/p52>` | `lenovo-thinkpad-p52` |
| [Lenovo ThinkPad T490s](lenovo/thinkpad/t490s) | `<nixos-hardware/lenovo/thinkpad/t490s>` | | [Lenovo ThinkPad P53](lenovo/thinkpad/p53) | `<nixos-hardware/lenovo/thinkpad/p53>` | `lenovo-thinkpad-p53` |
| [Lenovo ThinkPad T495](lenovo/thinkpad/t495) | `<nixos-hardware/lenovo/thinkpad/t495>` | | [Lenovo ThinkPad T14 AMD Gen 1](lenovo/thinkpad/t14/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen1>` | `lenovo-thinkpad-t14-amd-gen1` |
| [Lenovo ThinkPad T520](lenovo/thinkpad/t520) | `<nixos-hardware/lenovo/thinkpad/t520>` | | [Lenovo ThinkPad T14 AMD Gen 2](lenovo/thinkpad/t14/amd/gen2) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen2>` | `lenovo-thinkpad-t14-amd-gen2` |
| [Lenovo ThinkPad T550](lenovo/thinkpad/t550) | `<nixos-hardware/lenovo/thinkpad/t550>` | | [Lenovo ThinkPad T14 AMD Gen 3](lenovo/thinkpad/t14/amd/gen3) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen3>` | `lenovo-thinkpad-t14-amd-gen3` |
| [Lenovo ThinkPad T590](lenovo/thinkpad/t590) | `<nixos-hardware/lenovo/thinkpad/t590>` | | [Lenovo ThinkPad T14 AMD Gen 4](lenovo/thinkpad/t14/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen4>` | `lenovo-thinkpad-t14-amd-gen4` |
| [Lenovo ThinkPad W520](lenovo/thinkpad/w520) | `<nixos-hardware/lenovo/thinkpad/w520>` | | [Lenovo ThinkPad T14 AMD Gen 5](lenovo/thinkpad/t14/amd/gen5) | `<nixos-hardware/lenovo/thinkpad/t14/amd/gen5>` | `lenovo-thinkpad-t14-amd-gen5` |
| [Lenovo ThinkPad X1 Yoga](lenovo/thinkpad/x1/yoga) | `<nixos-hardware/lenovo/thinkpad/x1/yoga>` | | [Lenovo ThinkPad T14](lenovo/thinkpad/t14) | `<nixos-hardware/lenovo/thinkpad/t14>` | `lenovo-thinkpad-t14` |
| [Lenovo ThinkPad X1 Yoga Gen 7](lenovo/thinkpad/x1/yoga/7th-gen/) | `<nixos-hardware/lenovo/thinkpad/x1/yoga/7th-gen>` | | [Lenovo ThinkPad T14s AMD Gen 1](lenovo/thinkpad/t14s/amd/gen1) | `<nixos-hardware/lenovo/thinkpad/t14s/amd/gen1>` | `lenovo-thinkpad-t14s-amd-gen1` |
| [Lenovo ThinkPad X1 (6th Gen)](lenovo/thinkpad/x1/6th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/6th-gen>` | | [Lenovo ThinkPad T14s AMD Gen 4](lenovo/thinkpad/t14s/amd/gen4) | `<nixos-hardware/lenovo/thinkpad/t14s/amd/gen4>` | `lenovo-thinkpad-t14s-amd-gen4` |
| [Lenovo ThinkPad X1 (7th Gen)](lenovo/thinkpad/x1/7th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/7th-gen>` | | [Lenovo ThinkPad T14s](lenovo/thinkpad/t14s) | `<nixos-hardware/lenovo/thinkpad/t14s>` | `lenovo-thinkpad-t14s` |
| [Lenovo ThinkPad X1 (9th Gen)](lenovo/thinkpad/x1/9th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/9th-gen>` | | [Lenovo ThinkPad T410](lenovo/thinkpad/t410) | `<nixos-hardware/lenovo/thinkpad/t410>` | `lenovo-thinkpad-t410` |
| [Lenovo ThinkPad X1 (10th Gen)](lenovo/thinkpad/x1/10th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/10th-gen>` | | [Lenovo ThinkPad T420](lenovo/thinkpad/t420) | `<nixos-hardware/lenovo/thinkpad/t420>` | `lenovo-thinkpad-t420` |
| [Lenovo ThinkPad X1 (11th Gen)](lenovo/thinkpad/x1/11th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/11th-gen>` | | [Lenovo ThinkPad T430](lenovo/thinkpad/t430) | `<nixos-hardware/lenovo/thinkpad/t430>` | `lenovo-thinkpad-t430` |
| [Lenovo ThinkPad X1 (12th Gen)](lenovo/thinkpad/x1/12th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/12th-gen>` | | [Lenovo ThinkPad T440p](lenovo/thinkpad/t440p) | `<nixos-hardware/lenovo/thinkpad/t440p>` | `lenovo-thinkpad-t440p` |
| [Lenovo ThinkPad X1 Extreme Gen 2](lenovo/thinkpad/x1-extreme/gen2) | `<nixos-hardware/lenovo/thinkpad/x1-extreme/gen2>` | | [Lenovo ThinkPad T440s](lenovo/thinkpad/t440s) | `<nixos-hardware/lenovo/thinkpad/t440s>` | `lenovo-thinkpad-t440s` |
| [Lenovo ThinkPad X1 Extreme Gen 3](lenovo/thinkpad/x1-extreme/gen3) | `<nixos-hardware/lenovo/thinkpad/x1-extreme/gen3>` | | [Lenovo ThinkPad T450s](lenovo/thinkpad/t450s) | `<nixos-hardware/lenovo/thinkpad/t450s>` | `lenovo-thinkpad-t450s` |
| [Lenovo ThinkPad X1 Extreme Gen 4](lenovo/thinkpad/x1-extreme/gen4) | `<nixos-hardware/lenovo/thinkpad/x1-extreme/gen4>` | | [Lenovo ThinkPad T460](lenovo/thinkpad/t460) | `<nixos-hardware/lenovo/thinkpad/t460>` | `lenovo-thinkpad-t460` |
| [Lenovo ThinkPad X1 Nano Gen 1](lenovo/thinkpad/x1-nano/gen1) | `<nixos-hardware/lenovo/thinkpad/x1-nano/gen1>` | | [Lenovo ThinkPad T460p](lenovo/thinkpad/t460p) | `<nixos-hardware/lenovo/thinkpad/t460p>` | `lenovo-thinkpad-t460p` |
| [Lenovo ThinkPad X13 Yoga](lenovo/thinkpad/x13/yoga) | `<nixos-hardware/lenovo/thinkpad/x13/yoga>` | | [Lenovo ThinkPad T460s](lenovo/thinkpad/t460s) | `<nixos-hardware/lenovo/thinkpad/t460s>` | `lenovo-thinkpad-t460s` |
| [Lenovo ThinkPad X13 Yoga (3th Gen)](lenovo/thinkpad/x13/yoga/3th-gen) | `<nixos-hardware/lenovo/thinkpad/x13/yoga/3th-gen>` | | [Lenovo ThinkPad T470s](lenovo/thinkpad/t470s) | `<nixos-hardware/lenovo/thinkpad/t470s>` | `lenovo-thinkpad-t470s` |
| [Lenovo ThinkPad X13 (Intel)](lenovo/thinkpad/x13/intel) | `<nixos-hardware/lenovo/thinkpad/x13/intel>` | | [Lenovo ThinkPad T480](lenovo/thinkpad/t480) | `<nixos-hardware/lenovo/thinkpad/t480>` | `lenovo-thinkpad-t480` |
| [Lenovo ThinkPad X13 (AMD)](lenovo/thinkpad/x13/amd) | `<nixos-hardware/lenovo/thinkpad/x13/amd>` | | [Lenovo ThinkPad T480s](lenovo/thinkpad/t480s) | `<nixos-hardware/lenovo/thinkpad/t480s>` | `lenovo-thinkpad-t480s` |
| [Lenovo ThinkPad X140e](lenovo/thinkpad/x140e) | `<nixos-hardware/lenovo/thinkpad/x140e>` | | [Lenovo ThinkPad T490](lenovo/thinkpad/t490) | `<nixos-hardware/lenovo/thinkpad/t490>` | `lenovo-thinkpad-t490` |
| [Lenovo ThinkPad X200s](lenovo/thinkpad/x200s) | `<nixos-hardware/lenovo/thinkpad/x200s>` | | [Lenovo ThinkPad T490s](lenovo/thinkpad/t490s) | `<nixos-hardware/lenovo/thinkpad/t490s>` | `lenovo-thinkpad-t490s` |
| [Lenovo ThinkPad X220](lenovo/thinkpad/x220) | `<nixos-hardware/lenovo/thinkpad/x220>` | | [Lenovo ThinkPad T495](lenovo/thinkpad/t495) | `<nixos-hardware/lenovo/thinkpad/t495>` | `lenovo-thinkpad-t495` |
| [Lenovo ThinkPad X230](lenovo/thinkpad/x230) | `<nixos-hardware/lenovo/thinkpad/x230>` | | [Lenovo ThinkPad T520](lenovo/thinkpad/t520) | `<nixos-hardware/lenovo/thinkpad/t520>` | `lenovo-thinkpad-t520` |
| [Lenovo ThinkPad X250](lenovo/thinkpad/x250) | `<nixos-hardware/lenovo/thinkpad/x250>` | | [Lenovo ThinkPad T550](lenovo/thinkpad/t550) | `<nixos-hardware/lenovo/thinkpad/t550>` | `lenovo-thinkpad-t550` |
| [Lenovo ThinkPad X260](lenovo/thinkpad/x260) | `<nixos-hardware/lenovo/thinkpad/x260>` | | [Lenovo ThinkPad T590](lenovo/thinkpad/t590) | `<nixos-hardware/lenovo/thinkpad/t590>` | `lenovo-thinkpad-t590` |
| [Lenovo ThinkPad X270](lenovo/thinkpad/x270) | `<nixos-hardware/lenovo/thinkpad/x270>` | | [Lenovo ThinkPad W520](lenovo/thinkpad/w520) | `<nixos-hardware/lenovo/thinkpad/w520>` | `lenovo-thinkpad-w520` |
| [Lenovo ThinkPad X280](lenovo/thinkpad/x280) | `<nixos-hardware/lenovo/thinkpad/x280>` | | [Lenovo ThinkPad X1 Yoga](lenovo/thinkpad/x1/yoga) | `<nixos-hardware/lenovo/thinkpad/x1/yoga>` | `lenovo-thinkpad-x1-yoga` |
| [Lenovo ThinkPad X390](lenovo/thinkpad/x390) | `<nixos-hardware/lenovo/thinkpad/x390>` | | [Lenovo ThinkPad X1 Yoga Gen 7](lenovo/thinkpad/x1/yoga/7th-gen/) | `<nixos-hardware/lenovo/thinkpad/x1/yoga/7th-gen>` | `lenovo-thinkpad-x1-yoga-7th-gen` |
| [Lenovo ThinkPad Z Series](lenovo/thinkpad/z) | `<nixos-hardware/lenovo/thinkpad/z>` | | [Lenovo ThinkPad X1 Yoga Gen 8](lenovo/thinkpad/x1/yoga/8th-gen/) | `<nixos-hardware/lenovo/thinkpad/x1/yoga/8th-gen>` | `lenovo-thinkpad-x1-yoga-8th-gen` |
| [Lenovo ThinkPad Z13 Gen 1](lenovo/thinkpad/z/gen1/z13) | `<nixos-hardware/lenovo/thinkpad/z/gen1/z13>` | | [Lenovo ThinkPad X1 (2nd Gen)](lenovo/thinkpad/x1/2nd-gen) | `<nixos-hardware/lenovo/thinkpad/x1/2nd-gen>` | `lenovo-thinkpad-x1-2nd-gen` |
| [Lenovo ThinkPad Z13 Gen 2](lenovo/thinkpad/z/gen2/z13) | `<nixos-hardware/lenovo/thinkpad/z/gen2/z13>` | | [Lenovo ThinkPad X1 (6th Gen)](lenovo/thinkpad/x1/6th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/6th-gen>` | `lenovo-thinkpad-x1-6th-gen` |
| [LENOVO Yoga 6 13ALC6 82ND](lenovo/yoga/6/13ALC6) | `<nixos-hardware/lenovo/yoga/6/13ALC6>` | | [Lenovo ThinkPad X1 (7th Gen)](lenovo/thinkpad/x1/7th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/7th-gen>` | `lenovo-thinkpad-x1-7th-gen` |
| [LENOVO Yoga Slim 7 Pro-X 14ARH7 82ND](lenovo/yoga/7/14ARH7/amdgpu) | `<nixos-hardware/lenovo/yoga/7/14ARH7/amdgpu>` | | [Lenovo ThinkPad X1 (9th Gen)](lenovo/thinkpad/x1/9th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/9th-gen>` | `lenovo-thinkpad-x1-9th-gen` |
| [LENOVO Yoga Slim 7 Pro-X 14ARH7 82ND](lenovo/yoga/7/14ARH7/nvidia) | `<nixos-hardware/lenovo/yoga/7/14ARH7/nvidia>` | | [Lenovo ThinkPad X1 (10th Gen)](lenovo/thinkpad/x1/10th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/10th-gen>` | `lenovo-thinkpad-x1-10th-gen` |
| [Lenovo Yoga Slim 7i Pro X 14IAH7 (Integrated)](lenovo/yoga/7/14IAH7/integrated) |`<nixos-hardware/lenovo/yoga/7/14IAH7/integrated>` | | [Lenovo ThinkPad X1 (11th Gen)](lenovo/thinkpad/x1/11th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/11th-gen>` | `lenovo-thinkpad-x1-11th-gen` |
| [Lenovo Yoga Slim 7i Pro X 14IAH7 (Hybrid)](lenovo/yoga/7/14IAH7/hybrid) |`<nixos-hardware/lenovo/yoga/7/14IAH7/hybrid>` | | [Lenovo ThinkPad X1 (12th Gen)](lenovo/thinkpad/x1/12th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/12th-gen>` | `lenovo-thinkpad-x1-12th-gen` |
| [LENOVO Yoga 7 Slim Gen8](lenovo/yoga/7/slim/gen8) | `<nixos-hardware/lenovo/yoga/7/slim/gen8>` | | [Lenovo ThinkPad X1 (13th Gen)](lenovo/thinkpad/x1/13th-gen) | `<nixos-hardware/lenovo/thinkpad/x1/13th-gen>` | `lenovo-thinkpad-x1-13th-gen` |
| [MSI B550-A PRO](msi/b550-a-pro) | `<nixos-hardware/msi/b550-a-pro>` | | [Lenovo ThinkPad X1 Extreme Gen 2](lenovo/thinkpad/x1-extreme/gen2) | `<nixos-hardware/lenovo/thinkpad/x1-extreme/gen2>` | `lenovo-thinkpad-x1-extreme-gen2` |
| [MSI B350 TOMAHAWK](msi/b350-tomahawk) | `<nixos-hardware/msi/b350-tomahawk>` | | [Lenovo ThinkPad X1 Extreme Gen 3](lenovo/thinkpad/x1-extreme/gen3) | `<nixos-hardware/lenovo/thinkpad/x1-extreme/gen3>` | `lenovo-thinkpad-x1-extreme-gen3` |
| [MSI GS60 2QE](msi/gs60) | `<nixos-hardware/msi/gs60>` | | [Lenovo ThinkPad X1 Extreme Gen 4](lenovo/thinkpad/x1-extreme/gen4) | `<nixos-hardware/lenovo/thinkpad/x1-extreme/gen4>` | `lenovo-thinkpad-x1-extreme-gen4` |
| [MSI GL62/CX62](msi/gl62) | `<nixos-hardware/msi/gl62>` | | [Lenovo ThinkPad X1 Nano Gen 1](lenovo/thinkpad/x1-nano/gen1) | `<nixos-hardware/lenovo/thinkpad/x1-nano/gen1>` | `lenovo-thinkpad-x1-nano-gen1` |
| [MSI GL65 10SDR-492](msi/gl65/10SDR-492) | `<nixos-hardware/msi/gl65/10SDR-492>` | | [Lenovo ThinkPad X13s](lenovo/thinkpad/x13s) | `<nixos-hardware/lenovo/thinkpad/x13s>` | `lenovo-thinkpad-x13s` |
| [Microchip Icicle Kit](microchip/icicle-kit) | `<nixos-hardware/microchip/icicle-kit>` | | [Lenovo ThinkPad X13 Yoga](lenovo/thinkpad/x13/yoga) | `<nixos-hardware/lenovo/thinkpad/x13/yoga>` | `lenovo-thinkpad-x13-yoga` |
| [Microsoft Surface Go](microsoft/surface/surface-go) | `<nixos-hardware/microsoft/surface/surface-go>` | | [Lenovo ThinkPad X13 Yoga (3th Gen)](lenovo/thinkpad/x13/yoga/3th-gen) | `<nixos-hardware/lenovo/thinkpad/x13/yoga/3th-gen>` | `lenovo-thinkpad-x13-yoga-3th-gen` |
| [Microsoft Surface Pro (Intel)](microsoft/surface/surface-pro-intel) | `<nixos-hardware/microsoft/surface/surface-pro-intel>` | | [Lenovo ThinkPad X13 (Intel)](lenovo/thinkpad/x13/intel) | `<nixos-hardware/lenovo/thinkpad/x13/intel>` | `lenovo-thinkpad-x13-intel` |
| [Microsoft Surface Laptop (AMD)](microsoft/surface/surface-laptop-amd) | `<nixos-hardware/microsoft/surface/surface-laptop-amd>` | | [Lenovo ThinkPad X13 (AMD)](lenovo/thinkpad/x13/amd) | `<nixos-hardware/lenovo/thinkpad/x13/amd>` | `lenovo-thinkpad-x13-amd` |
| [Microsoft Surface Range (Common Modules)](microsoft/surface/common) | `<nixos-hardware/microsoft/surface/common>` | | [Lenovo ThinkPad X140e](lenovo/thinkpad/x140e) | `<nixos-hardware/lenovo/thinkpad/x140e>` | `lenovo-thinkpad-x140e` |
| [Microsoft Surface Pro 3](microsoft/surface-pro/3) | `<nixos-hardware/microsoft/surface-pro/3>` | | [Lenovo ThinkPad X200s](lenovo/thinkpad/x200s) | `<nixos-hardware/lenovo/thinkpad/x200s>` | `lenovo-thinkpad-x200s` |
| [Microsoft Surface Pro 9](microsoft/surface-pro/9) | `<nixos-hardware/microsoft/surface-pro/9>` | | [Lenovo ThinkPad X220](lenovo/thinkpad/x220) | `<nixos-hardware/lenovo/thinkpad/x220>` | `lenovo-thinkpad-x220` |
| [Morefine M600](morefine/m600) | `<nixos-hardware/morefine/m600>` | | [Lenovo ThinkPad X230](lenovo/thinkpad/x230) | `<nixos-hardware/lenovo/thinkpad/x230>` | `lenovo-thinkpad-x230` |
| [Minisforum V3](minisforum/v3) | `<nixos-hardware/minisforum/v3>` | | [Lenovo ThinkPad X250](lenovo/thinkpad/x250) | `<nixos-hardware/lenovo/thinkpad/x250>` | `lenovo-thinkpad-x250` |
| [NXP iMX8 MPlus Evaluation Kit](nxp/imx8mp-evk) | `<nixos-hardware/nxp/imx8mp-evk>` | | [Lenovo ThinkPad X260](lenovo/thinkpad/x260) | `<nixos-hardware/lenovo/thinkpad/x260>` | `lenovo-thinkpad-x260` |
| [NXP iMX8 MQuad Evaluation Kit](nxp/imx8mq-evk) | `<nixos-hardware/nxp/imx8mq-evk>` | | [Lenovo ThinkPad X270](lenovo/thinkpad/x270) | `<nixos-hardware/lenovo/thinkpad/x270>` | `lenovo-thinkpad-x270` |
| [Hardkernel Odroid HC4](hardkernel/odroid-hc4/default.nix) | `<nixos-hardware/hardkernel/odroid-hc4>` | | [Lenovo ThinkPad X280](lenovo/thinkpad/x280) | `<nixos-hardware/lenovo/thinkpad/x280>` | `lenovo-thinkpad-x280` |
| [Hardkernel Odroid H3](hardkernel/odroid-h3/default.nix) | `<nixos-hardware/hardkernel/odroid-h3>` | | [Lenovo ThinkPad X390](lenovo/thinkpad/x390) | `<nixos-hardware/lenovo/thinkpad/x390>` | `lenovo-thinkpad-x390` |
| [Hardkernel Odroid H4](hardkernel/odroid-h4/default.nix) | `<nixos-hardware/hardkernel/odroid-h4>` | | [Lenovo ThinkPad Z Series](lenovo/thinkpad/z) | `<nixos-hardware/lenovo/thinkpad/z>` | `lenovo-thinkpad-z` |
| [Omen 14-fb0798ng](omen/14-fb0798ng) | `<nixos-hardware/omen/14-fb0798ng>` | | [Lenovo ThinkPad Z13 Gen 1](lenovo/thinkpad/z/gen1/z13) | `<nixos-hardware/lenovo/thinkpad/z/gen1/z13>` | `lenovo-thinkpad-z-gen1-z13` |
| [Omen 15-ce002ns](omen/15-ce002ns) | `<nixos-hardware/omen/15-ce002ns>` | | [Lenovo ThinkPad Z13 Gen 2](lenovo/thinkpad/z/gen2/z13) | `<nixos-hardware/lenovo/thinkpad/z/gen2/z13>` | `lenovo-thinkpad-z-gen2-z13` |
| [Omen 15-en0010ca](omen/15-en0010ca) | `<nixos-hardware/omen/15-en0010ca>` | | [Lenovo XiaoXin Pro 14imh9 2024](lenovo/ideapad/14imh9) | `<nixos-hardware/lenovo/ideapad/14imh9>` | `lenovo-ideapad-14imh9` |
| [Omen 16-n0005ne](omen/16-n0005ne) | `<nixos-hardware/omen/16-n0005ne>` | | [LENOVO Yoga 6 13ALC6 82ND](lenovo/yoga/6/13ALC6) | `<nixos-hardware/lenovo/yoga/6/13ALC6>` | `lenovo-yoga-6-13ALC6` |
| [Omen 16-n0280nd](/omen/16-n0280nd) | `<nixos-hardware/omen/16-n0280nd>` | | [LENOVO Yoga Slim 7 Pro-X 14ARH7 82ND](lenovo/yoga/7/14ARH7/amdgpu) | `<nixos-hardware/lenovo/yoga/7/14ARH7/amdgpu>` | `lenovo-yoga-7-14ARH7-amdgpu` |
| [Omen 15-en1007sa](omen/15-en1007sa) | `<nixos-hardware/omen/15-en1007sa>` | | [LENOVO Yoga Slim 7 Pro-X 14ARH7 82ND](lenovo/yoga/7/14ARH7/nvidia) | `<nixos-hardware/lenovo/yoga/7/14ARH7/nvidia>` | `lenovo-yoga-7-14ARH7-nvidia` |
| [Omen 15-en0002np](omen/15-en0002np) | `<nixos-hardware/omen/15-en0002np>` | | [Lenovo Yoga Slim 7i Pro X 14IAH7 (Integrated)](lenovo/yoga/7/14IAH7/integrated) | `<nixos-hardware/lenovo/yoga/7/14IAH7/integrated>` | `lenovo-yoga-7-14IAH7-integrated` |
| [One-Netbook OneNetbook 4](onenetbook/4) | `<nixos-hardware/onenetbook/4>` | | [Lenovo Yoga Slim 7i Pro X 14IAH7 (Hybrid)](lenovo/yoga/7/14IAH7/hybrid) | `<nixos-hardware/lenovo/yoga/7/14IAH7/hybrid>` | `lenovo-yoga-7-14IAH7-hybrid` |
| [Panasonic Let's Note CF-LX4](panasonic/letsnote/cf-lx4) | `<nixos-hardware/panasonic/letsnote/cf-lx4>` | | [Lenovo Yoga Slim 7 14ILL10](lenovo/yoga/7/14ILL10) | `<nixos-hardware/lenovo/yoga/7/14ILL10>` | `lenovo-yoga-7-14ILL10` |
| [PC Engines APU](pcengines/apu) | `<nixos-hardware/pcengines/apu>` | | [LENOVO Yoga 7 Slim Gen8](lenovo/yoga/7/slim/gen8) | `<nixos-hardware/lenovo/yoga/7/slim/gen8>` | `lenovo-yoga-7-slim-gen8` |
| [PINE64 Pinebook Pro](pine64/pinebook-pro/) | `<nixos-hardware/pine64/pinebook-pro>` | | [MSI B550-A PRO](msi/b550-a-pro) | `<nixos-hardware/msi/b550-a-pro>` | `msi-b550-a-pro` |
| [PINE64 RockPro64](pine64/rockpro64/) | `<nixos-hardware/pine64/rockpro64>` | | [MSI B350 TOMAHAWK](msi/b350-tomahawk) | `<nixos-hardware/msi/b350-tomahawk>` | `msi-b350-tomahawk` |
| [PINE64 STAR64](pine64/star64/) | `<nixos-hardware/pine64/star64>` | | [MSI GS60 2QE](msi/gs60) | `<nixos-hardware/msi/gs60>` | `msi-gs60` |
| [Protectli VP4670](protectli/vp4670/) | `<nixos-hardware/protectli/vp4670>` | | [MSI GL62/CX62](msi/gl62) | `<nixos-hardware/msi/gl62>` | `msi-gl62` |
| [Purism Librem 13v3](purism/librem/13v3) | `<nixos-hardware/purism/librem/13v3>` | | [MSI GL65 10SDR-492](msi/gl65/10SDR-492) | `<nixos-hardware/msi/gl65/10SDR-492>` | `msi-gl65-10SDR-492` |
| [Purism Librem 15v3](purism/librem/13v3) | `<nixos-hardware/purism/librem/15v3>` | | [Microchip Icicle Kit](microchip/icicle-kit) | `<nixos-hardware/microchip/icicle-kit>` | `microchip-icicle-kit` |
| [Purism Librem 5r4](purism/librem/5r4) | `<nixos-hardware/purism/librem/5r4>` | | [Microsoft Surface Go](microsoft/surface/surface-go) | `<nixos-hardware/microsoft/surface/surface-go>` | `microsoft-surface-surface-go` |
| [Radxa ROCK 4C+](radxa/rock-4c-plus) | `<nixos-hardware/radxa/rock-4c-plus>` | | [Microsoft Surface Pro (Intel)](microsoft/surface/surface-pro-intel) | `<nixos-hardware/microsoft/surface/surface-pro-intel>` | `microsoft-surface-surface-pro-intel` |
| [Raspberry Pi 2](raspberry-pi/2) | `<nixos-hardware/raspberry-pi/2>` | | [Microsoft Surface Laptop (AMD)](microsoft/surface/surface-laptop-amd) | `<nixos-hardware/microsoft/surface/surface-laptop-amd>` | `microsoft-surface-surface-laptop-amd` |
| [Raspberry Pi 3](raspberry-pi/3) | `<nixos-hardware/raspberry-pi/3>` | | [Microsoft Surface Range (Common Modules)](microsoft/surface/common) | `<nixos-hardware/microsoft/surface/common>` | `microsoft-surface-common` |
| [Raspberry Pi 4](raspberry-pi/4) | `<nixos-hardware/raspberry-pi/4>` | | [Microsoft Surface Pro 3](microsoft/surface-pro/3) | `<nixos-hardware/microsoft/surface-pro/3>` | `microsoft-surface-pro-3` |
| [Raspberry Pi 5](raspberry-pi/5) | `<nixos-hardware/raspberry-pi/5>` | | [Microsoft Surface Pro 9](microsoft/surface-pro/9) | `<nixos-hardware/microsoft/surface-pro/9>` | `microsoft-surface-pro-9` |
| [Samsung Series 9 NP900X3C](samsung/np900x3c) | `<nixos-hardware/samsung/np900x3c>` | | [Morefine M600](morefine/m600) | `<nixos-hardware/morefine/m600>` | `morefine-m600` |
| [Slimbook Hero RPL-RTX](slimbook/hero/rpl-rtx) | `<nixos-hardware/slimbook/hero/rpl-rtx>` | | [Minisforum V3](minisforum/v3) | `<nixos-hardware/minisforum/v3>` | `minisforum-v3` |
| [StarFive VisionFive v1](starfive/visionfive/v1) | `<nixos-hardware/starfive/visionfive/v1>` | | [NXP iMX8 MPlus Evaluation Kit](nxp/imx8mp-evk) | `<nixos-hardware/nxp/imx8mp-evk>` | `nxp-imx8mp-evk` |
| [StarFive VisionFive 2](starfive/visionfive/v2) | `<nixos-hardware/starfive/visionfive/v2>` | | [NXP iMX8 MQuad Evaluation Kit](nxp/imx8mq-evk) | `<nixos-hardware/nxp/imx8mq-evk>` | `nxp-imx8mq-evk` |
| [StarLabs StarLite 5 (I5)](starlabs/starlite/i5) | `<nixos-hardware/starlabs/starlite/i5>` | | [Hardkernel Odroid HC4](hardkernel/odroid-hc4/default.nix) | `<nixos-hardware/hardkernel/odroid-hc4>` | `hardkernel-odroid-hc4` |
| [Supermicro A1SRi-2758F](supermicro/a1sri-2758f) | `<nixos-hardware/supermicro/a1sri-2758f>` | | [Hardkernel Odroid H3](hardkernel/odroid-h3/default.nix) | `<nixos-hardware/hardkernel/odroid-h3>` | `hardkernel-odroid-h3` |
| [Supermicro M11SDV-8C-LN4F](supermicro/m11sdv-8c-ln4f) | `<nixos-hardware/supermicro/m11sdv-8c-ln4f>` | | [Hardkernel Odroid H4](hardkernel/odroid-h4/default.nix) | `<nixos-hardware/hardkernel/odroid-h4>` | `hardkernel-odroid-h4` |
| [Supermicro X10SLL-F](supermicro/x10sll-f) | `<nixos-hardware/supermicro/x10sll-f>` | | [Omen 14-fb0798ng](omen/14-fb0798ng) | `<nixos-hardware/omen/14-fb0798ng>` | `omen-14-fb0798ng` |
| [Supermicro X12SCZ-TLN4F](supermicro/x12scz-tln4f) | `<nixos-hardware/supermicro/x12scz-tln4f>` | | [Omen 15-ce002ns](omen/15-ce002ns) | `<nixos-hardware/omen/15-ce002ns>` | `omen-15-ce002ns` |
| [System76 (generic)](system76) | `<nixos-hardware/system76>` | | [Omen 15-en0010ca](omen/15-en0010ca) | `<nixos-hardware/omen/15-en0010ca>` | `omen-15-en0010ca` |
| [System76 Darter Pro 6](system76/darp6) | `<nixos-hardware/system76/darp6>` | | [Omen 16-n0005ne](omen/16-n0005ne) | `<nixos-hardware/omen/16-n0005ne>` | `omen-16-n0005ne` |
| [System76 Gazelle 18](system76/gaze18) | `<nixos-hardware/system76/gaze18>` | | [Omen 16-n0280nd](/omen/16-n0280nd) | `<nixos-hardware/omen/16-n0280nd>` | `omen-16-n0280nd` |
| [System76 Galago Pro 5](system76/galp5-1650) | `<nixos-hardware/system76/galp5-1650>` | | [Omen 15-en1007sa](omen/15-en1007sa) | `<nixos-hardware/omen/15-en1007sa>` | `omen-15-en1007sa` |
| [Toshiba Chromebook 2 `swanky`](toshiba/swanky) | `<nixos-hardware/toshiba/swanky>` | | [Omen 15-en0002np](omen/15-en0002np) | `<nixos-hardware/omen/15-en0002np>` | `omen-15-en0002np` |
| [Tuxedo InfinityBook v4](tuxedo/infinitybook/v4) | `<nixos-hardware/tuxedo/infinitybook/v4>` | | [One-Netbook OneNetbook 4](onenetbook/4) | `<nixos-hardware/onenetbook/4>` | `onenetbook-4` |
| [TUXEDO Aura 15 - Gen1](tuxedo/aura/15/gen1) | `<nixos-hardware/tuxedo/aura/15/gen1>` | | [Panasonic Let's Note CF-LX4](panasonic/letsnote/cf-lx4) | `<nixos-hardware/panasonic/letsnote/cf-lx4>` | `panasonic-letsnote-cf-lx4` |
| [TUXEDO InfinityBook Pro 14 - Gen7](tuxedo/infinitybook/pro14/gen7) | `<nixos-hardware/tuxedo/infinitybook/pro14/gen7>` | | [PC Engines APU](pcengines/apu) | `<nixos-hardware/pcengines/apu>` | `pcengines-apu` |
| [TUXEDO Pulse 14 - Gen3](tuxedo/pulse/14/gen3) | `<nixos-hardware/tuxedo/pulse/14/gen3>` | | [PINE64 Pinebook Pro](pine64/pinebook-pro/) | `<nixos-hardware/pine64/pinebook-pro>` | `pine64-pinebook-pro` |
| [TUXEDO Pulse 15 - Gen2](tuxedo/pulse/15/gen2) | `<nixos-hardware/tuxedo/pulse/15/gen2>` | | [PINE64 RockPro64](pine64/rockpro64/) | `<nixos-hardware/pine64/rockpro64>` | `pine64-rockpro64` |
| [Xiaomi Redmibook 16 Pro 2024](xiaomi/redmibook/16-pro-2024) | `<nixos-hardware/xiaomi/redmibook/16-pro-2024>` | | [PINE64 STAR64](pine64/star64/) | `<nixos-hardware/pine64/star64>` | `pine64-star64` |
| [Protectli VP4670](protectli/vp4670/) | `<nixos-hardware/protectli/vp4670>` | `protectli-vp4670` |
| [Purism Librem 13v3](purism/librem/13v3) | `<nixos-hardware/purism/librem/13v3>` | `purism-librem-13v3` |
| [Purism Librem 15v3](purism/librem/15v3) | `<nixos-hardware/purism/librem/15v3>` | `purism-librem-15v3` |
| [Purism Librem 5r4](purism/librem/5r4) | `<nixos-hardware/purism/librem/5r4>` | `purism-librem-5r4` |
| [Radxa ROCK 4C+](radxa/rock-4c-plus) | `<nixos-hardware/radxa/rock-4c-plus>` | `rock-4c-plus` |
| [Radxa ROCK 5 Model B](radxa/rock-5b) | `<nixos-hardware/radxa/rock-5b>` | `rock-5b` |
| [Radxa ROCK Pi 4](radxa/rock-pi-4) | `<nixos-hardware/radxa/rock-pi-4>` | `rock-pi-4` |
| [Radxa ROCK Pi E](radxa/rock-pi-e) | `<nixos-hardware/radxa/rock-pi-e>` | `rock-pi-e`|
| [Raspberry Pi 2](raspberry-pi/2) | `<nixos-hardware/raspberry-pi/2>` | `raspberry-pi-2`|
| [Raspberry Pi 3](raspberry-pi/3) | `<nixos-hardware/raspberry-pi/3>` | `raspberry-pi-3`|
| [Raspberry Pi 4](raspberry-pi/4) | `<nixos-hardware/raspberry-pi/4>` | `raspberry-pi-4`|
| [Raspberry Pi 5](raspberry-pi/5) | `<nixos-hardware/raspberry-pi/5>` | `raspberry-pi-5`|
| [Samsung Series 9 NP900X3C](samsung/np900x3c) | `<nixos-hardware/samsung/np900x3c>` | `samsung-np900x3c`|
| [Slimbook Hero RPL-RTX](slimbook/hero/rpl-rtx) | `<nixos-hardware/slimbook/hero/rpl-rtx>` | `slimbook-hero-rpl-rtx`|
| [StarFive VisionFive v1](starfive/visionfive/v1) | `<nixos-hardware/starfive/visionfive/v1>` | `starfive-visionfive-v1`|
| [StarFive VisionFive 2](starfive/visionfive/v2) | `<nixos-hardware/starfive/visionfive/v2>` | `starfive-visionfive-2`|
| [StarLabs StarLite 5 (I5)](starlabs/starlite/i5) | `<nixos-hardware/starlabs/starlite/i5>` | `starlabs-starlite-i5`|
| [Supermicro A1SRi-2758F](supermicro/a1sri-2758f) | `<nixos-hardware/supermicro/a1sri-2758f>` | `supermicro-a1sri-2758f`|
| [Supermicro M11SDV-8C-LN4F](supermicro/m11sdv-8c-ln4f) | `<nixos-hardware/supermicro/m11sdv-8c-ln4f>` | `supermicro-m11sdv-8c-ln4f`|
| [Supermicro X10SLL-F](supermicro/x10sll-f) | `<nixos-hardware/supermicro/x10sll-f>` | `supermicro-x10sll-f`|
| [Supermicro X12SCZ-TLN4F](supermicro/x12scz-tln4f) | `<nixos-hardware/supermicro/x12scz-tln4f>` | `supermicro-x12scz-tln4f`|
| [System76 (generic)](system76) | `<nixos-hardware/system76>` | `system76`|
| [System76 Darter Pro 6](system76/darp6) | `<nixos-hardware/system76/darp6>` | `system76-darp6`|
| [System76 Gazelle 18](system76/gaze18) | `<nixos-hardware/system76/gaze18>` | `system76-gaze18`|
| [System76 Galago Pro 5](system76/galp5-1650) | `<nixos-hardware/system76/galp5-1650>` | `system76-galp5-1650`|
| [System76 Thelio Mega](system76/thelio-mega) | `<nixos-hardware/system76/thelio-mega>` | `system76-thelio-mega`|
| [Toshiba Chromebook 2 `swanky`](toshiba/swanky) | `<nixos-hardware/toshiba/swanky>` | `toshiba-swanky`|
| [Tuxedo InfinityBook v4](tuxedo/infinitybook/v4) | `<nixos-hardware/tuxedo/infinitybook/v4>` | `tuxedo-infinitybook-v4`|
| [TUXEDO Aura 15 - Gen1](tuxedo/aura/15/gen1) | `<nixos-hardware/tuxedo/aura/15/gen1>` | `tuxedo-aura-15-gen1`|
| [TUXEDO InfinityBook Pro 14 - Gen7](tuxedo/infinitybook/pro14/gen7) | `<nixos-hardware/tuxedo/infinitybook/pro14/gen7>` | `tuxedo-infinitybook-pro14-gen7`|
| [TUXEDO InfinityBook Pro 14 - Gen9 - AMD](tuxedo/infinitybook/pro14/gen9/amd) | `<nixos-hardware/tuxedo/infinitybook/pro14/gen9/amd>` | `tuxedo-infinitybook-pro14-gen9-amd`|
| [TUXEDO InfinityBook Pro 14 - Gen9 - INTEL](tuxedo/infinitybook/pro14/gen9/intel) | `<nixos-hardware/tuxedo/infinitybook/pro14/gen9/intel>` | `tuxedo-infinitybook-pro14-gen9-intel`|
| [TUXEDO Pulse 14 - Gen3](tuxedo/pulse/14/gen3) | `<nixos-hardware/tuxedo/pulse/14/gen3>` | `tuxedo-pulse-14-gen3`|
| [TUXEDO Pulse 15 - Gen2](tuxedo/pulse/15/gen2) | `<nixos-hardware/tuxedo/pulse/15/gen2>` | `tuxedo-pulse-15-gen2`|
| [Xiaomi Redmibook 15 Pro 2021](xiaomi/redmibook/15-pro-2021) | `<nixos-hardware/xiaomi/redmibook/15-pro-2021>` | `xiaomi-redmibook-15-pro-2021`|
| [Xiaomi Redmibook 16 Pro 2024](xiaomi/redmibook/16-pro-2024) | `<nixos-hardware/xiaomi/redmibook/16-pro-2024>` | `xiaomi-redmibook-16-pro-2024`|

View file

@ -9,10 +9,10 @@
kernelParams = [ kernelParams = [
"apm=on" "apm=on"
"acpi=on" "acpi=on"
"vga=0x317" # 1024x768 "vga=0x317" # 1024x768
"console=tty1" "console=tty1"
"video=vesafb:ywrap" # Faster scroll "video=vesafb:ywrap" # Faster scroll
]; ];
}; };
hardware.firmware = with pkgs; [ intel2200BGFirmware ]; hardware.firmware = with pkgs; [ intel2200BGFirmware ];

View file

@ -0,0 +1,12 @@
{
imports = [
../../../common/cpu/intel/alder-lake
];
# lopter@(2025-02-06): according to sensors-detect this comes with an ITE
# IT8613E super io chip, which is not officialy supported yet. See also:
#
# - unofficial driver: https://github.com/frankcrawford/it87
# - reddit thread on with useful information to configure pwm from the bios:
# https://www.reddit.com/r/MiniPCs/comments/1bnkg1u/aoostar_r1r7_question_does_the_fan_header_support/
}

View file

@ -5,8 +5,7 @@
"hid_apple.iso_layout=0" "hid_apple.iso_layout=0"
]; ];
hardware.facetimehd.enable = lib.mkDefault hardware.facetimehd.enable = lib.mkDefault (config.nixpkgs.config.allowUnfree or false);
(config.nixpkgs.config.allowUnfree or false);
services.mbpfan.enable = lib.mkDefault true; services.mbpfan.enable = lib.mkDefault true;
} }

View file

@ -3,18 +3,24 @@
lib, lib,
pkgs, pkgs,
... ...
}: { }:
{
imports = [ imports = [
../. ../.
../../../common/cpu/intel/kaby-lake ../../../common/cpu/intel/kaby-lake
../../../common/gpu/amd ../../../common/gpu/amd
../../../common/hidpi.nix ../../../common/hidpi.nix
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
# apple smc (TODO: check spi) # apple smc (TODO: check spi)
boot = { boot = {
initrd.kernelModules = ["applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ]; initrd.kernelModules = [
"applespi"
"spi_pxa2xx_platform"
"intel_lpss_pci"
"applesmc"
];
kernelParams = [ "intel_iommu=on" ]; kernelParams = [ "intel_iommu=on" ];
kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest; kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest;
}; };

View file

@ -3,6 +3,6 @@
../. ../.
../../common/cpu/intel ../../common/cpu/intel
../../common/pc/laptop ../../common/pc/laptop
../../common/pc/laptop/ssd ../../common/pc/ssd
]; ];
} }

View file

@ -1,7 +1,7 @@
{ config, lib, ... }: { config, lib, ... }:
{ {
imports = [ imports = [
../../. ../../.
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/pc/laptop ../../../common/pc/laptop

View file

@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
imports = [ imports = [

View file

@ -3,6 +3,6 @@
../. ../.
../../common/cpu/intel ../../common/cpu/intel
../../common/pc/laptop ../../common/pc/laptop
../../common/pc/laptop/ssd ../../common/pc/ssd
]; ];
} }

View file

@ -3,7 +3,7 @@
{ {
imports = [ imports = [
../. ../.
../../../common/pc/laptop/ssd ../../../common/pc/ssd
../../../common/gpu/24.05-compat.nix ../../../common/gpu/24.05-compat.nix
../../../common/gpu/nvidia/kepler ../../../common/gpu/nvidia/kepler
]; ];

View file

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

View file

@ -9,7 +9,7 @@ in
{ {
imports = [ imports = [
../. ../.
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
# Enable broadcom-43xx firmware # Enable broadcom-43xx firmware
@ -18,7 +18,6 @@ in
services.udev.extraRules = services.udev.extraRules =
# Disable XHC1 wakeup signal to avoid resume getting triggered some time # Disable XHC1 wakeup signal to avoid resume getting triggered some time
# after suspend. Reboot required for this to take effect. # after suspend. Reboot required for this to take effect.
lib.optionalString lib.optionalString (lib.versionAtLeast kernelPackages.kernel.version "3.13")
(lib.versionAtLeast kernelPackages.kernel.version "3.13")
''SUBSYSTEM=="pci", KERNEL=="0000:00:14.0", ATTR{power/wakeup}="disabled"''; ''SUBSYSTEM=="pci", KERNEL=="0000:00:14.0", ATTR{power/wakeup}="disabled"'';
} }

View file

@ -1,9 +1,14 @@
{ lib, pkgs, modulesPath, ... }: {
lib,
pkgs,
modulesPath,
...
}:
{ {
imports = [ imports = [
../. ../.
../../../common/pc/laptop/ssd ../../../common/pc/ssd
"${modulesPath}/hardware/network/broadcom-43xx.nix" "${modulesPath}/hardware/network/broadcom-43xx.nix"
]; ];
@ -19,7 +24,7 @@
powerDownCommands = lib.mkBefore '' powerDownCommands = lib.mkBefore ''
${pkgs.kmod}/bin/rmmod -f -v brcmfmac_wcc 2>/dev/null || true ${pkgs.kmod}/bin/rmmod -f -v brcmfmac_wcc 2>/dev/null || true
${pkgs.kmod}/bin/rmmod brcmfmac ${pkgs.kmod}/bin/rmmod brcmfmac
''; '';
}; };
# USB subsystem wakes up MBP right after suspend unless we disable it. # USB subsystem wakes up MBP right after suspend unless we disable it.

View file

@ -3,19 +3,25 @@
lib, lib,
pkgs, pkgs,
... ...
}: { }:
{
imports = [ imports = [
../. ../.
../../../common/cpu/intel/kaby-lake ../../../common/cpu/intel/kaby-lake
../../../common/hidpi.nix ../../../common/hidpi.nix
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
# Make the keyboard work in stage1, enable iommu # Make the keyboard work in stage1, enable iommu
# https://www.kernelconfig.io/config_keyboard_applespi # https://www.kernelconfig.io/config_keyboard_applespi
boot = { boot = {
initrd.kernelModules = ["applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ]; initrd.kernelModules = [
"applespi"
"spi_pxa2xx_platform"
"intel_lpss_pci"
"applesmc"
];
kernelParams = [ "intel_iommu=on" ]; kernelParams = [ "intel_iommu=on" ];
kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest; kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest;
}; };

View file

@ -1,10 +1,15 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
imports = [ imports = [
../. ../.
../../../common/cpu/intel/sandy-bridge ../../../common/cpu/intel/sandy-bridge
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
networking.enableB43Firmware = lib.mkDefault true; networking.enableB43Firmware = lib.mkDefault true;

View file

@ -8,29 +8,5 @@ Following [this guide](https://wiki.t2linux.org/distributions/nixos/installation
You can consult the [wiki](https://wiki.t2linux.org/) for information specific to T2 Macs. You can consult the [wiki](https://wiki.t2linux.org/) for information specific to T2 Macs.
## Unlocking Internal iGPU > [!warning]
> Always ensure compatibility and make backups of your data before making any system changes.
The `apple-set-os-loader-installer` module serves as an installer for the [`apple-set-os-loader`](https://github.com/Redecorating/apple_set_os-loader). This tool is designed to unlock the internal integrated GPU (iGPU) on certain MacBooks. See https://wiki.t2linux.org/guides/hybrid-graphics/ for more details.
### What it Does:
Upon activation, this module performs the following:
- Renames the existing `BOOTX64.EFI` file to `bootx64_original.efi`.
- Installs the `apple-set-os-loader` hook in its place as `bootx64.efi`.
- Before the system boots the hook unlocks the iGPU and subsequently calls the original `bootx64_original.efi`.
- Enables the iGPU by default.
### How to Implement:
1. Add this into your `configuration.nix`:
```
hardware.apple-t2.enableAppleSetOsLoader = true;
```
2. **Rebuild your system**:
```
sudo nixos-rebuild switch
```
> **Note**: Always ensure compatibility and make backups of your data before making any system changes.

View file

@ -1,6 +1,14 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
inherit (lib) types;
nixosVersion = lib.versions.majorMinor lib.version;
audioFiles = pkgs.fetchFromGitHub { audioFiles = pkgs.fetchFromGitHub {
owner = "kekrby"; owner = "kekrby";
repo = "t2-better-audio"; repo = "t2-better-audio";
@ -8,19 +16,22 @@ let
hash = "sha256-x7K0qa++P1e1vuCGxnsFxL1d9+nwMtZUJ6Kd9e27TFs="; hash = "sha256-x7K0qa++P1e1vuCGxnsFxL1d9+nwMtZUJ6Kd9e27TFs=";
}; };
audioFilesUdevRules = pkgs.runCommand "audio-files-udev-rules" {} '' audioFilesUdevRules = pkgs.runCommand "audio-files-udev-rules" { } ''
mkdir -p $out/lib/udev/rules.d mkdir -p $out/lib/udev/rules.d
cp ${audioFiles}/files/*.rules $out/lib/udev/rules.d cp ${audioFiles}/files/*.rules $out/lib/udev/rules.d
substituteInPlace $out/lib/udev/rules.d/*.rules --replace "/usr/bin/sed" "${pkgs.gnused}/bin/sed" substituteInPlace $out/lib/udev/rules.d/*.rules --replace "/usr/bin/sed" "${pkgs.gnused}/bin/sed"
''; '';
overrideAudioFiles = package: pluginsPath: overrideAudioFiles =
package.overrideAttrs (new: old: { package: pluginsPath:
preConfigurePhases = old.preConfigurePhases or [ ] ++ [ "postPatchPhase" ]; package.overrideAttrs (
postPatchPhase = '' _new: old: {
cp -r ${audioFiles}/files/{profile-sets,paths} ${pluginsPath}/alsa/mixer/ preConfigurePhases = old.preConfigurePhases or [ ] ++ [ "postPatchPhase" ];
''; postPatchPhase = ''
}); cp -r ${audioFiles}/files/{profile-sets,paths} ${pluginsPath}/alsa/mixer/
'';
}
);
pipewirePackage = overrideAudioFiles pkgs.pipewire "spa/plugins/"; pipewirePackage = overrideAudioFiles pkgs.pipewire "spa/plugins/";
@ -29,12 +40,12 @@ let
in in
{ {
imports = [ imports = [
(lib.mkRemovedOptionModule ["hardware" "apple-t2" "enableTinyDfr"] '' (lib.mkRemovedOptionModule [ "hardware" "apple-t2" "enableTinyDfr" ] ''
The hardware.apple-t2.enableTinyDfr option was deprecated and removed since upstream Nixpkgs now has an identical module. The hardware.apple-t2.enableTinyDfr option was deprecated and removed since upstream Nixpkgs now has an identical module.
Please migrate to hardware.apple.touchBar. Please migrate to hardware.apple.touchBar.
'') '')
(lib.mkRemovedOptionModule ["hardware" "apple-t2" "enableAppleSetOsLoader"] '' (lib.mkRemovedOptionModule [ "hardware" "apple-t2" "enableAppleSetOsLoader" ] ''
The hardware.apple-t2.enableAppleSetOsLoader option was removed as the apple_set_os functionality was integrated into the kernel. The hardware.apple-t2.enableAppleSetOsLoader option was removed as the apple_set_os functionality was integrated into the kernel.
Please uninstall the loader by replacing /esp/EFI/BOOTX64.EFI with /esp/EFI/BOOTX64_original.EFI, where esp is the EFI partition mount point. Please uninstall the loader by replacing /esp/EFI/BOOTX64.EFI with /esp/EFI/BOOTX64_original.EFI, where esp is the EFI partition mount point.
@ -43,20 +54,48 @@ in
]; ];
options.hardware.apple-t2 = { options.hardware.apple-t2 = {
enableIGPU = lib.mkEnableOption "the usage of the iGPU on specific Apple devices with an AMD dGPU"; enableIGPU = lib.mkEnableOption "the usage of the iGPU on specific Apple devices with an AMD dGPU";
kernelChannel = lib.mkOption {
type = types.enum [
"stable"
"latest"
];
default = "stable";
example = "latest";
description = "The kernel release stream to use.";
};
firmware = {
enable = lib.mkEnableOption "automatic and declarative Wi-Fi and Bluetooth firmware configuration";
version = lib.mkOption {
type = types.enum [
"monterey"
"ventura"
"sonoma"
];
default = "sonoma";
example = "ventura";
description = "The macOS version to use.";
};
};
}; };
config = lib.mkMerge [ config = lib.mkMerge [
{ {
# For keyboard and touchbar # Specialized kernel for keyboard, touchpad, touchbar and audio.
boot.kernelPackages = pkgs.linuxPackagesFor (pkgs.callPackage ./pkgs/linux-t2.nix { }); boot.kernelPackages = pkgs.linuxPackagesFor (
pkgs.callPackage (
if t2Cfg.kernelChannel == "stable" then ./pkgs/linux-t2 else ./pkgs/linux-t2/latest.nix
) { }
);
boot.initrd.kernelModules = [ "apple-bce" ]; boot.initrd.kernelModules = [ "apple-bce" ];
services.udev.packages = [ audioFilesUdevRules ]; services.udev.packages = [ audioFilesUdevRules ];
# For audio # For audio
boot.kernelParams = [ "pcie_ports=compat" "intel_iommu=on" "iommu=pt" ]; boot.kernelParams = [
"pcie_ports=compat"
hardware.pulseaudio.package = overrideAudioFiles pkgs.pulseaudio "src/modules/"; "intel_iommu=on"
"iommu=pt"
];
services.pipewire.package = pipewirePackage; services.pipewire.package = pipewirePackage;
services.pipewire.wireplumber.package = pkgs.wireplumber.override { services.pipewire.wireplumber.package = pkgs.wireplumber.override {
@ -66,11 +105,29 @@ in
# Make sure post-resume.service exists # Make sure post-resume.service exists
powerManagement.enable = true; powerManagement.enable = true;
} }
(
if lib.versionAtLeast nixosVersion "25.05" then
{
services.pulseaudio.package = overrideAudioFiles pkgs.pulseaudio "src/modules/";
}
else
{
hardware.pulseaudio.package = overrideAudioFiles pkgs.pulseaudio "src/modules/";
}
)
(lib.mkIf t2Cfg.enableIGPU { (lib.mkIf t2Cfg.enableIGPU {
# Enable the iGPU by default if present # Enable the iGPU by default if present
environment.etc."modprobe.d/apple-gmux.conf".text = '' environment.etc."modprobe.d/apple-gmux.conf".text = ''
options apple-gmux force_igd=y options apple-gmux force_igd=y
''; '';
}) })
(lib.mkIf t2Cfg.firmware.enable {
# Configure Wi-Fi and Bluetooth firmware
hardware.firmware = [
(pkgs.callPackage ./pkgs/brcm-firmware { version = t2Cfg.firmware.version; })
];
})
]; ];
} }

View file

@ -0,0 +1,89 @@
{
lib,
stdenvNoCC,
callPackage,
vmTools,
util-linux,
linux,
kmod,
version,
}:
let
get-firmware = callPackage ./get-firmware.nix { };
fetchmacos = callPackage ./fetchmacos.nix { };
# See https://github.com/kholia/OSX-KVM/blob/master/fetch-macOS-v2.py#L534-L546.
# Versions before macOS Monterey don't have Bluetooth firmware.
# Whereas macOS Sequoia doesn't have firmware for MacBook Air 2018 and 2019.
boards = {
monterey = {
boardId = "Mac-B809C3757DA9BB8D";
mlb = "00000000000000000";
osType = "latest";
hash = "sha256-My8FLnqHZn+THfGPIhTSApW/kIWM0ZZhjBxWujhhWPM=";
};
ventura = {
boardId = "Mac-4B682C642B45593E";
mlb = "00000000000000000";
osType = "latest";
hash = "sha256-Qy9Whu8pqHo+m6wHnCIqURAR53LYQKc0r87g9eHgnS4=";
};
sonoma = {
boardId = "Mac-827FAC58A8FDFA22";
mlb = "00000000000000000";
osType = "default";
hash = "sha256-phlpwNTYhugqX2KGljqxpbfGtCFDgggQPzB7U29XSmM=";
};
};
in
vmTools.runInLinuxVM (
stdenvNoCC.mkDerivation {
pname = "brcm-firmware";
inherit version;
src = fetchmacos {
name = version;
inherit (boards.${version})
boardId
mlb
osType
hash
;
};
dontUnpack = true;
nativeBuildInputs = [
util-linux
get-firmware
];
buildPhase = ''
ln -s ${linux}/lib /lib
${kmod}/bin/modprobe loop
${kmod}/bin/modprobe hfsplus
imgdir=$(mktemp -d)
loopdev=$(losetup -f | cut -d "/" -f 3)
losetup -P $loopdev $src
loopdev_partition=/dev/$(lsblk -o KNAME,TYPE,MOUNTPOINT -n | grep $loopdev | tail -1 | awk '{print $1}')
mount $loopdev_partition $imgdir
get-bluetooth $imgdir/usr/share/firmware/bluetooth bluetooth/
get-wifi $imgdir/usr/share/firmware/wifi wifi/
'';
installPhase = ''
mkdir -p $out/lib/firmware/brcm
cp bluetooth/brcm/* $out/lib/firmware/brcm/
cp wifi/brcm/* $out/lib/firmware/brcm/
'';
meta = with lib; {
description = "Wi-Fi and Bluetooth firmware for T2 Macs";
license = licenses.unfree;
maintainers = with maintainers; [ mkorje ];
platforms = platforms.linux;
};
}
)

View file

@ -0,0 +1,42 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
callPackage,
dmg2img,
}:
let
macrecovery = callPackage ./macrecovery.nix { };
in
{
name,
boardId,
mlb,
osType,
hash,
}:
stdenvNoCC.mkDerivation {
name = name;
dontUnpack = true;
nativeBuildInputs = [
macrecovery
dmg2img
];
buildPhase = ''
macrecovery download -o . -b ${boardId} -m ${mlb} -os ${osType}
dmg2img -s BaseSystem.dmg fw.img
'';
installPhase = ''
cp fw.img $out
'';
outputHashMode = "recursive";
outputHashAlgo = "sha256";
outputHash = hash;
}

View file

@ -0,0 +1,133 @@
diff --git a/asahi_firmware/bluetooth.py b/asahi_firmware/bluetooth.py
index 0934225..3eaa442 100644
--- a/asahi_firmware/bluetooth.py
+++ b/asahi_firmware/bluetooth.py
@@ -1,8 +1,25 @@
+#!/usr/bin/env python3
# SPDX-License-Identifier: MIT
import logging, os, os.path, re, sys
from collections import namedtuple, defaultdict
+from hashlib import sha256
-from .core import FWFile
+class FWFile(object):
+ def __init__(self, name, data):
+ self.name = name
+ self.data = data
+ self.sha = sha256(data).hexdigest()
+
+ def __repr__(self):
+ return f"FWFile({self.name!r}, <{self.sha[:16]}>)"
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+ return self.sha == other.sha
+
+ def __hash__(self):
+ return hash(self.sha)
log = logging.getLogger("asahi_firmware.bluetooth")
@@ -127,16 +144,16 @@ class BluetoothFWCollection(object):
if __name__ == "__main__":
col = BluetoothFWCollection(sys.argv[1])
-
- if len(sys.argv) > 2:
- from . import FWPackage
-
- pkg = FWPackage(sys.argv[2])
- pkg.add_files(sorted(col.files()))
- pkg.close()
-
- for i in pkg.manifest:
- print(i)
- else:
- for name, fwfile in col.files():
- print(name, f"{fwfile.name} ({len(fwfile.data)} bytes)")
+
+ dir = os.path.join(sys.argv[2], "brcm")
+ os.makedirs(dir)
+
+ hashes = {}
+ for name, data in sorted(col.files()):
+ path = os.path.join(sys.argv[2], name)
+ if data.sha in hashes:
+ os.link(hashes[data.sha], path)
+ else:
+ with open(path, "wb") as f:
+ f.write(data.data)
+ hashes[data.sha] = path
diff --git a/asahi_firmware/wifi.py b/asahi_firmware/wifi.py
index 346965c..261aa32 100644
--- a/asahi_firmware/wifi.py
+++ b/asahi_firmware/wifi.py
@@ -1,6 +1,24 @@
+#!/usr/bin/env python3
# SPDX-License-Identifier: MIT
import sys, os, os.path, pprint, statistics, logging
-from .core import FWFile
+from hashlib import sha256
+
+class FWFile(object):
+ def __init__(self, name, data):
+ self.name = name
+ self.data = data
+ self.sha = sha256(data).hexdigest()
+
+ def __repr__(self):
+ return f"FWFile({self.name!r}, <{self.sha[:16]}>)"
+
+ def __eq__(self, other):
+ if other is None:
+ return False
+ return self.sha == other.sha
+
+ def __hash__(self):
+ return hash(self.sha)
log = logging.getLogger("asahi_firmware.wifi")
@@ -40,7 +58,9 @@ class WiFiFWCollection(object):
self.prune()
def load(self, source_path):
+ included_folders = ["C-4355__s-C1", "C-4364__s-B2", "C-4364__s-B3", "C-4377__s-B3"]
for dirpath, dirnames, filenames in os.walk(source_path):
+ dirnames[:] = [d for d in dirnames if d in included_folders]
if "perf" in dirnames:
dirnames.remove("perf")
if "assert" in dirnames:
@@ -141,18 +161,16 @@ class WiFiFWCollection(object):
if __name__ == "__main__":
col = WiFiFWCollection(sys.argv[1])
- if len(sys.argv) > 2:
- from .core import FWPackage
-
- pkg = FWPackage(sys.argv[2])
- pkg.add_files(sorted(col.files()))
- pkg.close()
-
- for i in pkg.manifest:
- print(i)
- else:
- for name, fwfile in col.files():
- if isinstance(fwfile, str):
- print(name, "->", fwfile)
- else:
- print(name, f"({len(fwfile.data)} bytes)")
+
+ dir = os.path.join(sys.argv[2], "brcm")
+ os.makedirs(dir)
+
+ hashes = {}
+ for name, data in sorted(col.files()):
+ path = os.path.join(sys.argv[2], name)
+ if data.sha in hashes:
+ os.link(hashes[data.sha], path)
+ else:
+ with open(path, "wb") as f:
+ f.write(data.data)
+ hashes[data.sha] = path

View file

@ -0,0 +1,35 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
python3,
}:
stdenvNoCC.mkDerivation {
name = "get-firmware";
src = fetchFromGitHub {
owner = "AsahiLinux";
repo = "asahi-installer";
rev = "v0.7.9";
hash = "sha256-vbhepoZ52k5tW2Gd7tfQTZ5CLqzhV7dUcVh6+AYwECk=";
};
patches = [ ./get-firmware-standalone.patch ];
buildInputs = [ python3 ];
installPhase = ''
cd asahi_firmware
install -Dm755 bluetooth.py $out/bin/get-bluetooth
install -Dm755 wifi.py $out/bin/get-wifi
'';
meta = with lib; {
description = "Patched Asahi Linux Installer scripts to get brcm firmware";
homepage = "https://github.com/AsahiLinux/asahi-installer";
license = licenses.mit;
maintainers = with maintainers; [ mkorje ];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,36 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
python3,
}:
stdenvNoCC.mkDerivation {
name = "macrecovery";
src = fetchFromGitHub {
owner = "acidanthera";
repo = "OpenCorePkg";
rev = "1.0.4";
hash = "sha256-5Eypza9teSJSulHaK7Sxh562cTKedXKn3y+Z3+fC6sM=";
};
buildInputs = [ python3 ];
installPhase = ''
cd Utilities/macrecovery
install -Dm755 macrecovery.py $out/opt/macrecovery
cp boards.json $out/opt/boards.json
mkdir $out/bin
ln -s $out/opt/macrecovery $out/bin/macrecovery
'';
meta = with lib; {
description = "A tool that helps to automate recovery interaction";
homepage = "https://github.com/acidanthera/OpenCorePkg";
license = licenses.bsd3;
maintainers = with maintainers; [ mkorje ];
mainProgram = "macrecovery";
platforms = platforms.all;
};
}

View file

@ -1,56 +0,0 @@
{ lib, buildLinux, fetchFromGitHub, fetchzip, runCommand
, ... } @ args:
let
version = "6.13";
majorVersion = lib.elemAt (lib.take 1 (lib.splitVersion version)) 0;
patchRepo = fetchFromGitHub {
owner = "t2linux";
repo = "linux-t2-patches";
rev = "07cba1a25b43834f24f8be302bd025f2f89493c5";
hash = "sha256-kRSzqOApTmTTv3rfNmP9/RQ7zV4jptlEOLWixtgwTLk=";
};
kernel = fetchzip {
url = "mirror://kernel/linux/kernel/v${majorVersion}.x/linux-${version}.tar.xz";
hash = "sha256-FD22KmTFrIhED5X3rcjPTot1UOq1ir1zouEpRWZkRC0=";
};
in
buildLinux (args // {
inherit version;
pname = "linux-t2";
# Snippet from nixpkgs
modDirVersion = "${lib.concatStringsSep "." (lib.take 3 (lib.splitVersion "${version}.0"))}";
src = runCommand "patched-source" {} ''
cp -r ${kernel} $out
chmod -R u+w $out
cd $out
while read -r patch; do
echo "Applying patch $patch";
patch -p1 < $patch;
done < <(find ${patchRepo} -type f -name "*.patch" | sort)
'';
structuredExtraConfig = with lib.kernel; {
APPLE_BCE = module;
APPLE_GMUX = module;
APFS_FS = module;
BRCMFMAC = module;
BT_BCM = module;
BT_HCIBCM4377 = module;
BT_HCIUART_BCM = yes;
BT_HCIUART = module;
HID_APPLETB_BL = module;
HID_APPLETB_KBD = module;
HID_APPLE = module;
DRM_APPLETBDRM = module;
HID_SENSOR_ALS = module;
SND_PCM = module;
STAGING = yes;
};
kernelPatches = [];
} // (args.argsOverride or {}))

View file

@ -0,0 +1,6 @@
{ callPackage, linux_6_12, ... }@args:
callPackage ./generic.nix args {
kernel = linux_6_12;
patchesFile = ./stable.json;
}

View file

@ -0,0 +1,60 @@
{
lib,
fetchurl, # fetchpatch does unnecessary normalization
...
}@args:
{
kernel,
patchesFile,
}:
let
inherit (builtins) readFile fromJSON;
patchset = fromJSON (readFile patchesFile);
t2-patches = map (
{ name, hash }:
{
inherit name;
patch = fetchurl {
inherit name hash;
url = patchset.base_url + name;
};
}
) patchset.patches;
in
kernel.override (
args
// {
pname = "linux-t2";
structuredExtraConfig = with lib.kernel; {
APPLE_BCE = module;
APPLE_GMUX = module;
APFS_FS = module;
BRCMFMAC = module;
BT_BCM = module;
BT_HCIBCM4377 = module;
BT_HCIUART_BCM = yes;
BT_HCIUART = module;
HID_APPLETB_BL = module;
HID_APPLETB_KBD = module;
HID_APPLE = module;
HID_MAGICMOUSE = module;
DRM_APPLETBDRM = module;
HID_SENSOR_ALS = module;
SND_PCM = module;
STAGING = yes;
};
kernelPatches = t2-patches ++ (args.kernelPatches or [ ]);
argsOverride.extraMeta = {
description = "The Linux kernel (with patches from the T2 Linux project)";
# take responsibility for the downstream kernel
maintainers = with lib.maintainers; [ soopyc ];
};
}
// (args.argsOverride or { })
)

View file

@ -0,0 +1,141 @@
{
"base_url": "https://raw.githubusercontent.com/t2linux/linux-t2-patches/8ec11f3aaa314d25e18842851a2124c0031e2e3f/",
"patches": [
{
"name": "1001-Add-apple-bce-driver.patch",
"hash": "sha256-00K3LmId2Ag6s5K76p7mB2a0oEXp815yRd+U5wxWPMc="
},
{
"name": "1002-Put-apple-bce-in-drivers-staging.patch",
"hash": "sha256-wkveNo1qwAwXWDGTFed4ZDbuBnJbwKgWLmTHK9qq0oM="
},
{
"name": "1003-Fix-sparse-errors.patch",
"hash": "sha256-nuCOPWa4Hp+HCCBe6Y++M4g1k4plOWzy2hqHXlJbp9g="
},
{
"name": "1004-Fix-freezing-on-turning-off-camera.patch",
"hash": "sha256-rFrSUhiNXgQbfgKjryJktYxYcchXE1PI49Q1gW001+0="
},
{
"name": "1007-HID-multitouch-Get-the-contact-ID-from-HID_DG_TRANSD.patch",
"hash": "sha256-JF5PjByo4S1Rd/B5luAzOXDv+iakCnJfmujIQuUiT1A="
},
{
"name": "1008-HID-multitouch-support-getting-the-tip-state-from-HI.patch",
"hash": "sha256-m/NAKoHRC/HwxG5fFZxFl6DtY4Xv8kPBWvdKdtadrrk="
},
{
"name": "1009-HID-multitouch-take-cls-maxcontacts-into-account-for.patch",
"hash": "sha256-h6jk9yw/4txd8PATpMxB9mIzik9+X1zP6p4K35AqdXw="
},
{
"name": "1010-HID-multitouch-specify-that-Apple-Touch-Bar-is-direc.patch",
"hash": "sha256-5PbLynVnQqlJKPTWhcmwXCkYDEopLBQWnxWvZUt0EN4="
},
{
"name": "1011-HID-multitouch-add-device-ID-for-Apple-Touch-Bar.patch",
"hash": "sha256-dIzEOj89D2rIEc2/mjq3TkIfI3ZHzu0VRDQQOzp+Snc="
},
{
"name": "1013-lib-vsprintf-Add-support-for-generic-FourCCs-by-exte.patch",
"hash": "sha256-g8M3j1ZPND10/LtPD/txaSoJGV9Lp+g5bgn+vQc56p4="
},
{
"name": "1014-printf-add-tests-for-generic-FourCCs.patch",
"hash": "sha256-5Z4cFBMAY695OEU/CxiGQkUz68zmKdxssD+yp1DCYgs="
},
{
"name": "1015-drm-appletbdrm-use-p4cl-instead-of-p4cc.patch",
"hash": "sha256-rZej0ZbpPv+8NROuYnf4Jpu9scCsmbKWyz7yf5A3G3s="
},
{
"name": "1016-vsprintf-Use-p4chR-instead-of-p4cn-for-reading-data-.patch",
"hash": "sha256-/Ork2CmYk6SG213Owk+nGsw7KTEVDLRzQTeWcKrPZGw="
},
{
"name": "1017-checkpatch-remove-p4cn.patch",
"hash": "sha256-lnMnjnMiR9WSNf/XYsiOwFdC9xKv8zSluWiR584xFPU="
},
{
"name": "2008-i915-4-lane-quirk-for-mbp15-1.patch",
"hash": "sha256-Ui9tK4IGSWfEscmD92emX/NfulO0m8zwLc9ivIClCFQ="
},
{
"name": "2009-apple-gmux-allow-switching-to-igpu-at-probe.patch",
"hash": "sha256-aE+MEu/jRrZBa+3Q03quOHUsIseRED6A7N/K9kEVtbM="
},
{
"name": "3001-applesmc-convert-static-structures-to-drvdata.patch",
"hash": "sha256-7KGC0pCos351wKNhwJI/Qoc7w+orOPpiTkdCN50G8nI="
},
{
"name": "3002-applesmc-make-io-port-base-addr-dynamic.patch",
"hash": "sha256-1fnmMP/3WSy2JqjdCvxu8tWoshCPr8eiG6ttYK/N9WA="
},
{
"name": "3003-applesmc-switch-to-acpi_device-from-platform.patch",
"hash": "sha256-3S6BzyoPLoirfyAu4yDyE9aYjUYr/7etmAvN3uKSDLE="
},
{
"name": "3004-applesmc-key-interface-wrappers.patch",
"hash": "sha256-9Bq28WcqiOnef0br6bATOudr1ViSpajQs7fv7o8Tg0I="
},
{
"name": "3005-applesmc-basic-mmio-interface-implementation.patch",
"hash": "sha256-Hh9DymQ+Y74oSs1zv9F0lTU3jfAenKTM+cmFH9tmN9Q="
},
{
"name": "3006-applesmc-fan-support-on-T2-Macs.patch",
"hash": "sha256-D5IQHE8QFo49mnUawSau7xUsMFkHKayyhnHW4hi+fWE="
},
{
"name": "3007-applesmc-Add-iMacPro-to-applesmc_whitelist.patch",
"hash": "sha256-rLDuyQYzAaWuu/u6nRRVvGdwyfpLvkGPu1OoD8KS0os="
},
{
"name": "3008-applesmc-make-applesmc_remove-void.patch",
"hash": "sha256-j2Rj1PW/bFEYh9IkGkkG9b+G27IAPCInyd828z4WE1s="
},
{
"name": "3009-applesmc-battery-charge-limiter.patch",
"hash": "sha256-skYKmLsJ6O42/wINLccZWoKS0XhVlC1Nfxi1Ekloxns="
},
{
"name": "4001-asahi-trackpad.patch",
"hash": "sha256-QM/FtDft4N4imJBuEHg6cH3e8vEyMPLt0alDhugLPy8="
},
{
"name": "4002-HID-quirks-remove-T2-devices-from-hid_mouse_ignore_l.patch",
"hash": "sha256-0PMCE3IWHekir5YV1BD6Jakc7dOV6Fj2HfIGWZnXZV0="
},
{
"name": "4003-HID-apple-ignore-the-trackpad-on-T2-Macs.patch",
"hash": "sha256-JTeYtaBqMyTu5IdGb8x7wbP9ZE1rXT4lpEjudR1ySFI="
},
{
"name": "4004-HID-magicmouse-Add-support-for-trackpads-found-on-T2.patch",
"hash": "sha256-HcPX7gY3hnlwM/tY06pbtXnch04AqwHgC596E8ZqGY8="
},
{
"name": "4005-HID-apple-Add-necessary-IDs-and-support-for-replacem.patch",
"hash": "sha256-SRKESCbpxSYm7U0VyCmvkmT/er6/GEHhwo8tgJDO6mQ="
},
{
"name": "4006-HID-magicmouse-Add-MacBookPro15-1-replacement-trackp.patch",
"hash": "sha256-uAlT/4ADwYyKvbuPQaGwqCjZ2/myruC63etVV6cfFLk="
},
{
"name": "7001-drm-i915-fbdev-Discard-BIOS-framebuffers-exceeding-h.patch",
"hash": "sha256-O6RHFxmKZn7aCq1D+r5z2T3jLt0r5+01EABD9rs0E5M="
},
{
"name": "8001-Add-APFS-driver.patch",
"hash": "sha256-io17Kk6FDscDoDshddK9TqSPuXVFTzjvRUwOGTl5cjM="
},
{
"name": "8002-Necessary-modifications-to-build-APFS-with-the-kerne.patch",
"hash": "sha256-n1SH5vC//LRJdWOavH9/BHqBTjkUj5f+dFGitSeHksw="
}
]
}

View file

@ -0,0 +1,6 @@
{ callPackage, linux_6_15, ... }@args:
callPackage ./generic.nix args {
kernel = linux_6_15;
patchesFile = ./latest.json;
}

View file

@ -0,0 +1,141 @@
{
"base_url": "https://raw.githubusercontent.com/t2linux/linux-t2-patches/e08a76e1f1234885b9b68be6c843bf91833e8b0a/",
"patches": [
{
"name": "1001-Add-apple-bce-driver.patch",
"hash": "sha256-e3RPvWPj2QASGOS4kieO8YFekrXsBCJtfF82OPlOn2E="
},
{
"name": "1002-Put-apple-bce-in-drivers-staging.patch",
"hash": "sha256-DXj4CmE7TKMGrAhQDOR5RVw9YHmyQMiXZsmxYfkKAEA="
},
{
"name": "1003-Fix-sparse-errors.patch",
"hash": "sha256-nuCOPWa4Hp+HCCBe6Y++M4g1k4plOWzy2hqHXlJbp9g="
},
{
"name": "1004-Fix-freezing-on-turning-off-camera.patch",
"hash": "sha256-rFrSUhiNXgQbfgKjryJktYxYcchXE1PI49Q1gW001+0="
},
{
"name": "1005-HID-hid-appletb-bl-add-driver-for-the-backlight-of-A.patch",
"hash": "sha256-kEscS1FAyDxLZPOPInYTXFEf4fouBEa4zGctX14hSu8="
},
{
"name": "1006-HID-hid-appletb-kbd-add-driver-for-the-keyboard-mode.patch",
"hash": "sha256-eVEuvnoRItaDjwWu41nn9bTkgHgY+1SL/hFAvUR2IlY="
},
{
"name": "1007-HID-multitouch-Get-the-contact-ID-from-HID_DG_TRANSD.patch",
"hash": "sha256-JF5PjByo4S1Rd/B5luAzOXDv+iakCnJfmujIQuUiT1A="
},
{
"name": "1008-HID-multitouch-support-getting-the-tip-state-from-HI.patch",
"hash": "sha256-m/NAKoHRC/HwxG5fFZxFl6DtY4Xv8kPBWvdKdtadrrk="
},
{
"name": "1009-HID-multitouch-take-cls-maxcontacts-into-account-for.patch",
"hash": "sha256-h6jk9yw/4txd8PATpMxB9mIzik9+X1zP6p4K35AqdXw="
},
{
"name": "1010-HID-multitouch-specify-that-Apple-Touch-Bar-is-direc.patch",
"hash": "sha256-5PbLynVnQqlJKPTWhcmwXCkYDEopLBQWnxWvZUt0EN4="
},
{
"name": "1011-HID-multitouch-add-device-ID-for-Apple-Touch-Bar.patch",
"hash": "sha256-dIzEOj89D2rIEc2/mjq3TkIfI3ZHzu0VRDQQOzp+Snc="
},
{
"name": "1013-lib-vsprintf-Add-support-for-generic-FourCCs-by-exte.patch",
"hash": "sha256-h3gxaKtvdm/GSd+AP1sPC9avWHOsceUxTmoua/3rIf4="
},
{
"name": "1014-drm-format-helper-Add-conversion-from-XRGB8888-to-BG.patch",
"hash": "sha256-Ky19+cCiYDaHBh2o5IhZO8J1ExDT7o8K9cgPz+AL8Cg="
},
{
"name": "1015-drm-tiny-add-driver-for-Apple-Touch-Bars-in-x86-Macs.patch",
"hash": "sha256-tDjK/VipVQbuNOURW38gssqeRLy3s8I+DVq0+4zGnHs="
},
{
"name": "2008-i915-4-lane-quirk-for-mbp15-1.patch",
"hash": "sha256-lZ7MWXZubmAlJCqBmuzueg7agENJbikxP1SE46SmwNw="
},
{
"name": "2009-apple-gmux-allow-switching-to-igpu-at-probe.patch",
"hash": "sha256-XKwlyJZjJLQz39mc0/S7sPnRnwrqMsq9OKy+QCO+oho="
},
{
"name": "3001-applesmc-convert-static-structures-to-drvdata.patch",
"hash": "sha256-7KGC0pCos351wKNhwJI/Qoc7w+orOPpiTkdCN50G8nI="
},
{
"name": "3002-applesmc-make-io-port-base-addr-dynamic.patch",
"hash": "sha256-1fnmMP/3WSy2JqjdCvxu8tWoshCPr8eiG6ttYK/N9WA="
},
{
"name": "3003-applesmc-switch-to-acpi_device-from-platform.patch",
"hash": "sha256-3S6BzyoPLoirfyAu4yDyE9aYjUYr/7etmAvN3uKSDLE="
},
{
"name": "3004-applesmc-key-interface-wrappers.patch",
"hash": "sha256-9Bq28WcqiOnef0br6bATOudr1ViSpajQs7fv7o8Tg0I="
},
{
"name": "3005-applesmc-basic-mmio-interface-implementation.patch",
"hash": "sha256-Hh9DymQ+Y74oSs1zv9F0lTU3jfAenKTM+cmFH9tmN9Q="
},
{
"name": "3006-applesmc-fan-support-on-T2-Macs.patch",
"hash": "sha256-D5IQHE8QFo49mnUawSau7xUsMFkHKayyhnHW4hi+fWE="
},
{
"name": "3007-applesmc-Add-iMacPro-to-applesmc_whitelist.patch",
"hash": "sha256-rLDuyQYzAaWuu/u6nRRVvGdwyfpLvkGPu1OoD8KS0os="
},
{
"name": "3008-applesmc-make-applesmc_remove-void.patch",
"hash": "sha256-j2Rj1PW/bFEYh9IkGkkG9b+G27IAPCInyd828z4WE1s="
},
{
"name": "3009-applesmc-battery-charge-limiter.patch",
"hash": "sha256-skYKmLsJ6O42/wINLccZWoKS0XhVlC1Nfxi1Ekloxns="
},
{
"name": "4001-asahi-trackpad.patch",
"hash": "sha256-NOuGgUxDQEfFPlij/EnhWmgqeG3/l+j+r2T1YJG7raY="
},
{
"name": "4002-HID-quirks-remove-T2-devices-from-hid_mouse_ignore_l.patch",
"hash": "sha256-0PMCE3IWHekir5YV1BD6Jakc7dOV6Fj2HfIGWZnXZV0="
},
{
"name": "4003-HID-apple-ignore-the-trackpad-on-T2-Macs.patch",
"hash": "sha256-JTeYtaBqMyTu5IdGb8x7wbP9ZE1rXT4lpEjudR1ySFI="
},
{
"name": "4004-HID-magicmouse-Add-support-for-trackpads-found-on-T2.patch",
"hash": "sha256-HcPX7gY3hnlwM/tY06pbtXnch04AqwHgC596E8ZqGY8="
},
{
"name": "4005-HID-apple-Add-necessary-IDs-and-support-for-replacem.patch",
"hash": "sha256-SRKESCbpxSYm7U0VyCmvkmT/er6/GEHhwo8tgJDO6mQ="
},
{
"name": "4006-HID-magicmouse-Add-MacBookPro15-1-replacement-trackp.patch",
"hash": "sha256-uAlT/4ADwYyKvbuPQaGwqCjZ2/myruC63etVV6cfFLk="
},
{
"name": "7001-drm-i915-fbdev-Discard-BIOS-framebuffers-exceeding-h.patch",
"hash": "sha256-O6RHFxmKZn7aCq1D+r5z2T3jLt0r5+01EABD9rs0E5M="
},
{
"name": "8001-Add-APFS-driver.patch",
"hash": "sha256-O3RNtpeZQENPEfyYi/0ZTLhAWBAw6pmxMS30NUxOTdk="
},
{
"name": "8002-Necessary-modifications-to-build-APFS-with-the-kerne.patch",
"hash": "sha256-n1SH5vC//LRJdWOavH9/BHqBTjkUj5f+dFGitSeHksw="
}
]
}

View file

@ -0,0 +1,99 @@
#!/usr/bin/env nix-shell
#!nix-shell -i python -p nix -p "python3.withPackages (p: [p.requests])"
import argparse
import json
import re
import subprocess
import sys
from tempfile import NamedTemporaryFile
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
API_BASE = "https://api.github.com"
PATCH_PATTERN = re.compile(r"^\d{4}-.*\.patch$")
parser = argparse.ArgumentParser(
description="Update linux-t2 patches from a GitHub repository."
)
parser.add_argument("filename", help="the output filename")
parser.add_argument(
"--repository",
help="the source github repository",
default="t2linux/linux-t2-patches",
nargs="?",
)
ref_group = parser.add_mutually_exclusive_group()
ref_group.add_argument(
"--reference", help="the git reference for the patches", default=None, nargs="?"
)
ref_group.add_argument(
"--branch", help="the git branch to fetch", default=None, nargs="?"
)
def get_api(endpoint, *args, **kwargs):
kwargs["headers"] = {"X-GitHub-Api-Version": "2022-11-28"}
response = requests.get(API_BASE + endpoint, *args, **kwargs)
response.raise_for_status()
return response.json()
def get_sri_hash(data: bytes):
with NamedTemporaryFile() as tmpfile:
tmpfile.write(data)
tmpfile.flush()
proc = subprocess.run(
["nix-hash", "--sri", "--flat", "--type", "sha256", tmpfile.name],
check=True,
capture_output=True,
)
return proc.stdout.decode("utf8").strip()
def download_task(patch: dict):
patch_content = requests.get(patch["download_url"])
patch_hash = get_sri_hash(patch_content.content)
print(f"{patch['name']}: {patch_hash}")
return {"name": patch["name"], "hash": patch_hash}
def main():
args = parser.parse_args()
reference = args.reference
branch = args.branch
if reference is None:
if branch is None:
print("Branch and reference not provided, fetching default branch")
branch = get_api(f"/repos/{args.repository}")["default_branch"]
print(f"Reference not provided, fetching from branch {branch}")
branch_data = get_api(f"/repos/{args.repository}/branches/{branch}")
reference = branch_data["commit"]["sha"]
print(f"Repository: {args.repository}")
print(f" Reference: {reference}")
base_url = f"https://raw.githubusercontent.com/{args.repository}/{reference}/"
contents = get_api(f"/repos/{args.repository}/contents", {"ref": reference})
patches = filter(lambda e: PATCH_PATTERN.match(e.get("name")), contents)
patches_with_hash = []
with ThreadPoolExecutor() as executor:
futures = {executor.submit(download_task, patch) for patch in patches}
for future in as_completed(futures):
patches_with_hash.append(future.result())
result = {"base_url": base_url, "patches": sorted(patches_with_hash, key=lambda p: p["name"])}
with open(args.filename, "w+") as f:
json.dump(result, f, indent=2)
f.write("\n") # write final newline
print(f"Wrote to {args.filename}")
return 0
if __name__ == "__main__":
sys.exit(main())

View file

@ -5,11 +5,13 @@
../../../common/cpu/amd/pstate.nix ../../../common/cpu/amd/pstate.nix
../../../common/gpu/amd ../../../common/gpu/amd
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
../../battery.nix ../../battery.nix
]; ];
# 6.5 adds many fixes and improvements for the Ally # 6.5 adds many fixes and improvements for the Ally
# This includes for example performance, audio and bluetooth # This includes for example performance, audio and bluetooth
boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.5") (lib.mkDefault pkgs.linuxPackages_latest); boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.5") (
lib.mkDefault pkgs.linuxPackages_latest
);
} }

View file

@ -1,4 +1,9 @@
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
let let
p = pkgs.writeScriptBin "charge-upto" '' p = pkgs.writeScriptBin "charge-upto" ''
echo ''${0:-100} > /sys/class/power_supply/BAT?/charge_control_end_threshold echo ''${0:-100} > /sys/class/power_supply/BAT?/charge_control_end_threshold
@ -22,8 +27,14 @@ in
config = { config = {
environment.systemPackages = lib.mkIf cfg.enableChargeUptoScript [ p ]; environment.systemPackages = lib.mkIf cfg.enableChargeUptoScript [ p ];
systemd.services.battery-charge-threshold = { systemd.services.battery-charge-threshold = {
wantedBy = [ "local-fs.target" "suspend.target" ]; wantedBy = [
after = [ "local-fs.target" "suspend.target" ]; "local-fs.target"
"suspend.target"
];
after = [
"local-fs.target"
"suspend.target"
];
description = "Set the battery charge threshold to ${toString cfg.chargeUpto}%"; description = "Set the battery charge threshold to ${toString cfg.chargeUpto}%";
startLimitBurst = 5; startLimitBurst = 5;
startLimitIntervalSec = 1; startLimitIntervalSec = 1;

View file

@ -8,7 +8,7 @@
../../common/gpu/nvidia/prime.nix ../../common/gpu/nvidia/prime.nix
../../common/gpu/nvidia/ampere ../../common/gpu/nvidia/ampere
../../common/pc/laptop ../../common/pc/laptop
../../common/pc/laptop/ssd ../../common/pc/ssd
]; ];
hardware.nvidia = { hardware.nvidia = {

View file

@ -3,7 +3,8 @@
pkgs, pkgs,
config, config,
... ...
}: { }:
{
imports = [ imports = [
../../common/cpu/amd ../../common/cpu/amd
../../common/cpu/amd/raphael/igpu.nix ../../common/cpu/amd/raphael/igpu.nix
@ -20,7 +21,9 @@
# The bottom 2 parts are taken from the framework 16-inch laptops configurations. # The bottom 2 parts are taken from the framework 16-inch laptops configurations.
# Workaround for SuspendThenHibernate: https://lore.kernel.org/linux-kernel/20231106162310.85711-1-mario.limonciello@amd.com/ # Workaround for SuspendThenHibernate: https://lore.kernel.org/linux-kernel/20231106162310.85711-1-mario.limonciello@amd.com/
boot.kernelParams = lib.optionals (lib.versionOlder config.boot.kernelPackages.kernel.version "6.8") ["rtc_cmos.use_acpi_alarm=1"]; boot.kernelParams =
lib.optionals (lib.versionOlder config.boot.kernelPackages.kernel.version "6.8")
[ "rtc_cmos.use_acpi_alarm=1" ];
# AMD has better battery life with PPD over TLP: # AMD has better battery life with PPD over TLP:
# https://community.frame.work/t/responded-amd-7040-sleep-states/38101/13 # https://community.frame.work/t/responded-amd-7040-sleep-states/38101/13

View file

@ -1,16 +1,16 @@
{ ... }: { ... }:
{ {
imports = [ imports = [
../../common/cpu/amd ../../common/cpu/amd
../../common/gpu/nvidia/prime.nix ../../common/gpu/nvidia/prime.nix
../../common/gpu/nvidia/ampere ../../common/gpu/nvidia/ampere
../../common/pc/laptop ../../common/pc/laptop
../../common/pc/ssd ../../common/pc/ssd
]; ];
hardware.nvidia.prime = { hardware.nvidia.prime = {
amdgpuBusId = "PCI:5:0:0"; amdgpuBusId = "PCI:5:0:0";
nvidiaBusId = "PCI:1:0:0"; nvidiaBusId = "PCI:1:0:0";
}; };
} }

View file

@ -1,4 +1,5 @@
{ config, {
config,
lib, lib,
... ...
}: }:
@ -7,15 +8,22 @@ let
inherit (lib) mkEnableOption mkIf mkMerge; inherit (lib) mkEnableOption mkIf mkMerge;
cfg = config.hardware.asus.flow.gv302x; cfg = config.hardware.asus.flow.gv302x;
in { in
{
imports = [ imports = [
../shared.nix ../shared.nix
]; ];
options.hardware.asus.flow.gv302x.amdgpu = { options.hardware.asus.flow.gv302x.amdgpu = {
recovery.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = false; }; recovery.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // {
sg_display.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = true; }; default = false;
psr.enable = (mkEnableOption "Enable amdgpu.dcdebugmask=0x10 kernel boot param") // { default = true; }; };
sg_display.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // {
default = true;
};
psr.enable = (mkEnableOption "Enable amdgpu.dcdebugmask=0x10 kernel boot param") // {
default = true;
};
}; };
config = mkMerge [ config = mkMerge [

View file

@ -1,4 +1,5 @@
{ lib, {
lib,
pkgs, pkgs,
config, config,
... ...
@ -7,7 +8,8 @@
let let
inherit (lib) mkDefault; inherit (lib) mkDefault;
in { in
{
imports = [ imports = [
../shared.nix ../shared.nix
## "prime.nix" loads this, aleady: ## "prime.nix" loads this, aleady:
@ -23,8 +25,6 @@ in {
blacklistedKernelModules = [ "nouveau" ]; blacklistedKernelModules = [ "nouveau" ];
}; };
hardware = { hardware = {
## Enable the Nvidia card, as well as Prime and Offload: ## Enable the Nvidia card, as well as Prime and Offload:
amdgpu.initrd.enable = mkDefault true; amdgpu.initrd.enable = mkDefault true;
@ -49,7 +49,7 @@ in {
}; };
dynamicBoost.enable = mkDefault true; dynamicBoost.enable = mkDefault true;
}; };
}; };
} }

View file

@ -1,14 +1,23 @@
{ config, {
config,
pkgs, pkgs,
lib, lib,
... ...
}: }:
let let
inherit (lib) mkDefault mkEnableOption mkIf mkMerge version versionAtLeast versionOlder; inherit (lib)
mkDefault
mkEnableOption
mkIf
mkMerge
version
versionAtLeast
;
cfg = config.hardware.asus.flow.gv302x; cfg = config.hardware.asus.flow.gv302x;
in { in
{
imports = [ imports = [
../../../common/cpu/amd ../../../common/cpu/amd
@ -26,12 +35,12 @@ in {
# enables it for kernel 6.9.x onwards. # enables it for kernel 6.9.x onwards.
# #
# Note: the device name is "ASUS N-KEY Device". # Note: the device name is "ASUS N-KEY Device".
keyboard.autosuspend.enable = ( keyboard.autosuspend.enable =
mkEnableOption "Enable auto-suspend on the internal USB keyboard (ASUS N-KEY Device) on Flow GV302X" (mkEnableOption "Enable auto-suspend on the internal USB keyboard (ASUS N-KEY Device) on Flow GV302X")
) // { // {
default = versionAtLeast config.boot.kernelPackages.kernel.version "6.9"; default = versionAtLeast config.boot.kernelPackages.kernel.version "6.9";
defaultText = lib.literalExpression "lib.versionAtLeast config.boot.kernelPackages.kernel.version \"6.9\""; defaultText = lib.literalExpression "lib.versionAtLeast config.boot.kernelPackages.kernel.version \"6.9\"";
}; };
# The ASUS 8295 ITE device will cause an immediate wake-up when trying to suspend the laptop. # The ASUS 8295 ITE device will cause an immediate wake-up when trying to suspend the laptop.
# After the first successful hibernate, it will work as expected, however. # After the first successful hibernate, it will work as expected, however.
# NOTE: I'm not actually sure what this device, as neither the touchpad nor the M1-M4 keys cause a wake-up. # NOTE: I'm not actually sure what this device, as neither the touchpad nor the M1-M4 keys cause a wake-up.
@ -63,7 +72,7 @@ in {
evdev:name:*:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:* evdev:name:*:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
KEYBOARD_KEY_ff31007c=f20 KEYBOARD_KEY_ff31007c=f20
''; '';
}; };
}; };
#flow devices are 2 in 1 laptops #flow devices are 2 in 1 laptops
@ -71,7 +80,7 @@ in {
} }
(mkIf (! cfg.keyboard.autosuspend.enable) { (mkIf (!cfg.keyboard.autosuspend.enable) {
services.udev.extraRules = '' services.udev.extraRules = ''
# Disable power auto-suspend for the ASUS N-KEY device, i.e. USB Keyboard. # Disable power auto-suspend for the ASUS N-KEY device, i.e. USB Keyboard.
# Otherwise on certain kernel-versions, it will tend to take 1-2 key-presses to wake-up after the device suspends. # Otherwise on certain kernel-versions, it will tend to take 1-2 key-presses to wake-up after the device suspends.
@ -79,7 +88,7 @@ in {
''; '';
}) })
(mkIf (! cfg.ite-device.wakeup.enable) { (mkIf (!cfg.ite-device.wakeup.enable) {
services.udev.extraRules = '' services.udev.extraRules = ''
# Disable power wakeup for the 8295 ITE device. # Disable power wakeup for the 8295 ITE device.
# Otherwise on certain kernel-versions, it will tend to cause the laptop to immediately wake-up when suspending. # Otherwise on certain kernel-versions, it will tend to cause the laptop to immediately wake-up when suspending.

View file

@ -2,7 +2,7 @@
{ {
imports = [ imports = [
../../common/cpu/intel ../../common/cpu/intel
../../common/pc/laptop ../../common/pc/laptop
]; ];
#Nouveau doesn't work at all on this model. #Nouveau doesn't work at all on this model.

View file

@ -1,8 +1,7 @@
{ config, lib, ... }: { config, lib, ... }:
{ {
imports = imports = [
[
../../common/cpu/intel ../../common/cpu/intel
../../common/gpu/nvidia ../../common/gpu/nvidia
../../common/gpu/nvidia/prime.nix ../../common/gpu/nvidia/prime.nix
@ -11,14 +10,12 @@
../battery.nix ../battery.nix
]; ];
hardware.nvidia = hardware.nvidia = {
{
modesetting.enable = lib.mkDefault true; modesetting.enable = lib.mkDefault true;
open = lib.mkIf (lib.versionAtLeast config.hardware.nvidia.package.version "555") true; open = lib.mkIf (lib.versionAtLeast config.hardware.nvidia.package.version "555") true;
prime = prime = {
{ intelBusId = "PCI:0:2:0";
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0"; nvidiaBusId = "PCI:1:0:0";
}; };
}; };

View file

@ -1,17 +1,17 @@
{ {
imports = [ imports = [
../../../common/cpu/amd ../../../common/cpu/amd
../../../common/cpu/amd/pstate.nix ../../../common/cpu/amd/pstate.nix
../../../common/gpu/nvidia ../../../common/gpu/nvidia
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/gpu/nvidia/ampere ../../../common/gpu/nvidia/ampere
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/ssd ../../../common/pc/ssd
../../battery.nix ../../battery.nix
]; ];
hardware.nvidia.prime = { hardware.nvidia.prime = {
amdgpuBusId = "PCI:05:00:0"; amdgpuBusId = "PCI:05:00:0";
nvidiaBusId = "PCI:01:00:0"; nvidiaBusId = "PCI:01:00:0";
}; };
} }

View file

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

View file

@ -1,16 +1,16 @@
{ {
imports = [ imports = [
../../../common/cpu/amd ../../../common/cpu/amd
../../../common/cpu/amd/pstate.nix ../../../common/cpu/amd/pstate.nix
../../../common/gpu/nvidia ../../../common/gpu/nvidia
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/gpu/nvidia/ampere ../../../common/gpu/nvidia/ampere
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/ssd ../../../common/pc/ssd
../../battery.nix ../../battery.nix
]; ];
hardware.nvidia.prime = { hardware.nvidia.prime = {
amdgpuBusId = "PCI:5:0:0"; amdgpuBusId = "PCI:5:0:0";
nvidiaBusId = "PCI:1:0:0"; nvidiaBusId = "PCI:1:0:0";
}; };

View file

@ -20,7 +20,9 @@
options snd-hda-intel patch=hda-jack-retask.fw options snd-hda-intel patch=hda-jack-retask.fw
''; '';
# before 5.12 it would interpret every keystroke as the power button # before 5.12 it would interpret every keystroke as the power button
boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.12") (lib.mkDefault pkgs.linuxPackages_latest); boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.12") (
lib.mkDefault pkgs.linuxPackages_latest
);
hardware.nvidia.prime = { hardware.nvidia.prime = {
amdgpuBusId = "PCI:5:0:0"; amdgpuBusId = "PCI:5:0:0";

View file

@ -7,7 +7,7 @@
imports = [ imports = [
../../../common/cpu/intel/tiger-lake ../../../common/cpu/intel/tiger-lake
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
../../battery.nix ../../battery.nix
]; ];

View file

@ -0,0 +1,53 @@
# Asus Zenbook Duo 14 UX481
These profiles has been tested on a slightly modified device as I have swapped the Intel Optane NVME for a Kingston NVME with a higher capacity.
# GPU
You need to pick between running only Intel iGPU or running both Intel iGPU and NVIDIA dGPU. By only running iGPU the battery life is a bit better as the dGPU is turned off. You can offload applications if running on NVIDIA dGPU using
```bash
nvidia-offload
```
## Battery charging limit:
Using the ASUS module you can limit the charging percentage. This can be done as follows:
```nix
hardware.asus.battery =
{
chargeUpto = 90; # Maximum level of charge for your battery, as a percentage.
enableChargeUptoScript = true; # Whether to add charge-upto to environment.systemPackages. `charge-upto 100` temporarily sets the charge limit to 100%, useful if you're going to need the extra battery on a longer journey.
};
```
## Hardware:
```bash
$ lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation Comet Lake-U v1 4c Host Bridge/DRAM Controller [8086:9b61] (rev 0c)
00:02.0 VGA compatible controller [0300]: Intel Corporation CometLake-U GT2 [UHD Graphics] [8086:9b41] (rev 02)
00:04.0 Signal processing controller [1180]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem [8086:1903] (rev 0c)
00:08.0 System peripheral [0880]: Intel Corporation Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model [8086:1911]
00:12.0 Signal processing controller [1180]: Intel Corporation Comet Lake Thermal Subsytem [8086:02f9]
00:14.0 USB controller [0c03]: Intel Corporation Comet Lake PCH-LP USB 3.1 xHCI Host Controller [8086:02ed]
00:14.2 RAM memory [0500]: Intel Corporation Comet Lake PCH-LP Shared SRAM [8086:02ef]
00:14.3 Network controller [0280]: Intel Corporation Comet Lake PCH-LP CNVi WiFi [8086:02f0]
00:15.0 Serial bus controller [0c80]: Intel Corporation Serial IO I2C Host Controller [8086:02e8]
00:15.1 Serial bus controller [0c80]: Intel Corporation Comet Lake Serial IO I2C Host Controller [8086:02e9]
00:15.2 Serial bus controller [0c80]: Intel Corporation Comet Lake PCH-LP LPSS: I2C Controller #2 [8086:02ea]
00:15.3 Serial bus controller [0c80]: Intel Corporation Device [8086:02eb]
00:16.0 Communication controller [0780]: Intel Corporation Comet Lake Management Engine Interface [8086:02e0]
00:1c.0 PCI bridge [0604]: Intel Corporation Comet Lake PCI Express Root Port #1 [8086:02b8] (rev f0)
00:1c.4 PCI bridge [0604]: Intel Corporation Comet Lake PCI Express Root Port #5 [8086:02bc] (rev f0)
00:1d.0 PCI bridge [0604]: Intel Corporation Comet Lake PCI Express Root Port #9 [8086:02b0] (rev f0)
00:1d.4 PCI bridge [0604]: Intel Corporation Comet Lake PCI Express Root Port #13 [8086:02b4] (rev f0)
00:1f.0 ISA bridge [0601]: Intel Corporation Comet Lake PCH-LP LPC Premium Controller/eSPI Controller [8086:0284]
00:1f.3 Audio device [0403]: Intel Corporation Comet Lake PCH-LP cAVS [8086:02c8]
00:1f.4 SMBus [0c05]: Intel Corporation Comet Lake PCH-LP SMBus Host Controller [8086:02a3]
00:1f.5 Serial bus controller [0c80]: Intel Corporation Comet Lake SPI (flash) Controller [8086:02a4]
02:00.0 3D controller [0302]: NVIDIA Corporation GP108BM [GeForce MX250] [10de:1d52] (rev a1)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS522A PCI Express Card Reader [10ec:522a] (rev 01)
04:00.0 Non-Volatile memory controller [0108]: Kingston Technology Company, Inc. NV2 NVMe SSD [TC2200] (DRAM-less) [2646:501d]
```

View file

@ -0,0 +1,8 @@
{ lib, ... }:
{
imports = [
../shared.nix
../../../../common/gpu/intel/comet-lake
../../../../common/gpu/nvidia/disable.nix # Disabling nvidia
];
}

View file

@ -0,0 +1,17 @@
{ lib, ... }:
{
imports = [
../shared.nix
../../../../common/gpu/nvidia/pascal
../../../../common/gpu/nvidia/prime.nix
];
hardware.nvidia = {
prime = {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:2:0:0";
};
dynamicBoost.enable = lib.mkForce false; # Dynamic boost is not supported on Pascal architeture
};
}

View file

@ -0,0 +1,25 @@
{
config,
lib,
...
}:
{
imports = [
../../../common/cpu/intel/comet-lake/cpu-only.nix
../../../common/pc/laptop
../../../common/pc/ssd
../../battery.nix
];
boot.kernelParams = [
# These options are needed for suspend to work,
# otherwise the nvme will be mounted read-only on resume
"pcie_aspm=off"
"pcie_port_pm=off"
"nvme_core.default_ps_max_latency_us=0"
"mem_sleep_default=deep"
];
services.thermald.enable = lib.mkDefault true;
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
}

View file

@ -8,7 +8,7 @@
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/gpu/intel/comet-lake ../../../common/gpu/intel/comet-lake
../../../common/pc/laptop/ssd ../../../common/pc/ssd
../../../common/hidpi.nix # 4K screen is HiDPI ../../../common/hidpi.nix # 4K screen is HiDPI
../../battery.nix ../../battery.nix
]; ];

View file

@ -8,7 +8,7 @@
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/gpu/nvidia/ampere ../../../common/gpu/nvidia/ampere
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
hardware.nvidia = { hardware.nvidia = {

View file

@ -6,7 +6,7 @@
../../../common/cpu/amd/pstate.nix ../../../common/cpu/amd/pstate.nix
../../../common/gpu/amd ../../../common/gpu/amd
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
services = { services = {

View file

@ -1,4 +1,5 @@
{ config, {
config,
lib, lib,
... ...
}: }:
@ -7,15 +8,22 @@ let
inherit (lib) mkEnableOption mkIf mkMerge; inherit (lib) mkEnableOption mkIf mkMerge;
cfg = config.hardware.asus.zephyrus.ga402x; cfg = config.hardware.asus.zephyrus.ga402x;
in { in
{
imports = [ imports = [
../shared.nix ../shared.nix
]; ];
options.hardware.asus.zephyrus.ga402x.amdgpu = { options.hardware.asus.zephyrus.ga402x.amdgpu = {
recovery.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = false; }; recovery.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // {
sg_display.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = true; }; default = false;
psr.enable = (mkEnableOption "Enable amdgpu.dcdebugmask=0x10 kernel boot param") // { default = true; }; };
sg_display.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // {
default = true;
};
psr.enable = (mkEnableOption "Enable amdgpu.dcdebugmask=0x10 kernel boot param") // {
default = true;
};
}; };
config = mkMerge [ config = mkMerge [

View file

@ -1,4 +1,5 @@
{ lib, {
lib,
pkgs, pkgs,
... ...
}: }:
@ -6,7 +7,8 @@
let let
inherit (lib) mkDefault; inherit (lib) mkDefault;
in { in
{
imports = [ imports = [
../shared.nix ../shared.nix
## "prime.nix" loads this, aleady: ## "prime.nix" loads this, aleady:

View file

@ -1,14 +1,24 @@
{ config, {
config,
pkgs, pkgs,
lib, lib,
... ...
}: }:
let let
inherit (lib) mkDefault mkEnableOption mkIf mkMerge version versionAtLeast versionOlder; inherit (lib)
mkDefault
mkEnableOption
mkIf
mkMerge
version
versionAtLeast
versionOlder
;
cfg = config.hardware.asus.zephyrus.ga402x; cfg = config.hardware.asus.zephyrus.ga402x;
in { in
{
imports = [ imports = [
../../../common/cpu/amd ../../../common/cpu/amd
@ -26,12 +36,12 @@ in {
# enables it for kernel 6.9.x onwards. # enables it for kernel 6.9.x onwards.
# #
# Note: the device name is "ASUS N-KEY Device". # Note: the device name is "ASUS N-KEY Device".
keyboard.autosuspend.enable = ( keyboard.autosuspend.enable =
mkEnableOption "Enable auto-suspend on the internal USB keyboard (ASUS N-KEY Device) on Zephyrus GA402X" (mkEnableOption "Enable auto-suspend on the internal USB keyboard (ASUS N-KEY Device) on Zephyrus GA402X")
) // { // {
default = versionAtLeast config.boot.kernelPackages.kernel.version "6.9"; default = versionAtLeast config.boot.kernelPackages.kernel.version "6.9";
defaultText = lib.literalExpression "lib.versionAtLeast config.boot.kernelPackages.kernel.version \"6.9\""; defaultText = lib.literalExpression "lib.versionAtLeast config.boot.kernelPackages.kernel.version \"6.9\"";
}; };
# The ASUS 8295 ITE device will cause an immediate wake-up when trying to suspend the laptop. # The ASUS 8295 ITE device will cause an immediate wake-up when trying to suspend the laptop.
# After the first successful hibernate, it will work as expected, however. # After the first successful hibernate, it will work as expected, however.
# NOTE: I'm not actually sure what this device, as neither the touchpad nor the M1-M4 keys cause a wake-up. # NOTE: I'm not actually sure what this device, as neither the touchpad nor the M1-M4 keys cause a wake-up.
@ -67,7 +77,7 @@ in {
}; };
} }
(mkIf (! cfg.keyboard.autosuspend.enable) { (mkIf (!cfg.keyboard.autosuspend.enable) {
services.udev.extraRules = '' services.udev.extraRules = ''
# Disable power auto-suspend for the ASUS N-KEY device, i.e. USB Keyboard. # Disable power auto-suspend for the ASUS N-KEY device, i.e. USB Keyboard.
# Otherwise on certain kernel-versions, it will tend to take 1-2 key-presses to wake-up after the device suspends. # Otherwise on certain kernel-versions, it will tend to take 1-2 key-presses to wake-up after the device suspends.
@ -75,7 +85,7 @@ in {
''; '';
}) })
(mkIf (! cfg.ite-device.wakeup.enable) { (mkIf (!cfg.ite-device.wakeup.enable) {
services.udev.extraRules = '' services.udev.extraRules = ''
# Disable power wakeup for the 8295 ITE device. # Disable power wakeup for the 8295 ITE device.
# Otherwise on certain kernel-versions, it will tend to cause the laptop to immediately wake-up when suspending. # Otherwise on certain kernel-versions, it will tend to cause the laptop to immediately wake-up when suspending.

View file

@ -7,6 +7,7 @@
../../../common/gpu/nvidia/ada-lovelace ../../../common/gpu/nvidia/ada-lovelace
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/ssd ../../../common/pc/ssd
../shared/backlight.nix
]; ];
hardware.nvidia = { hardware.nvidia = {
@ -15,6 +16,7 @@
nvidiaBusId = "PCI:1:0:0"; nvidiaBusId = "PCI:1:0:0";
}; };
modesetting.enable = lib.mkDefault true;
dynamicBoost.enable = lib.mkDefault true; dynamicBoost.enable = lib.mkDefault true;
}; };
@ -23,7 +25,9 @@
udev.extraHwdb = '' udev.extraHwdb = ''
evdev:name:*:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:* evdev:name:*:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
KEYBOARD_KEY_ff31007c=f20 # fixes mic mute button KEYBOARD_KEY_ff31007c=f20 # fixes mic mute button
KEYBOARD_KEY_ff3100b2=home # Set fn+LeftArrow as Home
KEYBOARD_KEY_ff3100b3=end # Set fn+RightArrow as End
''; '';
}; };
} }

View file

@ -0,0 +1,9 @@
{ ... }:
{
# These flags are used to enable backlight control when the dGPU is working in hybrid mode
boot.kernelParams = [
"i915.enable_dpcd_backlight=1"
"nvidia.NVreg_EnableBacklightHandler=0"
"nvidia.NVReg_RegistryDwords=EnableBrightnessControl=0"
];
}

View file

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

View file

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

View file

@ -8,23 +8,13 @@ in
imports = [ ./. ]; imports = [ ./. ];
boot = lib.mkMerge [ boot = lib.mkMerge [
(lib.mkIf (lib.mkIf ((lib.versionAtLeast kver "5.17") && (lib.versionOlder kver "6.1")) {
( kernelParams = [ "initcall_blacklist=acpi_cpufreq_init" ];
(lib.versionAtLeast kver "5.17") kernelModules = [ "amd-pstate" ];
&& (lib.versionOlder kver "6.1") })
) (lib.mkIf ((lib.versionAtLeast kver "6.1") && (lib.versionOlder kver "6.3")) {
{ kernelParams = [ "amd_pstate=passive" ];
kernelParams = [ "initcall_blacklist=acpi_cpufreq_init" ]; })
kernelModules = [ "amd-pstate" ];
})
(lib.mkIf
(
(lib.versionAtLeast kver "6.1")
&& (lib.versionOlder kver "6.3")
)
{
kernelParams = [ "amd_pstate=passive" ];
})
(lib.mkIf (lib.versionAtLeast kver "6.3") { (lib.mkIf (lib.versionAtLeast kver "6.3") {
kernelParams = [ "amd_pstate=active" ]; kernelParams = [ "amd_pstate=active" ];
}) })

View file

@ -3,4 +3,6 @@
./cpu-only.nix ./cpu-only.nix
../../../gpu/intel/comet-lake ../../../gpu/intel/comet-lake
]; ];
hardware.intelgpu.vaapiDriver = "intel-media-driver";
} }

View file

@ -0,0 +1,6 @@
{
imports = [
../cpu-only.nix
../../../gpu/intel/meteor-lake
];
}

View file

@ -0,0 +1,5 @@
{
imports = [
../.
];
}

View file

@ -0,0 +1,5 @@
{
imports = [
../cpu-only.nix
];
}

View file

@ -0,0 +1,6 @@
{
imports = [
./cpu-only.nix
../../../gpu/intel/skylake
];
}

View file

@ -0,0 +1,5 @@
{
imports = [
../cpu-only.nix
];
}

View file

@ -0,0 +1,6 @@
{
imports = [
./cpu-only.nix
../../../gpu/intel/whiskey-lake
];
}

View file

@ -6,9 +6,18 @@
# Backward-compat for 24.05, can be removed after we drop 24.05 support # Backward-compat for 24.05, can be removed after we drop 24.05 support
imports = lib.optionals (lib.versionOlder lib.version "24.11pre") [ imports = lib.optionals (lib.versionOlder lib.version "24.11pre") [
(lib.mkAliasOptionModule [ "hardware" "graphics" "enable" ] [ "hardware" "opengl" "enable" ]) (lib.mkAliasOptionModule [ "hardware" "graphics" "enable" ] [ "hardware" "opengl" "enable" ])
(lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages" ] [ "hardware" "opengl" "extraPackages" ]) (lib.mkAliasOptionModule
(lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages32" ] [ "hardware" "opengl" "extraPackages32" ]) [ "hardware" "graphics" "extraPackages" ]
(lib.mkAliasOptionModule [ "hardware" "graphics" "enable32Bit" ] [ "hardware" "opengl" "driSupport32Bit" ]) [ "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" "package" ] [ "hardware" "opengl" "package" ])
(lib.mkAliasOptionModule [ "hardware" "graphics" "package32" ] [ "hardware" "opengl" "package32" ]) (lib.mkAliasOptionModule [ "hardware" "graphics" "package32" ] [ "hardware" "opengl" "package32" ])
]; ];

View file

@ -1,5 +1,8 @@
{ {
imports = [ ../. ]; imports = [ ../. ];
# Explicitly set amdgpu support in place of radeon # Explicitly set amdgpu support in place of radeon
boot.kernelParams = [ "radeon.cik_support=0" "amdgpu.cik_support=1" ]; boot.kernelParams = [
"radeon.cik_support=0"
"amdgpu.cik_support=1"
];
} }

View file

@ -1,5 +1,8 @@
{ {
imports = [ ../. ]; imports = [ ../. ];
# Explicitly set amdgpu support in place of radeon # Explicitly set amdgpu support in place of radeon
boot.kernelParams = [ "radeon.si_support=0" "amdgpu.si_support=1" ]; boot.kernelParams = [
"radeon.si_support=0"
"amdgpu.si_support=1"
];
} }

View file

@ -45,11 +45,15 @@
intel-vaapi-driver = (pkgs.intel-vaapi-driver or pkgs.vaapiIntel).override { intel-vaapi-driver = (pkgs.intel-vaapi-driver or pkgs.vaapiIntel).override {
enableHybridCodec = cfg.enableHybridCodec; enableHybridCodec = cfg.enableHybridCodec;
}; };
intel-vaapi-driver-32 = (pkgs.driversi686Linux.intel-vaapi-driver or pkgs.driversi686Linux.vaapiIntel).override { intel-vaapi-driver-32 =
enableHybridCodec = cfg.enableHybridCodec; (pkgs.driversi686Linux.intel-vaapi-driver or pkgs.driversi686Linux.vaapiIntel).override
}; {
enableHybridCodec = cfg.enableHybridCodec;
};
useIntelOcl = useIntelVaapiDriver && (config.hardware.enableAllFirmware or config.nixpkgs.config.allowUnfree or false); useIntelOcl =
useIntelVaapiDriver
&& (config.hardware.enableAllFirmware or config.nixpkgs.config.allowUnfree or false);
intel-ocl = pkgs.intel-ocl; intel-ocl = pkgs.intel-ocl;
useIntelMediaDriver = cfg.vaapiDriver == "intel-media-driver" || cfg.vaapiDriver == null; useIntelMediaDriver = cfg.vaapiDriver == "intel-media-driver" || cfg.vaapiDriver == null;

View file

@ -0,0 +1,5 @@
{
imports = [ ../. ];
hardware.intelgpu.vaapiDriver = "intel-media-driver";
}

View file

@ -0,0 +1,5 @@
{
imports = [
../.
];
}

View file

@ -0,0 +1,18 @@
{ pkgs, ... }:
{
imports = [ ../. ];
boot.kernelParams = [
"i915.enable_guc=2"
];
# VP9 decoding not supported when using intel-media-driver
# https://github.com/intel/media-driver/issues/1024
# NixOS Wiki recommends using the legacy intel-vaapi-driver with the hybrid codec over that one for Skylake.
# https://wiki.nixos.org/wiki/Accelerated_Video_Playback
hardware.intelgpu = {
vaapiDriver = "intel-vaapi-driver";
enableHybridCodec = true;
};
}

View file

@ -0,0 +1,7 @@
{
imports = [ ../. ];
boot.kernelParams = [ "i915.enable_guc=2" ];
hardware.intelgpu.vaapiDriver = "intel-media-driver";
}

View file

@ -1,4 +1,4 @@
{lib, config, ...}: { lib, config, ... }:
let let
nvidiaPackage = config.hardware.nvidia.package; nvidiaPackage = config.hardware.nvidia.package;
in in

View file

@ -1,4 +1,4 @@
{lib, config, ...}: { lib, config, ... }:
let let
nvidiaPackage = config.hardware.nvidia.package; nvidiaPackage = config.hardware.nvidia.package;
in in

View file

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

View file

@ -8,7 +8,7 @@
blacklist nouveau blacklist nouveau
options nouveau modeset=0 options nouveau modeset=0
''; '';
services.udev.extraRules = '' services.udev.extraRules = ''
# Remove NVIDIA USB xHCI Host Controller devices, if present # Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1" ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
@ -22,5 +22,10 @@
# Remove NVIDIA VGA/3D controller devices # Remove NVIDIA VGA/3D controller devices
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1" ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
''; '';
boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" ]; boot.blacklistedKernelModules = [
"nouveau"
"nvidia"
"nvidia_drm"
"nvidia_modeset"
];
} }

View file

@ -0,0 +1,7 @@
{ ... }:
{
imports = [ ../. ];
# The open source driver does not support Fermi GPUs.
hardware.nvidia.open = false;
}

View file

@ -1,4 +1,4 @@
{lib, ...}: { lib, ... }:
{ {
imports = [ ../. ]; imports = [ ../. ];

View file

@ -1,4 +1,4 @@
{lib, ...}: { lib, ... }:
{ {
imports = [ ../. ]; imports = [ ../. ];

View file

@ -1,4 +1,4 @@
{lib, ...}: { lib, ... }:
{ {
imports = [ ../. ]; imports = [ ../. ];

View file

@ -3,11 +3,35 @@
{ {
imports = [ ./. ]; imports = [ ./. ];
hardware.nvidia.prime = { options = {
offload = { hardware.nvidia.primeBatterySaverSpecialisation = lib.mkEnableOption "configure a specialisation which turns on NVIDIA Prime battery saver";
enable = lib.mkOverride 990 true; };
enableOffloadCmd = lib.mkIf config.hardware.nvidia.prime.offload.enable true; # Provides `nvidia-offload` command.
config = {
hardware.nvidia.prime = {
offload = {
enable = lib.mkOverride 990 true;
enableOffloadCmd = lib.mkIf config.hardware.nvidia.prime.offload.enable true; # Provides `nvidia-offload` command.
};
# Hardware should specify the bus ID for intel/nvidia devices
};
specialisation = lib.mkIf config.hardware.nvidia.primeBatterySaverSpecialisation {
battery-saver.configuration = {
system.nixos.tags = [ "battery-saver" ];
imports = [
# Leave only the integrated GPU enabled
./disable.nix
];
hardware.nvidia = {
prime.offload.enable = lib.mkForce false;
powerManagement = {
enable = lib.mkForce false;
finegrained = lib.mkForce false;
};
};
};
}; };
# Hardware should specify the bus ID for intel/nvidia devices
}; };
} }

View file

@ -1,4 +1,4 @@
{lib, config, ...}: { lib, config, ... }:
let let
nvidiaPackage = config.hardware.nvidia.package; nvidiaPackage = config.hardware.nvidia.package;
in in

View file

@ -6,6 +6,8 @@
# Gnome 40 introduced a new way of managing power, without tlp. # Gnome 40 introduced a new way of managing power, without tlp.
# However, these 2 services clash when enabled simultaneously. # However, these 2 services clash when enabled simultaneously.
# https://github.com/NixOS/nixos-hardware/issues/260 # https://github.com/NixOS/nixos-hardware/issues/260
services.tlp.enable = lib.mkDefault ((lib.versionOlder (lib.versions.majorMinor lib.version) "21.05") services.tlp.enable = lib.mkDefault (
|| !config.services.power-profiles-daemon.enable); (lib.versionOlder (lib.versions.majorMinor lib.version) "21.05")
|| !config.services.power-profiles-daemon.enable
);
} }

View file

@ -1 +0,0 @@
../ssd

View file

@ -1,3 +1,3 @@
# This file is necessary so nix-env -qa does not break, # This file is necessary so nix-env -qa does not break,
# when nixos-hardware is used as a channel # when nixos-hardware is used as a channel
{} { }

View file

@ -1,6 +1,13 @@
{ {
imports = [ imports = [
../../common/cpu/intel ../latitude/e7240/default.nix
../../common/pc/laptop ];
warnings = [
''
DEPRECATED: Importing dell/e7240 is deprecated. Use dell/latitude/e7240 instead.
This module will be removed in a future release.
''
]; ];
} }

View file

@ -6,7 +6,7 @@
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/gpu/nvidia/pascal ../../../common/gpu/nvidia/pascal
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
# Specify bus id of Nvidia and Intel graphics # Specify bus id of Nvidia and Intel graphics

View file

@ -6,7 +6,7 @@
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix
../../../common/gpu/nvidia/pascal ../../../common/gpu/nvidia/pascal
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
# Specify bus id of Nvidia and Intel graphics # Specify bus id of Nvidia and Intel graphics

View file

@ -1,22 +1,22 @@
{ lib, ... }: { lib, ... }:
{ {
imports = [ imports = [
../../../common/cpu/intel ../../../common/cpu/intel
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/ssd ../../../common/pc/ssd
]; ];
hardware = { hardware = {
enableRedistributableFirmware = lib.mkDefault true; enableRedistributableFirmware = lib.mkDefault true;
}; };
services = { services = {
fwupd = { fwupd = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
}; };
thermald = { thermald = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
}; };
}; };
} }

View file

@ -2,9 +2,8 @@
{ {
imports = [ imports = [
../../../common/cpu/intel ../../../common/cpu/intel/haswell
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/gpu/intel/haswell
]; ];
hardware.enableAllFirmware = lib.mkDefault true; hardware.enableAllFirmware = lib.mkDefault true;

View file

@ -16,7 +16,10 @@
serviceConfig.Type = "oneshot"; serviceConfig.Type = "oneshot";
description = "reload touchpad driver"; description = "reload touchpad driver";
# must run at boot (and not too early), and after suspend # must run at boot (and not too early), and after suspend
wantedBy = [ "display-manager.service" "post-resume.target" ]; wantedBy = [
"display-manager.service"
"post-resume.target"
];
# prevent running before suspend # prevent running before suspend
after = [ "post-resume.target" ]; after = [ "post-resume.target" ];
}; };
@ -24,7 +27,6 @@
# so that post-resume.service exists # so that post-resume.service exists
powerManagement.enable = true; powerManagement.enable = true;
# fix suspend # fix suspend
# https://bbs.archlinux.org/viewtopic.php?id=266108 says linux >= 5.12 required # https://bbs.archlinux.org/viewtopic.php?id=266108 says linux >= 5.12 required
boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.12") pkgs.linuxPackages_latest; boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.12") pkgs.linuxPackages_latest;

View file

@ -7,11 +7,14 @@ with lib;
../../../common/cpu/amd ../../../common/cpu/amd
../../../common/gpu/amd ../../../common/gpu/amd
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
]; ];
# TSC is unstable # TSC is unstable
boot.kernelParams = [ "notsc" "trace_clock=local" ]; boot.kernelParams = [
"notsc"
"trace_clock=local"
];
hardware.enableRedistributableFirmware = mkDefault true; hardware.enableRedistributableFirmware = mkDefault true;
} }

View file

@ -3,7 +3,7 @@
{ {
imports = [ imports = [
../../../common/pc/laptop ../../../common/pc/laptop
../../../common/pc/laptop/ssd ../../../common/pc/ssd
../../../common/gpu/intel/kaby-lake ../../../common/gpu/intel/kaby-lake
../../../common/gpu/nvidia/maxwell ../../../common/gpu/nvidia/maxwell
../../../common/gpu/nvidia/prime.nix ../../../common/gpu/nvidia/prime.nix

View file

@ -0,0 +1,58 @@
## Dell Inspiron 7559
### Tested Hardware
```shellsession
$ lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers [8086:1910] (rev 07)
00:01.0 PCI bridge [0604]: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) [8086:1901] (rev 07)
00:01.1 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8) [8086:1905] (rev 07)
00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 530 [8086:191b] (rev 06)
00:04.0 Signal processing controller [1180]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem [8086:1903] (rev 07)
00:14.0 USB controller [0c03]: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller [8086:a12f] (rev 31)
00:14.2 Signal processing controller [1180]: Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem [8086:a131] (rev 31)
00:15.0 Signal processing controller [1180]: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO I2C Controller #0 [8086:a160] (rev 31)
00:16.0 Communication controller [0780]: Intel Corporation 100 Series/C230 Series Chipset Family MEI Controller #1 [8086:a13a] (rev 31)
00:17.0 SATA controller [0106]: Intel Corporation HM170/QM170 Chipset SATA Controller [AHCI Mode] [8086:a103] (rev 31)
00:1c.0 PCI bridge [0604]: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #1 [8086:a110] (rev f1)
00:1c.4 PCI bridge [0604]: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #5 [8086:a114] (rev f1)
00:1c.5 PCI bridge [0604]: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #6 [8086:a115] (rev f1)
00:1c.6 PCI bridge [0604]: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #7 [8086:a116] (rev f1)
00:1f.0 ISA bridge [0601]: Intel Corporation HM170 Chipset LPC/eSPI Controller [8086:a14e] (rev 31)
00:1f.2 Memory controller [0580]: Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller [8086:a121] (rev 31)
00:1f.3 Audio device [0403]: Intel Corporation 100 Series/C230 Series Chipset Family HD Audio Controller [8086:a170] (rev 31)
00:1f.4 SMBus [0c05]: Intel Corporation 100 Series/C230 Series Chipset Family SMBus [8086:a123] (rev 31)
02:00.0 3D controller [0302]: NVIDIA Corporation GM107M [GeForce GTX 960M] [10de:139b] (rev a2)
04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 10)
05:00.0 Network controller [0280]: Intel Corporation Wireless 3165 [8086:3165] (rev 79)
06:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS522A PCI Express Card Reader [10ec:522a] (rev 01)
```
### Extra Configuration
#### Bluetooth
To enable bluetooth support, set `hardware.bluetooth.enable = true;`.
#### Prime Offloading
This configuration uses Nvidia Prime offloading, which allows use of the `nvidia-offload` script for running commands on the dGPU. For example, you can instruct Steam to launch a game offloaded to the GPU by setting the launch options for that game to `nvidia-offload %command%`.
#### SSD
This laptop has an optional M.2 SSD slot, which isn't accounted for here. If you are using the SSD, you could look into implementing the options in [ssd](common/pc/ssd) manually. Some sources also say you should ensure your SATA Mode is set to AHCI in your BIOS for it to be detected, however I think this is a prerequisite to installing Linux on this laptop in the first place so you probably already have that set.
#### Subwoofer
Tested with the default PipeWire configuration on Plasma, the subwoofer appears to work depending on the device Profile in sound settings ("Analog Stereo Duplex" works best for me). I have had issues with it in the past on other distros, so if it's not working on your system you could try the solution in [this thread](https://bbs.archlinux.org/viewtopic.php?id=207222).
#### Other issues
There are plenty of documented bugs and threads around issues on Dell laptops like this. Some of them stem from using the nouveau drivers, but we're using the proprietary Nvidia drivers here. Some things to look into if you're experiencing issues:
* I/O is slow: `nouveau` could be added as a kernel blocklist item: searching this repo shows other laptops with this configuration
* Power drain while sleeping: add the following as boot.kernelParams: `"mem_sleep_default=deep"`
* Issues coming back from suspend (particularly if the previous kernelParam is applied): add the following as boot.kernelParams: `"acpi_rev_override=1"` `"acpi_osi=Linux"`
* I also spotted [one person recommending](https://connorkuehl.github.io/dell-inspiron-7559-linux-guide/) setting just `"acpi_osi="`. This article is quite old though and I haven't tested the difference.
* Brightness function keys don't work: add the following as boot.kernelParams: `"acpi_backlight=vendor"` or `"acpi_backlight=native"`

View file

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

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