diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 54a9c48..9d1999e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,11 +7,15 @@ on: jobs: tests: runs-on: ubuntu-latest + strategy: + matrix: + # when updating channels, also update .mergify.yml + channel: [ nixos-unstable, nixos-24.05 ] steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@V27 with: - nix_path: nixpkgs=channel:nixos-unstable + nix_path: nixpkgs=channel:${{ matrix.channel }} - name: Show nixpkgs version run: nix-instantiate --eval -E '(import {}).lib.version' - run: ./tests/run.py diff --git a/.mergify.yml b/.mergify.yml index 45ffb1e..dc3bf77 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -1,7 +1,8 @@ queue_rules: - name: default merge_conditions: - - check-success=tests + - check-success=tests (nixos-24.05) + - check-success=tests (nixos-unstable) defaults: actions: queue: diff --git a/CODEOWNERS b/CODEOWNERS index 69fa782..4525d6b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -11,3 +11,4 @@ purism/librem/13v3 @yegortimoshenko system76/darp6 @khumba framework @emiller88 tuxedo/pulse/15/gen2 @trueNAHO +tuxedo/pulse/14/gen3 @gabyx @britter @trueNAHO diff --git a/README.md b/README.md index a05e3a9..de376d4 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,10 @@ you can easily pin to a particular revision if you desire more stability. See [CONTRIBUTING.md](./CONTRIBUTING.md). +## Get in touch + +For questions and discussions, come join us in the [nixos-anywhere matrix](https://matrix.to/#/#nixos-hardware:nixos.org) room. + ## List of Profiles See code for all available configurations. @@ -94,9 +98,12 @@ See code for all available configurations. | [Asus ROG Zephyrus G15 GA503](asus/zephyrus/ga503) | `` | | [Asus ROG Zephyrus M16 GU603H](asus/zephyrus/gu603h) | `` | | [Asus TUF FX504GD](asus/fx504gd) | `` | +| [Asus TUF FX506HM](asus/fx506hm) | `` | | [Asus TUF FA507RM](asus/fa507rm) | `` | | [Asus TUF FA507NV](asus/fa507nv) | `` | +| [Asus Zenbook Flip S13 UX371](asus/zenbook/ux371/) | `` | | [BeagleBoard PocketBeagle](beagleboard/pocketbeagle) | `` | +| [Chuwi MiniBook X](chuwi/minibook-x) | `` | | [Deciso DEC series](deciso/dec) | `` | | [Dell G3 3779](dell/g3/3779) | `` | | [Dell Inspiron 14 5420](dell/inspiron/14-5420) | `` | @@ -110,6 +117,8 @@ See code for all available configurations. | [Dell Latitude 7390](dell/latitude/7390) | `` | | [Dell Latitude 7430](dell/latitude/7430) | `` | | [Dell Latitude 7490](dell/latitude/7490) | `` | +| [Dell Latitude 9430](dell/latitude/9430) | `` | +| [Dell Optiplex 3050](dell/optiplex/3050) | `` | | [Dell Poweredge R7515](dell/poweredge/r7515) | `` | | [Dell Precision 3541](dell/precision/3541) | `` | | [Dell Precision 5530](dell/precision/5530) | `` | @@ -164,12 +173,16 @@ See code for all available configurations. | [HP Elitebook 845g8](hp/elitebook/845/g8) | `` | | [HP Elitebook 845g9](hp/elitebook/845/g9) | `` | | [HP Notebook 14-df0023](hp/notebook/14-df0023) | `` | +| [Huawei Matebook X Pro (2020)](huawei/machc-wa) | `` | | [i.MX8QuadMax Multisensory Enablement Kit](nxp/imx8qm-mek/) | `` | | [Intel NUC 8i7BEH](intel/nuc/8i7beh/) | `` | +| [Lenovo IdeaPad 3 15alc6](lenovo/ideapad/15alc6) | `` | | [Lenovo IdeaPad Gaming 3 15arh05](lenovo/ideapad/15arh05) | `` | +| [Lenovo IdeaPad 5 Pro 16ach6](lenovo/ideapad/16ach6) | `` | | [Lenovo IdeaPad Z510](lenovo/ideapad/z510) | `` | | [Lenovo IdeaPad Slim 5](lenovo/ideapad/slim-5) | `` | | [Lenovo IdeaPad S145 15api](lenovo/ideapad/s145-15api) | `` | +| [Lenovo Legion 5 15ach6h](lenovo/legion/15ach6h) | `` | | [Lenovo Legion 5 15arh05h](lenovo/legion/15arh05h) | `` | | [Lenovo Legion 7 Slim 15ach6](lenovo/legion/15ach6) | `` | | [Lenovo Legion 5 Pro 16ach6h](lenovo/legion/16ach6h) | `` | @@ -208,6 +221,7 @@ See code for all available configurations. | [Lenovo ThinkPad T14 AMD Gen 4](lenovo/thinkpad/t14/amd/gen4) | `` | | [Lenovo ThinkPad T14](lenovo/thinkpad/t14) | `` | | [Lenovo ThinkPad T14s AMD Gen 1](lenovo/thinkpad/t14s/amd/gen1) | `` | +| [Lenovo ThinkPad T14s AMD Gen 4](lenovo/thinkpad/t14s/amd/gen4) | `` | | [Lenovo ThinkPad T14s](lenovo/thinkpad/t14s) | `` | | [Lenovo ThinkPad T410](lenovo/thinkpad/t410) | `` | | [Lenovo ThinkPad T420](lenovo/thinkpad/t420) | `` | @@ -289,6 +303,7 @@ See code for all available configurations. | [Purism Librem 15v3](purism/librem/13v3) | `` | | [Purism Librem 5r4](purism/librem/5r4) | `` | | [Raspberry Pi 2](raspberry-pi/2) | `` | +| [Raspberry Pi 3](raspberry-pi/3) | `` | | [Raspberry Pi 4](raspberry-pi/4) | `` | | [Raspberry Pi 5](raspberry-pi/5) | `` | | [Samsung Series 9 NP900X3C](samsung/np900x3c) | `` | @@ -300,6 +315,7 @@ See code for all available configurations. | [Supermicro X12SCZ-TLN4F](supermicro/x12scz-tln4f) | `` | | [System76 (generic)](system76) | `` | | [System76 Darter Pro 6](system76/darp6) | `` | +| [System76 Gazelle Gaze18](system76/gaze18) | `` | | [Toshiba Chromebook 2 `swanky`](toshiba/swanky) | `` | | [Tuxedo InfinityBook v4](tuxedo/infinitybook/v4) | `` | | [TUXEDO InfinityBook Pro 14 - Gen7](tuxedo/infinitybook/pro14/gen7) | `` | diff --git a/acer/aspire/4810t/default.nix b/acer/aspire/4810t/default.nix index d40b454..c0f95dc 100644 --- a/acer/aspire/4810t/default.nix +++ b/acer/aspire/4810t/default.nix @@ -19,9 +19,6 @@ ]; }; - # TODO: reverse compat - hardware.opengl.driSupport = false; - # TODO: reverse compat services.xserver = { defaultDepth = lib.mkDefault 24; diff --git a/apple/macbook-air/4/default.nix b/apple/macbook-air/4/default.nix index 181a099..850ad8d 100644 --- a/apple/macbook-air/4/default.nix +++ b/apple/macbook-air/4/default.nix @@ -3,7 +3,7 @@ { imports = [ ../. - ../../../common/cpu/intel/sandy-bridge + ../../../common/gpu/intel/sandy-bridge ]; boot.kernelParams = [ diff --git a/apple/macbook-pro/10-1/default.nix b/apple/macbook-pro/10-1/default.nix index 3703096..2a2c624 100644 --- a/apple/macbook-pro/10-1/default.nix +++ b/apple/macbook-pro/10-1/default.nix @@ -1,11 +1,14 @@ +{ lib, ... }: + { imports = [ ../. ../../../common/pc/laptop/ssd + ../../../common/gpu/24.05-compat.nix ]; # TODO: reverse compat - hardware.opengl.driSupport32Bit = true; + hardware.graphics.enable32Bit = lib.mkDefault true; services.xserver = { # TODO: we should not enable unfree drivers diff --git a/apple/macbook-pro/14-1/README.md b/apple/macbook-pro/14-1/README.md index a8941d1..0a0e2df 100644 --- a/apple/macbook-pro/14-1/README.md +++ b/apple/macbook-pro/14-1/README.md @@ -1,17 +1,26 @@ -# MacBook Pro 14,1 +# MacBook Pro 14,1, NixOS 24.01 (2024) ## Audio - -Audio is a lost cause. Bribe an Apple or Cirrus engineer for the datasheet. ;) - -## Thunderbolt - -The thunderbolt module will oops upon system resume, and subsequently refuse to work until next reboot. - -## Suspend/Resume - -The d3cold state needs to be disabled on the NVME controller for it to wake up. + [ ] Still broken, use usb/hdmi instead, nixos pkg needed: https://github.com/davidjo/snd_hda_macbookpro ## Bluetooth -The Bluetooth UART (/dev/ttyS0) is created and then deleted by udev in early boot. -Hack around it by reloading the 8250_dw module, causing it to be re-created. + [ ] Still broken, even (hacky) workaround does not work any more with latest driver updates + +## Touchpad + [x] Working, including 'disable while typing' usable quirk + +## Thunderbolt + [x] Working + +## NVME + [x] Working, older NVME / Controller may need workaround for resume + +## Suspend/Resume + [ ] Thunderbolt, WIFI, NVME may still need reboot (sometimes). + +## Wifi + [x] Working (2,4Ghz & 5Ghz supported), WEP3 currently broken b/c old brcm fw + +## Resources +- https://github.com/Dunedan/mbp-2016-linux?tab=readme-ov-file +- https://gist.github.com/roadrunner2/1289542a748d9a104e7baec6a92f9cd7 diff --git a/apple/macbook-pro/14-1/default.nix b/apple/macbook-pro/14-1/default.nix index 6b1fd74..c2b61f9 100644 --- a/apple/macbook-pro/14-1/default.nix +++ b/apple/macbook-pro/14-1/default.nix @@ -1,51 +1,89 @@ -{ config, lib, pkgs, ... }: - { + config, + lib, + pkgs, + ... +}: { imports = [ - ../. + ../../../common/gpu/intel/kaby-lake + ../../../common/gpu/intel + ../../../common/hidpi.nix + ../../../common/pc/laptop ../../../common/pc/laptop/ssd + ../../../common/pc/laptop/acpi_call.nix ]; - ## - # Make the keyboard work in stage1 + # Make the keyboard work in stage1, enable iommu # https://www.kernelconfig.io/config_keyboard_applespi - ## - boot.initrd.kernelModules = [ "applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ]; - boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest; - - ## - # Disable d3cold on the NVME controller so the machine can actually - # wake up. - # https://github.com/Dunedan/mbp-2016-linux - ## - systemd.services.disable-nvme-d3cold = { - description = "Disables d3cold on the NVME controller"; - before = [ "suspend.target" ]; - path = [ pkgs.bash pkgs.coreutils ]; - - serviceConfig.Type = "oneshot"; - serviceConfig.ExecStart = "${./disable-nvme-d3cold.sh}"; - serviceConfig.TimeoutSec = 0; - - wantedBy = [ "multi-user.target" "suspend.target" ]; + boot = { + initrd.kernelModules = ["applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ]; + kernelParams = [ "intel_iommu=on" ]; + kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest; }; - ## + # Touchpad quirks to make "disable-while-typing" actually work + services.libinput.enable = true; + environment.etc."libinput/local-overrides.quirks".text = '' + [MacBook(Pro) SPI Touchpads] + MatchName=*Apple SPI Touchpad* + ModelAppleTouchpad=1 + AttrTouchSizeRange=200:150 + AttrPalmSizeThreshold=1100 + + [MacBook(Pro) SPI Keyboards] + MatchName=*Apple SPI Keyboard* + AttrKeyboardIntegration=internal + + [MacBookPro Touchbar] + MatchBus=usb + MatchVendor=0x05AC + MatchProduct=0x8600 + AttrKeyboardIntegration=internal + ''; + + # Wifi, CPU Microcode FW updates + networking.enableB43Firmware = lib.mkDefault true; + hardware = { + enableRedistributableFirmware = lib.mkDefault true; + cpu.intel.updateMicrocode = lib.mkDefault true; + }; + + # Bluetooth, only needed if kernel lacks support - custom kernel build + # boot.kernelPatches = [ + # { + # name = "bcrm-config"; + # patch = null; + # extraConfig = '' + # BT_HCIUART_BCM y ''; + # } + # ]; + + ## [Workaround seems not to work anymore! Any Ideas?] # For some reason /dev/ttyS0 is created, and then removed by udev. We need this # for bluetooth, and the only way to get it again is to reload 8502_dw. Luckily, # nothing else uses it. + ## + # systemd.services.btattach-bcm2e7c = lib.mkIf config.hardware.bluetooth.enable { + # before = [ "bluetooth.target" ]; + # after = [ "sys-devices-platform-serial8250-tty-ttyS1.device" ]; + # path = [ pkgs.bash pkgs.kmod pkgs.bluez ]; + # serviceConfig.Type = "simple"; + # serviceConfig.ExecStart = "${./btfix.sh}"; + # wantedBy = [ "multi-user.target" ]; + # }; + + ## [Enable only if needed!] + # Disable d3cold on older NVME controller, only if needed + # https://github.com/Dunedan/mbp-2016-linux ## - systemd.services.btattach-bcm2e7c = lib.mkIf config.hardware.bluetooth.enable { - before = [ "bluetooth.target" ]; - - # Hacky, as it's a different device, but this always comes after ttyS0 - after = [ "sys-devices-platform-serial8250-tty-ttyS1.device" ]; - path = [ pkgs.bash pkgs.kmod pkgs.bluez ]; - - serviceConfig.Type = "simple"; - serviceConfig.ExecStart = "${./btfix.sh}"; - - wantedBy = [ "multi-user.target" ]; - }; + #systemd.services.disable-nvme-d3cold = { + # description = "Disables d3cold on the NVME controller"; + # before = [ "suspend.target" ]; + # path = [ pkgs.bash pkgs.coreutils ]; + # serviceConfig.Type = "oneshot"; + # serviceConfig.ExecStart = "${./disable-nvme-d3cold.sh}"; + # serviceConfig.TimeoutSec = 0; + # wantedBy = [ "multi-user.target" "suspend.target" ]; + #}; } diff --git a/apple/macmini/4/default.nix b/apple/macmini/4/default.nix index fd3062d..fd6d9c9 100644 --- a/apple/macmini/4/default.nix +++ b/apple/macmini/4/default.nix @@ -8,21 +8,23 @@ in { imports = [ ../. + ../../../common/gpu/24.05-compat.nix ]; services.xserver.videoDrivers = mkDefault [ "nvidiaLegacy340" ]; - hardware.opengl = { - enable = mkDefault true; - driSupport = mkDefault true; - driSupport32Bit = mkDefault true; - }; + hardware = { + graphics = { + enable = mkDefault true; + enable32Bit = mkDefault true; + }; - hardware.nvidia = { - modesetting.enable = mkDefault true; - powerManagement.enable = mkDefault false; - powerManagement.finegrained = mkDefault false; - open = mkDefault false; - nvidiaSettings = mkDefault true; + nvidia = { + modesetting.enable = mkDefault true; + powerManagement.enable = mkDefault false; + powerManagement.finegrained = mkDefault false; + open = mkDefault false; + nvidiaSettings = mkDefault true; + }; }; } diff --git a/apple/t2/pkgs/linux-t2.nix b/apple/t2/pkgs/linux-t2.nix index becf96c..2691890 100644 --- a/apple/t2/pkgs/linux-t2.nix +++ b/apple/t2/pkgs/linux-t2.nix @@ -2,15 +2,20 @@ , ... } @ args: let + version = "6.9.8"; + majorVersion = with lib; (elemAt (take 1 (splitVersion version)) 0); + patchRepo = fetchFromGitHub { owner = "t2linux"; repo = "linux-t2-patches"; - rev = "8b0e51ea87f170c559c9e2f437f85367838c2fad"; - hash = "sha256-4YFaLW4WTKdFysIJHnshEaqoiKBFegnZiw4Kv88LjIA="; + rev = "47b4069221c0ee3b6db56ab1ea90ae89e2de26f3"; + hash = "sha256-1B5DbLdyKdswy2ERmWVyjojdazTDbMsS+Vz/mrTdoFY="; }; - version = "6.9"; - majorVersion = with lib; (elemAt (take 1 (splitVersion version)) 0); + kernel = fetchzip { + url = "mirror://kernel/linux/kernel/v${majorVersion}.x/linux-${version}.tar.xz"; + hash = "sha256-o67tasZu4qGQ7obw+BCgNfaLqDcT3SPqsa3kTzWjmfg="; + }; in buildLinux (args // { inherit version; @@ -20,10 +25,7 @@ buildLinux (args // { modDirVersion = with lib; "${concatStringsSep "." (take 3 (splitVersion "${version}.0"))}"; src = runCommand "patched-source" {} '' - cp -r ${fetchzip { - url = "mirror://kernel/linux/kernel/v${majorVersion}.x/linux-${version}.tar.xz"; - hash = "sha256-RIxLyvF5kw/to8MjAUq2iQ4X0bGk7FY+ovE3zd0eKxM="; - }} $out + cp -r ${kernel} $out chmod -R u+w $out cd $out while read -r patch; do @@ -35,6 +37,7 @@ buildLinux (args // { structuredExtraConfig = with lib.kernel; { APPLE_BCE = module; APPLE_GMUX = module; + APFS_FS = module; BRCMFMAC = module; BT_BCM = module; BT_HCIBCM4377 = module; @@ -44,7 +47,6 @@ buildLinux (args // { HID_APPLETB_KBD = module; HID_APPLE = module; DRM_APPLETBDRM = module; - HID_APPLE_MAGIC_BACKLIGHT = module; HID_SENSOR_ALS = module; SND_PCM = module; STAGING = yes; diff --git a/asus/fx506hm/README.md b/asus/fx506hm/README.md new file mode 100644 index 0000000..d20ee88 --- /dev/null +++ b/asus/fx506hm/README.md @@ -0,0 +1,28 @@ + +# [ASUS TUF Gaming F15 FX506HM (2021)](https://www.asus.com/laptops/for-gaming/tuf-gaming/2021-asus-tuf-gaming-f15/) + +This imports common modules for the Intel CPU and iGPU, Nvidia and PRIME render offloading, basic laptop configs, basic SSD configs and configs for ASUS batteries. + +On top of that, it sets the right PCI bus IDs for the iGPU and dGPU to make PRIME work well and enables modesetting. + +## Useful other things to consider in your configuration +### Battery charging limit +Due to the common module for ASUS batteries, you can make your battery only charge up to a certain percentage to improve its life. You can place something similar to the following in your configuration to enable it: + +```nix +hardware.asus.battery = +{ + chargeUpto = 85; # Maximum level of charge for your battery, as a percentage. + enableChargeUptoScript = true; # Whether to add charge-upto to environment.systemPackages. `charge-upto 85` temporarily sets the charge limit to 85%. +}; +``` + +### OpenRGB +You can use OpenRGB to control the RGB keyboard on this laptop. There's also plugins for it to get some extra RGB lighting modes if you wish. You can place the following in your configuration to enable it: + +```nix +boot.kernelModules = [ "i2c-dev" ]; +hardware.i2c.enable = true; +services.udev.packages = [ pkgs.openrgb ]; +services.hardware.openrgb.enable = true; +``` diff --git a/asus/fx506hm/default.nix b/asus/fx506hm/default.nix new file mode 100644 index 0000000..115882b --- /dev/null +++ b/asus/fx506hm/default.nix @@ -0,0 +1,24 @@ +{ lib, ... }: + +{ + imports = + [ + ../../common/cpu/intel + ../../common/gpu/nvidia + ../../common/gpu/nvidia/prime.nix + ../../common/pc/laptop + ../../common/pc/ssd + ../battery.nix + ]; + + hardware.nvidia = + { + modesetting.enable = lib.mkDefault true; + + prime = + { + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; +} diff --git a/asus/zenbook/ux371/README.md b/asus/zenbook/ux371/README.md new file mode 100644 index 0000000..6effc44 --- /dev/null +++ b/asus/zenbook/ux371/README.md @@ -0,0 +1,47 @@ +# Asus Zenbook Flip S13 + +This is tested on an [UX371](https://www.asus.com/laptops/for-home/zenbook/zenbook-flip-s-ux371-11th-gen-intel/). + +## Tested Hardware + +```bash +lspci -nn +0000:00:00.0 Host bridge [0600]: Intel Corporation 11th Gen Core Processor Host Bridge/DRAM Registers [8086:9a14] (rev 01) +0000:00:02.0 VGA compatible controller [0300]: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] [8086:9a49] (rev 01) +0000:00:04.0 Signal processing controller [1180]: Intel Corporation TigerLake-LP Dynamic Tuning Processor Participant [8086:9a03] (rev 01) +0000:00:07.0 PCI bridge [0604]: Intel Corporation Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #0 [8086:9a23] (rev 01) +0000:00:07.1 PCI bridge [0604]: Intel Corporation Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #1 [8086:9a25] (rev 01) +0000:00:08.0 System peripheral [0880]: Intel Corporation GNA Scoring Accelerator module [8086:9a11] (rev 01) +0000:00:0a.0 Signal processing controller [1180]: Intel Corporation Tigerlake Telemetry Aggregator Driver [8086:9a0d] (rev 01) +0000:00:0d.0 USB controller [0c03]: Intel Corporation Tiger Lake-LP Thunderbolt 4 USB Controller [8086:9a13] (rev 01) +0000:00:0d.2 USB controller [0c03]: Intel Corporation Tiger Lake-LP Thunderbolt 4 NHI #0 [8086:9a1b] (rev 01) +0000:00:0e.0 RAID bus controller [0104]: Intel Corporation Volume Management Device NVMe RAID Controller [8086:9a0b] +0000:00:12.0 Serial controller [0700]: Intel Corporation Tiger Lake-LP Integrated Sensor Hub [8086:a0fc] (rev 20) +0000:00:14.0 USB controller [0c03]: Intel Corporation Tiger Lake-LP USB 3.2 Gen 2x1 xHCI Host Controller [8086:a0ed] (rev 20) +0000:00:14.2 RAM memory [0500]: Intel Corporation Tiger Lake-LP Shared SRAM [8086:a0ef] (rev 20) +0000:00:14.3 Network controller [0280]: Intel Corporation Wi-Fi 6 AX201 [8086:a0f0] (rev 20) +0000:00:15.0 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #0 [8086:a0e8] (rev 20) +0000:00:15.1 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #1 [8086:a0e9] (rev 20) +0000:00:16.0 Communication controller [0780]: Intel Corporation Tiger Lake-LP Management Engine Interface [8086:a0e0] (rev 20) +0000:00:1d.0 System peripheral [0880]: Intel Corporation RST VMD Managed Controller [8086:09ab] +0000:00:1f.0 ISA bridge [0601]: Intel Corporation Tiger Lake-LP LPC Controller [8086:a082] (rev 20) +0000:00:1f.3 Multimedia audio controller [0401]: Intel Corporation Tiger Lake-LP Smart Sound Technology Audio Controller [8086:a0c8] (rev 20) +0000:00:1f.4 SMBus [0c05]: Intel Corporation Tiger Lake-LP SMBus Controller [8086:a0a3] (rev 20) +0000:00:1f.5 Serial bus controller [0c80]: Intel Corporation Tiger Lake-LP SPI Controller [8086:a0a4] (rev 20) +10000:e0:1d.0 PCI bridge [0604]: Intel Corporation Tiger Lake-LP PCI Express Root Port #9 [8086:a0b0] (rev 20) +10000:e1:00.0 Non-Volatile memory controller [0108]: Sandisk Corp WD Black SN750 / PC SN730 / Red SN700 NVMe SSD [15b7:5006] +``` + +## Updating Firmware + +First enable `fwupd` in your config + +```nix +services.fwupd.enable = true; +``` + +Then run + +```bash + $ fwupdmgr update +``` diff --git a/asus/zenbook/ux371/default.nix b/asus/zenbook/ux371/default.nix new file mode 100644 index 0000000..4fcfb28 --- /dev/null +++ b/asus/zenbook/ux371/default.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: +{ + imports = [ + ../../../common/gpu/intel/tiger-lake + ../../../common/pc/laptop + ../../../common/pc/laptop/ssd + ../../battery.nix + ]; + + boot.kernelParams = lib.mkIf (config.hardware.intelgpu.driver == "xe") [ + "i915.force_probe=!9a49" + "xe.force_probe=9a49" + ]; + + hardware.enableRedistributableFirmware = lib.mkDefault true; + services.thermald.enable = lib.mkDefault true; + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; +} diff --git a/asus/zephyrus/ga402x/amdgpu/default.nix b/asus/zephyrus/ga402x/amdgpu/default.nix index 17103c5..2610db8 100644 --- a/asus/zephyrus/ga402x/amdgpu/default.nix +++ b/asus/zephyrus/ga402x/amdgpu/default.nix @@ -1,11 +1,10 @@ { config, lib, - pkgs, ... }: let - inherit (lib) mkDefault mkEnableOption mkIf mkMerge; + inherit (lib) mkEnableOption mkIf mkMerge; cfg = config.hardware.asus.zephyrus.ga402x; in { @@ -20,19 +19,6 @@ in { }; config = mkMerge [ - { - # AMD RX680 - services.xserver.videoDrivers = mkDefault [ "amdgpu" ]; - - hardware = { - amdgpu.loadInInitrd = true; - opengl.extraPackages = with pkgs; [ - vaapiVdpau - libvdpau-va-gl - ]; - }; - } - (mkIf cfg.amdgpu.recovery.enable { # Hopefully fixes for where the kernel sometimes hangs when suspending or hibernating # (Though, I'm very suspicious of the Mediatek Wifi...) diff --git a/asus/zephyrus/ga402x/nvidia/default.nix b/asus/zephyrus/ga402x/nvidia/default.nix index 7a1a8c3..6f759fd 100644 --- a/asus/zephyrus/ga402x/nvidia/default.nix +++ b/asus/zephyrus/ga402x/nvidia/default.nix @@ -12,6 +12,7 @@ in { ## "prime.nix" loads this, aleady: # ../../../common/gpu/nvidia ../../../../common/gpu/nvidia/prime.nix + ]; # NVIDIA GeForce RTX 4060 Mobile @@ -25,12 +26,7 @@ in { hardware = { ## Enable the Nvidia card, as well as Prime and Offload: - amdgpu.loadInInitrd = true; - opengl.extraPackages = with pkgs; [ - # Also in nvidia/default.nix - vaapiVdpau - libvdpau-va-gl - ]; + amdgpu.initrd.enable = lib.mkDefault true; nvidia = { modesetting.enable = true; diff --git a/chuwi/minibook-x/default.nix b/chuwi/minibook-x/default.nix new file mode 100644 index 0000000..39bc9cc --- /dev/null +++ b/chuwi/minibook-x/default.nix @@ -0,0 +1,11 @@ +{ ... }: { + imports = [ + ../../common/cpu/intel + ../../common/pc/laptop + ../../common/pc/laptop/ssd + ../../common/hidpi.nix + ]; + # Fixes the display being rotated 90 degrees. + boot.kernelParams = + [ "fbcon=rotate:1" "video=DSI-1:panel_orientation=right_side_up" ]; +} diff --git a/common/cpu/amd/raphael/igpu.nix b/common/cpu/amd/raphael/igpu.nix index b094077..71b1152 100644 --- a/common/cpu/amd/raphael/igpu.nix +++ b/common/cpu/amd/raphael/igpu.nix @@ -1,9 +1,15 @@ -{ lib, pkgs, config, ... }: +{ + lib, + pkgs, + config, + ... +}: { # Sets the kernel version to the latest kernel to make the usage of the iGPU possible if your kernel version is too old # Disables scatter/gather which was introduced with kernel version 6.2 # It produces completely white or flashing screens when enabled while using the iGPU of Ryzen 7000-series CPUs (Raphael) + # This issue is not seen in kernel 6.6 or newer versions imports = [ ../. ]; @@ -12,8 +18,9 @@ kernelPackages = pkgs.linuxPackages_latest; }) - (lib.mkIf (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") { - kernelParams = ["amdgpu.sg_display=0"]; - }) + (lib.mkIf ( + (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") + && (lib.versionOlder config.boot.kernelPackages.kernel.version "6.6") + ) { kernelParams = [ "amdgpu.sg_display=0" ]; }) ]; } diff --git a/common/cpu/intel/cpu-only.nix b/common/cpu/intel/cpu-only.nix index c30f0c5..e42e90b 100644 --- a/common/cpu/intel/cpu-only.nix +++ b/common/cpu/intel/cpu-only.nix @@ -1,6 +1,4 @@ { config, lib, ... }: - { - hardware.cpu.intel.updateMicrocode = - lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/common/gpu/24.05-compat.nix b/common/gpu/24.05-compat.nix new file mode 100644 index 0000000..3e3495f --- /dev/null +++ b/common/gpu/24.05-compat.nix @@ -0,0 +1,13 @@ +{ + lib, + ... +}: +{ + # Backward-compat for 24.05, can be removed after we drop 24.05 support + imports = lib.optionals (lib.versionOlder lib.version "24.11pre") [ + (lib.mkAliasOptionModule [ "hardware" "graphics" "enable" ] [ "hardware" "opengl" "enable" ]) + (lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages" ] [ "hardware" "opengl" "extraPackages" ]) + (lib.mkAliasOptionModule [ "hardware" "graphics" "extraPackages32" ] [ "hardware" "opengl" "extraPackages32" ]) + (lib.mkAliasOptionModule [ "hardware" "graphics" "enable32Bit" ] [ "hardware" "opengl" "driSupport32Bit" ]) + ]; +} diff --git a/common/gpu/amd/default.nix b/common/gpu/amd/default.nix index 1347e82..5373004 100644 --- a/common/gpu/amd/default.nix +++ b/common/gpu/amd/default.nix @@ -1,46 +1,15 @@ -{ config, lib, pkgs, ... }: +{ lib, ... }: { - options.hardware.amdgpu.loadInInitrd = lib.mkEnableOption (lib.mdDoc - "loading `amdgpu` kernelModule at stage 1. (Add `amdgpu` to `boot.initrd.kernelModules`)" - ) // { - default = true; + imports = [ ../24.05-compat.nix ]; + config = { + services.xserver.videoDrivers = lib.mkDefault [ "modesetting" ]; + + hardware.graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; + }; + + hardware.amdgpu.initrd.enable = lib.mkDefault true; }; - options.hardware.amdgpu.amdvlk = lib.mkEnableOption (lib.mdDoc - "use amdvlk drivers instead mesa radv drivers" - ); - options.hardware.amdgpu.opencl = lib.mkEnableOption (lib.mdDoc - "rocm opencl runtime (Install rocmPackages.clr and rocmPackages.clr.icd)" - ) // { - default = true; - }; - - config = lib.mkMerge [ - { - services.xserver.videoDrivers = lib.mkDefault [ "modesetting" ]; - - hardware.opengl = { - driSupport = lib.mkDefault true; - driSupport32Bit = lib.mkDefault true; - }; - } - (lib.mkIf config.hardware.amdgpu.loadInInitrd { - boot.initrd.kernelModules = [ "amdgpu" ]; - }) - (lib.mkIf config.hardware.amdgpu.amdvlk { - hardware.opengl.extraPackages = with pkgs; [ - amdvlk - ]; - - hardware.opengl.extraPackages32 = with pkgs; [ - driversi686Linux.amdvlk - ]; - }) - (lib.mkIf config.hardware.amdgpu.opencl { - hardware.opengl.extraPackages = - if pkgs ? rocmPackages.clr - then with pkgs.rocmPackages; [ clr clr.icd ] - else with pkgs; [ rocm-opencl-icd rocm-opencl-runtime ]; - }) - ]; } diff --git a/common/gpu/intel.nix b/common/gpu/intel.nix deleted file mode 100644 index d4256f6..0000000 --- a/common/gpu/intel.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - imports = [ ./intel ]; - - warnings = [ - '' - DEPRECATED: The module has been deprecated. - - Switch to using instead. - '' - ]; -} diff --git a/common/cpu/intel/comet-lake/default.nix b/common/gpu/intel/comet-lake/default.nix similarity index 100% rename from common/cpu/intel/comet-lake/default.nix rename to common/gpu/intel/comet-lake/default.nix diff --git a/common/gpu/intel/default.nix b/common/gpu/intel/default.nix index 73591cf..be5a8c8 100644 --- a/common/gpu/intel/default.nix +++ b/common/gpu/intel/default.nix @@ -1,32 +1,63 @@ -{ config, lib, pkgs, ... }: - { - options.hardware.intelgpu.loadInInitrd = lib.mkEnableOption (lib.mdDoc - "loading `i195` kernelModule at stage 1. (Add `i915` to `boot.initrd.kernelModules`)" - ) // { - default = true; + config, + lib, + pkgs, + ... +}: +{ + imports = [ ../24.05-compat.nix ]; + options.hardware.intelgpu.driver = lib.mkOption { + description = "Intel GPU driver to use"; + type = lib.types.enum [ + "i915" + "xe" + ]; + default = "i915"; }; - config = lib.mkMerge [ - (lib.mkIf config.hardware.intelgpu.loadInInitrd { - boot.initrd.kernelModules = [ "i915" ]; - }) - { - environment.variables = { - VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkDefault "va_gl"); - }; + options.hardware.intelgpu.loadInInitrd = + lib.mkEnableOption ( + lib.mdDoc "Load the Intel GPU kernel module at stage 1 boot. (Added to `boot.initrd.kernelModules`)" + ) + // { + default = true; + }; - hardware.opengl.extraPackages = with pkgs; [ - (if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver) - libvdpau-va-gl - intel-media-driver - ]; + config = { + boot.initrd.kernelModules = [ config.hardware.intelgpu.driver ]; - hardware.opengl.extraPackages32 = with pkgs.driversi686Linux; [ - (if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver) - libvdpau-va-gl - intel-media-driver - ]; - } - ]; + environment.variables = { + VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl"); + }; + + hardware.graphics.extraPackages = with pkgs; [ + ( + if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then + vaapiIntel + else + intel-vaapi-driver + ) + intel-media-driver + ]; + + hardware.graphics.extraPackages32 = with pkgs.driversi686Linux; [ + ( + if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then + vaapiIntel + else + intel-vaapi-driver + ) + intel-media-driver + ]; + + assertions = [ + { + assertion = ( + config.hardware.intelgpu.driver != "xe" + || lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.8" + ); + message = "Intel Xe GPU driver is not supported on kernels earlier than 6.8. Update or use the i915 driver."; + } + ]; + }; } diff --git a/common/cpu/intel/elkhart-lake/default.nix b/common/gpu/intel/elkhart-lake/default.nix similarity index 100% rename from common/cpu/intel/elkhart-lake/default.nix rename to common/gpu/intel/elkhart-lake/default.nix diff --git a/common/cpu/intel/jasper-lake/default.nix b/common/gpu/intel/jasper-lake/default.nix similarity index 100% rename from common/cpu/intel/jasper-lake/default.nix rename to common/gpu/intel/jasper-lake/default.nix diff --git a/common/cpu/intel/kaby-lake/default.nix b/common/gpu/intel/kaby-lake/default.nix similarity index 100% rename from common/cpu/intel/kaby-lake/default.nix rename to common/gpu/intel/kaby-lake/default.nix diff --git a/common/cpu/intel/sandy-bridge/default.nix b/common/gpu/intel/sandy-bridge/default.nix similarity index 100% rename from common/cpu/intel/sandy-bridge/default.nix rename to common/gpu/intel/sandy-bridge/default.nix diff --git a/common/gpu/intel/tiger-lake/default.nix b/common/gpu/intel/tiger-lake/default.nix new file mode 100644 index 0000000..86afdcc --- /dev/null +++ b/common/gpu/intel/tiger-lake/default.nix @@ -0,0 +1,12 @@ +{ config, lib, ... }: +{ + imports = [ ../. ]; + config = lib.mkMerge [ + (lib.mkIf (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.8") { + hardware.intelgpu.driver = "xe"; + }) + (lib.mkIf (config.hardware.intelgpu.driver == "i915") { + boot.kernelParams = [ "i915.enable_guc=3" ]; + }) + ]; +} diff --git a/common/gpu/nvidia-disable.nix b/common/gpu/nvidia-disable.nix deleted file mode 100644 index 3f28c4e..0000000 --- a/common/gpu/nvidia-disable.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - imports = [ ./nvidia/disable.nix ]; - - warnings = [ - '' - DEPRECATED: The module has been deprecated. - - Switch to using instead. - '' - ]; -} diff --git a/common/gpu/nvidia.nix b/common/gpu/nvidia.nix deleted file mode 100644 index 9443b06..0000000 --- a/common/gpu/nvidia.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - imports = [ ./nvidia/prime.nix ]; - - warnings = [ - '' - DEPRECATED: The module has been deprecated. - - Switch to using instead if you use prime offloading. - If you are using this without prime, consider switching to instead. - '' - ]; -} diff --git a/common/gpu/nvidia/default.nix b/common/gpu/nvidia/default.nix index 47f2d34..df28c06 100644 --- a/common/gpu/nvidia/default.nix +++ b/common/gpu/nvidia/default.nix @@ -1,8 +1,8 @@ -{ lib, pkgs, ... }: +{ lib, ... }: { + imports = [ ../24.05-compat.nix ]; services.xserver.videoDrivers = lib.mkDefault [ "nvidia" ]; - hardware.opengl.extraPackages = with pkgs; [ - vaapiVdpau - ]; + # TODO: this will be a default after https://github.com/NixOS/nixpkgs/pull/326369 + hardware.nvidia.modesetting.enable = lib.mkDefault true; } diff --git a/common/hidpi.nix b/common/hidpi.nix index 1b03085..85b167c 100644 --- a/common/hidpi.nix +++ b/common/hidpi.nix @@ -1,12 +1,6 @@ { lib, pkgs, ... }: -let - # This option is removed from NixOS 23.05 and up - nixosVersion = lib.versions.majorMinor lib.version; - config = if lib.versionOlder nixosVersion "23.05" then { - hardware.video.hidpi.enable = lib.mkDefault true; - } else { - # Just set the console font, don't mess with the font settings - console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz"; - console.earlySetup = lib.mkDefault true; - }; -in config +{ + # Just set the console font, don't mess with the font settings + console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz"; + console.earlySetup = lib.mkDefault true; +} diff --git a/common/pc/hdd/default.nix b/common/pc/hdd/default.nix index 0967ef4..dbf7e66 100644 --- a/common/pc/hdd/default.nix +++ b/common/pc/hdd/default.nix @@ -1 +1,9 @@ -{} +{ + warnings = [ + '' + DEPRECATED: The module has been deprecated. + + This module has no effect and will be removed in a future release. + '' + ]; +} diff --git a/common/pc/laptop/hdd/default.nix b/common/pc/laptop/hdd/default.nix index 63f29d4..78f918d 100644 --- a/common/pc/laptop/hdd/default.nix +++ b/common/pc/laptop/hdd/default.nix @@ -1,8 +1,6 @@ { lib, ... }: { - imports = [ ../../hdd ]; - # Hard disk protection if the laptop falls: services.hdapsd.enable = lib.mkDefault true; } diff --git a/dell/inspiron/5509/default.nix b/dell/inspiron/5509/default.nix index 96355a2..b199e92 100644 --- a/dell/inspiron/5509/default.nix +++ b/dell/inspiron/5509/default.nix @@ -1,8 +1,7 @@ { lib, ... }: { imports = [ - ../../../common/cpu/intel - ../../../common/gpu/intel + ../../../common/gpu/intel/tiger-lake ../../../common/pc/laptop ../../../common/pc/ssd ]; @@ -14,8 +13,8 @@ services.thermald.enable = lib.mkDefault true; # Touchpad - services.xserver = { - libinput.touchpad.tapping = true; - libinput.touchpad.tappingDragLock = true; + services.libinput.touchpad = { + tapping = true; + tappingDragLock = true; }; } diff --git a/dell/latitude/9430/default.nix b/dell/latitude/9430/default.nix new file mode 100644 index 0000000..f652e9a --- /dev/null +++ b/dell/latitude/9430/default.nix @@ -0,0 +1,19 @@ +{ lib, ... }: + +{ + imports = [ + ../../../common/cpu/intel + ../../../common/pc/laptop + ../../../common/pc/laptop/ssd + ]; + + boot.kernelParams = [ + # See https://discourse.nixos.org/t/i915-driver-has-bug-for-iris-xe-graphics/25006/12 + # jheidbrink reports that without this setting there is a very high lag in Sway which makes it unusable + "i915.enable_psr=0" + ]; + + # Make the webcam work (needs Linux >= 6.6): + hardware.ipu6.enable = true; + hardware.ipu6.platform = "ipu6ep"; +} diff --git a/dell/optiplex/3050/default.nix b/dell/optiplex/3050/default.nix new file mode 100644 index 0000000..888030e --- /dev/null +++ b/dell/optiplex/3050/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ../../../common/cpu/intel + ../../../common/pc + ../../../common/pc/ssd + ]; +} diff --git a/dell/precision/7520/default.nix b/dell/precision/7520/default.nix index c20ea89..09f8592 100644 --- a/dell/precision/7520/default.nix +++ b/dell/precision/7520/default.nix @@ -1,12 +1,10 @@ { config, lib, - pkgs, - inputs, ... }: { imports = [ - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop ../../../common/pc/laptop/ssd ../../../common/gpu/nvidia @@ -21,25 +19,26 @@ }; boot.kernelParams = ["i915.modeset=1"]; - hardware.nvidia = { - package = config.boot.kernelPackages.nvidiaPackages.legacy_390; - nvidiaSettings = lib.mkDefault true; - modesetting.enable = lib.mkDefault true; - open = lib.mkDefault false; - prime = { - intelBusId = "PCI:0:2:0"; - nvidiaBusId = "PCI:1:0:0"; + hardware = { + graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; + }; + nvidia = { + package = config.boot.kernelPackages.nvidiaPackages.legacy_390; + nvidiaSettings = lib.mkDefault true; + modesetting.enable = lib.mkDefault true; + open = lib.mkDefault false; + prime = { + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; }; - }; - hardware.opengl = { - enable = lib.mkDefault true; - driSupport = lib.mkDefault true; - driSupport32Bit = lib.mkDefault true; }; # Override the intel gpu driver setting imported above environment.variables = { - VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkOverride 990 "nvidia"); + VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkOverride 990 "nvidia"); }; services.thermald.enable = lib.mkDefault true; diff --git a/dell/xps/13-9360/default.nix b/dell/xps/13-9360/default.nix index f1ea378..5c73b8b 100644 --- a/dell/xps/13-9360/default.nix +++ b/dell/xps/13-9360/default.nix @@ -1,6 +1,6 @@ { imports = [ - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop ]; diff --git a/dell/xps/13-9370/default.nix b/dell/xps/13-9370/default.nix index 10362b3..62dddc5 100644 --- a/dell/xps/13-9370/default.nix +++ b/dell/xps/13-9370/default.nix @@ -2,7 +2,7 @@ { imports = [ - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop ../../../common/pc/laptop/acpi_call.nix ]; diff --git a/dell/xps/15-9510/nvidia/default.nix b/dell/xps/15-9510/nvidia/default.nix index 723c574..990aea7 100644 --- a/dell/xps/15-9510/nvidia/default.nix +++ b/dell/xps/15-9510/nvidia/default.nix @@ -5,6 +5,11 @@ services.switcherooControl.enable = lib.mkDefault true; hardware = { + graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; + extraPackages = with pkgs; [ intel-media-driver intel-compute-runtime ]; + }; nvidia = { prime = { # Bus ID of the Intel GPU. @@ -20,10 +25,5 @@ finegrained = lib.mkDefault true; }; }; - opengl = { - enable = lib.mkDefault true; - driSupport32Bit = lib.mkDefault true; - extraPackages = with pkgs; [ intel-media-driver intel-compute-runtime ]; - }; }; } diff --git a/dell/xps/15-9560/default.nix b/dell/xps/15-9560/default.nix index 49e36b1..aee5665 100644 --- a/dell/xps/15-9560/default.nix +++ b/dell/xps/15-9560/default.nix @@ -1,7 +1,7 @@ { imports = [ ../../../common/cpu/intel - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop ./xps-common.nix diff --git a/dell/xps/15-9560/intel/default.nix b/dell/xps/15-9560/intel/default.nix index 22de3bc..a77cb82 100644 --- a/dell/xps/15-9560/intel/default.nix +++ b/dell/xps/15-9560/intel/default.nix @@ -1,7 +1,7 @@ { imports = [ ../../../../common/cpu/intel - ../../../../common/cpu/intel/kaby-lake + ../../../../common/gpu/intel/kaby-lake ../../../../common/pc/laptop ../../../../common/gpu/nvidia/disable.nix ../xps-common.nix diff --git a/dell/xps/15-9570/default.nix b/dell/xps/15-9570/default.nix index 200dc09..9ef1a89 100644 --- a/dell/xps/15-9570/default.nix +++ b/dell/xps/15-9570/default.nix @@ -2,7 +2,7 @@ { imports = [ ../../../common/cpu/intel - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop ./xps-common.nix ]; diff --git a/flake.nix b/flake.nix index a2459f2..6c1a300 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,9 @@ description = "nixos-hardware"; outputs = _: { - nixosModules = { + nixosModules = let + deprecated = issue: name: value: builtins.trace "warning: ${name} flake output is deprecated and will be removed. See https://github.com/NixOS/nixos-hardware/issues/${issue} for more information" value; + in { acer-aspire-4810t = import ./acer/aspire/4810t; airis-n990 = import ./airis/n990; apple-macbook-air-3 = import ./apple/macbook-air/3; @@ -18,11 +20,13 @@ asus-battery = import ./asus/battery.nix; asus-ally-rc71l = import ./asus/ally/rc71l; asus-fx504gd = import ./asus/fx504gd; + asus-fx506hm = import ./asus/fx506hm; asus-fa507nv = import ./asus/fa507nv; asus-fa507rm = import ./asus/fa507rm; asus-pro-ws-x570-ace = import ./asus/pro-ws-x570-ace; asus-rog-strix-g513im = import ./asus/rog-strix/g513im; asus-rog-strix-g733qs = import ./asus/rog-strix/g733qs; + asus-zenbook-ux371 = import ./asus/zenbook/ux371; asus-zephyrus-ga401 = import ./asus/zephyrus/ga401; asus-zephyrus-ga402 = import ./asus/zephyrus/ga402; asus-zephyrus-ga402x = import ./asus/zephyrus/ga402x; @@ -30,6 +34,7 @@ asus-zephyrus-ga503 = import ./asus/zephyrus/ga503; asus-zephyrus-gu603h = import ./asus/zephyrus/gu603h; beagleboard-pocketbeagle = import ./beagleboard/pocketbeagle; + chuwi-minibook-x = import ./chuwi/minibook-x; deciso-dec = import ./deciso/dec; dell-e7240 = import ./dell/e7240; dell-g3-3779 = import ./dell/g3/3779; @@ -44,6 +49,8 @@ dell-latitude-7390 = import ./dell/latitude/7390; dell-latitude-7430 = import ./dell/latitude/7430; dell-latitude-7490 = import ./dell/latitude/7490; + dell-latitude-9430 = import ./dell/latitude/9430; + dell-optiplex-3050 = import ./dell/optiplex/3050; dell-poweredge-r7515 = import ./dell/poweredge/r7515; dell-precision-3541 = import ./dell/precision/3541; dell-precision-5530 = import ./dell/precision/5530; @@ -85,6 +92,7 @@ friendlyarm-nanopc-t4 = import ./friendlyarm/nanopc-t4; friendlyarm-nanopi-r5s = import ./friendlyarm/nanopi-r5s; focus-m2-gen1 = import ./focus/m2/gen1; + gigabyte-b550 = import ./gigabyte/b550; google-pixelbook = import ./google/pixelbook; gpd-micropc = import ./gpd/micropc; gpd-p2-max = import ./gpd/p2-max; @@ -96,13 +104,17 @@ hp-elitebook-845g7 = import ./hp/elitebook/845/g7; hp-elitebook-845g8 = import ./hp/elitebook/845/g8; hp-elitebook-845g9 = import ./hp/elitebook/845/g9; + huawei-machc-wa = import ./huawei/machc-wa; hp-notebook-14-df0023 = import ./hp/notebook/14-df0023; intel-nuc-8i7beh = import ./intel/nuc/8i7beh; + lenovo-ideapad-15alc6 = import ./lenovo/ideapad/15alc6; lenovo-ideapad-15arh05 = import ./lenovo/ideapad/15arh05; + lenovo-ideapad-16ach6 = import ./lenovo/ideapad/16ach6; lenovo-ideapad-z510 = import ./lenovo/ideapad/z510; lenovo-ideapad-slim-5 = import ./lenovo/ideapad/slim-5; lenovo-ideapad-s145-15api = import ./lenovo/ideapad/s145-15api; lenovo-legion-15ach6 = import ./lenovo/legion/15ach6; + lenovo-legion-15ach6h = import ./lenovo/legion/15ach6h; lenovo-legion-15arh05h = import ./lenovo/legion/15arh05h; lenovo-legion-16ach6h = import ./lenovo/legion/16ach6h; lenovo-legion-16ach6h-hybrid = import ./lenovo/legion/16ach6h/hybrid; @@ -144,6 +156,7 @@ lenovo-thinkpad-t14-amd-gen4 = import ./lenovo/thinkpad/t14/amd/gen4; lenovo-thinkpad-t14s = import ./lenovo/thinkpad/t14s; lenovo-thinkpad-t14s-amd-gen1 = import ./lenovo/thinkpad/t14s/amd/gen1; + lenovo-thinkpad-t14s-amd-gen4 = import ./lenovo/thinkpad/t14s/amd/gen4; lenovo-thinkpad-t410 = import ./lenovo/thinkpad/t410; lenovo-thinkpad-t420 = import ./lenovo/thinkpad/t420; lenovo-thinkpad-t430 = import ./lenovo/thinkpad/t430; @@ -229,6 +242,7 @@ purism-librem-15v3 = import ./purism/librem/15v3; purism-librem-5r4 = import ./purism/librem/5r4; raspberry-pi-2 = import ./raspberry-pi/2; + raspberry-pi-3 = import ./raspberry-pi/3; raspberry-pi-4 = import ./raspberry-pi/4; raspberry-pi-5 = import ./raspberry-pi/5; kobol-helios4 = import ./kobol/helios4; @@ -241,6 +255,7 @@ supermicro-x10sll-f = import ./supermicro/x10sll-f; supermicro-x12scz-tln4f = import ./supermicro/x12scz-tln4f; system76 = import ./system76; + system76-gaze18 = import ./system76/gaze18; system76-darp6 = import ./system76/darp6; toshiba-swanky = import ./toshiba/swanky; tuxedo-infinitybook-v4 = import ./tuxedo/infinitybook/v4; @@ -253,10 +268,10 @@ common-cpu-amd-zenpower = import ./common/cpu/amd/zenpower.nix; common-cpu-amd-raphael-igpu = import ./common/cpu/amd/raphael/igpu.nix; common-cpu-intel = import ./common/cpu/intel; - common-cpu-intel-comet-lake = import ./common/cpu/intel/comet-lake; + common-gpu-intel-comet-lake = deprecated "992" "common-gpu-intel-comet-lake" (import ./common/gpu/intel/comet-lake); common-cpu-intel-cpu-only = import ./common/cpu/intel/cpu-only.nix; - common-cpu-intel-kaby-lake = import ./common/cpu/intel/kaby-lake; - common-cpu-intel-sandy-bridge = import ./common/cpu/intel/sandy-bridge; + common-gpu-intel-kaby-lake = deprecated "992" "common-gpu-intel-kaby-lake" (import ./common/gpu/intel/kaby-lake); + common-gpu-intel-sandy-bridge = deprecated "992" "common-gpu-intel-sandy-bridge" (import ./common/gpu/intel/sandy-bridge); common-gpu-amd = import ./common/gpu/amd; common-gpu-amd-sea-islands = import ./common/gpu/amd/sea-islands; common-gpu-amd-southern-islands = import ./common/gpu/amd/southern-islands; diff --git a/focus/m2/gen1/default.nix b/focus/m2/gen1/default.nix index 74e4df3..27ee1f3 100644 --- a/focus/m2/gen1/default.nix +++ b/focus/m2/gen1/default.nix @@ -18,10 +18,9 @@ boot.blacklistedKernelModules = [ "i2c_nvidia_gpu" ]; hardware.nvidia.modesetting.enable = lib.mkDefault true; - hardware.opengl = { + hardware.graphics = { enable = lib.mkDefault true; - driSupport = lib.mkDefault true; - driSupport32Bit = lib.mkDefault true; + enable32Bit = lib.mkDefault true; }; hardware.nvidia.prime = { diff --git a/framework/16-inch/common/default.nix b/framework/16-inch/common/default.nix index 9dc402c..547f98f 100644 --- a/framework/16-inch/common/default.nix +++ b/framework/16-inch/common/default.nix @@ -2,6 +2,7 @@ imports = [ ../../../common/pc/laptop ../../../common/pc/laptop/ssd + ../../kmod.nix ../../framework-tool.nix ]; diff --git a/framework/README.md b/framework/README.md index 2dd58aa..4adaefb 100644 --- a/framework/README.md +++ b/framework/README.md @@ -13,12 +13,38 @@ First put enable `fwupd` services.fwupd.enable = true; ``` +> [!Note] +> For Intel CPU's, even [stable BIOS versions](https://community.frame.work/t/responded-11th-gen-intel-core-bios-3-17-release/25137#update-april-11-2023-2) are currently marked as [test versions](https://fwupd.org/lvfs/devices/work.frame.Laptop.TGL.BIOS.firmware) in LVFS (the default remote fwupd uses to get firmware). +> +> If you want to use these versions, you'll have to [explicitly enable the lvfs-testing remote](https://community.frame.work/t/responded-11th-gen-intel-core-bios-3-17-release/25137#linuxlvfs-7): +> +> ```nix +> services.fwupd.extraRemotes = [ "lvfs-testing" ]; +> # Might be necessary once to make the update succeed +> services.fwupd.uefiCapsuleSettings.DisableCapsuleUpdateOnDisk = true; +> ``` + +> [!Caution] +> Before running the update, make sure you have a [NixOS live ISO](https://nixos.org/download/#nixos-iso) on a USB stick, because some firmware updates [make your system unbootable](https://community.frame.work/t/drive-not-bootable-after-bios-update/12887). + Then run ```sh $ fwupdmgr update ``` +If you cannot boot into your system after upgrading: +1. Boot into the live USB +2. Mount your system into `/mnt` +3. Run + ``` + sudo nixos-enter + ``` +4. Run + ``` + NIXOS_INSTALL_BOOTLOADER=1 /run/current-system/bin/switch-to-configuration boot + ``` + ## Common Modules For the Framework 13 laptops, there are common configuration modules available under the `13-inch/common/` directory, diff --git a/gigabyte/b550/b550-fix-suspend.nix b/gigabyte/b550/b550-fix-suspend.nix index 0e922a8..4986809 100644 --- a/gigabyte/b550/b550-fix-suspend.nix +++ b/gigabyte/b550/b550-fix-suspend.nix @@ -26,7 +26,7 @@ }; serviceConfig = { User = "root"; - ExecStart = "-${pkgs.bash}/bin/bash -c 'if grep 'GPP8' /proc/acpi/wakeup | grep -q 'enabled'; then echo 'GPP8' > /proc/acpi/wakeup; fi''"; + ExecStart = "-${pkgs.bash}/bin/bash -c 'if grep 'GPP8' /proc/acpi/wakeup | grep -q 'enabled'; then echo 'GPP8' > /proc/acpi/wakeup; fi'"; RemainAfterExit = "yes"; }; wantedBy = ["multi-user.target"]; diff --git a/google/pixelbook/default.nix b/google/pixelbook/default.nix index 1ea4c7a..0de52ed 100644 --- a/google/pixelbook/default.nix +++ b/google/pixelbook/default.nix @@ -4,6 +4,6 @@ imports = [ ../../common/pc/laptop ../../common/pc/laptop/ssd - ../../common/cpu/intel/kaby-lake + ../../common/gpu/intel/kaby-lake ]; } diff --git a/gpd/p2-max/default.nix b/gpd/p2-max/default.nix index f311864..2c02e17 100644 --- a/gpd/p2-max/default.nix +++ b/gpd/p2-max/default.nix @@ -3,7 +3,7 @@ ../../common/pc/laptop ../../common/pc/laptop/ssd ../../common/cpu/intel - ../../common/cpu/intel/kaby-lake + ../../common/gpu/intel/kaby-lake ../../common/hidpi.nix ]; } diff --git a/gpd/pocket-3/default.nix b/gpd/pocket-3/default.nix index 52d0913..1ed95eb 100644 --- a/gpd/pocket-3/default.nix +++ b/gpd/pocket-3/default.nix @@ -6,6 +6,7 @@ in ../../common/pc/laptop ../../common/pc/laptop/ssd ../../common/hidpi.nix + ../../common/gpu/24.05-compat.nix ]; # Necessary kernel modules @@ -14,7 +15,7 @@ in # GPU is an Intel Iris Xe, on a “TigerLake” mobile CPU boot.initrd.kernelModules = [ "i915" ]; # Early loading so the passphrase prompt appears on external displays services.xserver.videoDrivers = [ "intel" ]; - hardware.opengl.extraPackages = with pkgs; [ + hardware.graphics.extraPackages = with pkgs; [ intel-media-driver (if (lib.versionOlder (lib.versions.majorMinor lib.version) "23.11") then vaapiIntel else intel-vaapi-driver) ]; diff --git a/hardkernel/odroid-h3/default.nix b/hardkernel/odroid-h3/default.nix index e52d3a0..52d5819 100644 --- a/hardkernel/odroid-h3/default.nix +++ b/hardkernel/odroid-h3/default.nix @@ -1,5 +1,5 @@ { imports = [ - ../../common/cpu/intel/jasper-lake + ../../common/gpu/intel/jasper-lake ]; } diff --git a/hp/elitebook/2560p/default.nix b/hp/elitebook/2560p/default.nix index 38e5d60..ddcc6c3 100644 --- a/hp/elitebook/2560p/default.nix +++ b/hp/elitebook/2560p/default.nix @@ -3,11 +3,10 @@ with lib; { imports = [ ../../../common/cpu/intel - ../../../common/cpu/intel/sandy-bridge + ../../../common/gpu/intel/sandy-bridge ../../../common/pc ../../../common/pc/laptop ../../../common/pc/laptop/hdd - ../../../common/pc/hdd ./network.nix ]; diff --git a/hp/notebook/14-df0023/default.nix b/hp/notebook/14-df0023/default.nix index 2edb7cd..b3cbfae 100644 --- a/hp/notebook/14-df0023/default.nix +++ b/hp/notebook/14-df0023/default.nix @@ -3,11 +3,10 @@ with lib; { imports = [ ../../../common/cpu/intel - ../../../common/cpu/intel/sandy-bridge + ../../../common/gpu/intel/sandy-bridge ../../../common/pc ../../../common/pc/laptop ../../../common/pc/laptop/hdd - ../../../common/pc/hdd ]; config = { diff --git a/huawei/machc-wa/README.md b/huawei/machc-wa/README.md new file mode 100644 index 0000000..27a1ccf --- /dev/null +++ b/huawei/machc-wa/README.md @@ -0,0 +1,3 @@ +# Huawei Matebook X Pro (2020) + +This is a very standard device that needs little configuration. The module mainly imports the common modules for its CPU, GPU, SSD etc. and enables ppd for power management. Nvidia prime offload is also enabled. This configuration should work with all Matebook X Pro models from 2020 (MACHC-WA*) other than MACHC-WAH9L as it does not contain the Nvidia GPU. \ No newline at end of file diff --git a/huawei/machc-wa/default.nix b/huawei/machc-wa/default.nix new file mode 100644 index 0000000..d92a6a1 --- /dev/null +++ b/huawei/machc-wa/default.nix @@ -0,0 +1,28 @@ +{ + lib, + pkgs, + config, + ... +}: { + imports = [ + ../../common/cpu/intel + ../../common/gpu/intel/comet-lake + ../../common/gpu/nvidia + ../../common/gpu/nvidia/prime.nix + ../../common/hidpi.nix + ../../common/pc/laptop + ../../common/pc/ssd + ]; + + hardware.nvidia = { + modesetting.enable = lib.mkDefault true; + open = lib.mkDefault false; + nvidiaSettings = lib.mkDefault true; + prime = { + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; + + services.power-profiles-daemon.enable = lib.mkDefault true; +} diff --git a/lenovo/ideapad/15alc6/default.nix b/lenovo/ideapad/15alc6/default.nix new file mode 100644 index 0000000..a830c0b --- /dev/null +++ b/lenovo/ideapad/15alc6/default.nix @@ -0,0 +1,11 @@ +{ lib, ... }: + +{ + imports = [ + ../../../common/cpu/amd + ../../../common/gpu/amd + ../../../common/pc/laptop + ../../../common/pc/laptop/acpi_call.nix + ../../../common/pc/laptop/ssd + ]; +} diff --git a/lenovo/ideapad/16ach6/README.md b/lenovo/ideapad/16ach6/README.md new file mode 100644 index 0000000..d3447eb --- /dev/null +++ b/lenovo/ideapad/16ach6/README.md @@ -0,0 +1,41 @@ +# Lenovo IdeaPad 5 Pro 16ACH6 + +This laptop comes with an AMD CPU+GPU and dedicated NVIDIA graphics. Unlike the similarly named [Legion 5 Pro 16ACH6*H*](../../legion/16ach6h/), there is no direct dedicated graphics setting. + +The `nvidia.hardware.powerManagement.enable` option is not enabled in this configuration, since it seemed to cause issues when waking up from suspend, while also not providing much in terms of power saving. I've tested with `finegrained` both enabled and disabled, and it caused the screen to go dark a few moments after waking up from suspend. Most times this only happened once and the screen came back after a few moments, but on some occasions it kept occurring repeatedly. + +This device also has a "battery conservation mode", which charges the battery to only ~60%. This mode can be enabled using [TLP](https://linrunner.de/tlp/settings/bc-vendors.html#lenovo-non-thinkpad-series): + +```nix +services.power-profiles-daemon.enable = false; +services.tlp.enable = true; +services.tlp.settings = { + # Enable battery conservation mode + # Run `sudo tlp fullcharge` to enable a full charge until next reboot, + # and `sudo tlp setcharge` to reset to conservation mode. + START_CHARGE_THRESH_BAT0 = 0; + STOP_CHARGE_THRESH_BAT0 = 1; +}; +``` + +## Device information + +Details from `tlp-stat`: + +``` +System = LENOVO IdeaPad 5 Pro 16ACH6 82L5 +BIOS = GSCN35WW +EC Firmware = 1.35 +OS Release = NixOS 23.11 (Tapir) +Kernel = 6.6.10 #1-NixOS SMP PREEMPT_DYNAMIC Fri Jan 5 14:19:45 UTC 2024 x86_64 +Init system = systemd +Boot mode = UEFI +Suspend mode = [s2idle] +``` + +`lspci` output: + +``` +01:00.0 3D controller: NVIDIA Corporation GA107M [GeForce RTX 3050 Mobile] (rev a1) +05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c4) +``` diff --git a/lenovo/ideapad/16ach6/default.nix b/lenovo/ideapad/16ach6/default.nix new file mode 100644 index 0000000..3f9beb1 --- /dev/null +++ b/lenovo/ideapad/16ach6/default.nix @@ -0,0 +1,20 @@ +{ lib, ... }: + +{ + imports = [ + ../../../common/cpu/amd + ../../../common/cpu/amd/pstate.nix + ../../../common/gpu/amd + ../../../common/gpu/nvidia/prime.nix + ../../../common/pc/laptop + ../../../common/pc/laptop/ssd + ]; + + hardware.nvidia = { + modesetting.enable = true; + prime = { + amdgpuBusId = "PCI:5:0:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; +} diff --git a/lenovo/legion/15ach6h/hybrid/default.nix b/lenovo/legion/15ach6h/hybrid/default.nix index b9070fb..2f12f7e 100644 --- a/lenovo/legion/15ach6h/hybrid/default.nix +++ b/lenovo/legion/15ach6h/hybrid/default.nix @@ -20,7 +20,7 @@ services.xserver.videoDrivers = [ "nvidia" ]; hardware = { - amdgpu.loadInInitrd = lib.mkDefault false; + amdgpu.initrd.enable = false; nvidia = { modesetting.enable = lib.mkDefault true; diff --git a/lenovo/legion/15ach6h/nvidia/default.nix b/lenovo/legion/15ach6h/nvidia/default.nix index 31de5c1..33f3265 100644 --- a/lenovo/legion/15ach6h/nvidia/default.nix +++ b/lenovo/legion/15ach6h/nvidia/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ lib, options, ... }: { imports = [ ../hybrid ]; @@ -9,18 +9,11 @@ # because when writing the specialization of Dual-Direct GFX, I did not completely # remove all packages for amd igpu. I only removed amdgpu from # services.xserver.videoDrivers by overriding. This is because the specialization - # of nix cannot implement such an operation as canceling an import. In the end, if - # it is enabled in Dual-Direct GFX In the absence of amd igpu, the amdvlk package - # caused the proton to crash. In order to solve this problem, I add the option of - # whether to enable amdvlk to the configuration file of amd gpu, and open it by - # default, and turn it off in specialization, so as to delete amdvlk package and - # other packages for amd igpu in specialization. At the same time, I also added an - # option to amdgpu's opencl runtime. + # of nix cannot implement such an operation as canceling an import. hardware = { nvidia.prime.offload.enable = false; - amdgpu = { - amdvlk = false; - opencl = false; - }; + } // lib.optionalAttrs (options ? amdgpu.opencl.enable) { + # introduced in https://github.com/NixOS/nixpkgs/pull/319865 + amdgpu.opencl.enable = lib.mkDefault false; }; -} \ No newline at end of file +} diff --git a/lenovo/legion/16ach6h/hybrid/default.nix b/lenovo/legion/16ach6h/hybrid/default.nix index 51e10dc..f07b837 100644 --- a/lenovo/legion/16ach6h/hybrid/default.nix +++ b/lenovo/legion/16ach6h/hybrid/default.nix @@ -4,6 +4,7 @@ imports = [ ../../../../common/cpu/amd ../../../../common/cpu/amd/pstate.nix + ../../../../common/cpu/amd/zenpower.nix ../../../../common/gpu/amd ../../../../common/gpu/nvidia/prime.nix ../../../../common/pc/laptop @@ -21,7 +22,7 @@ services.xserver.videoDrivers = [ "nvidia" ]; hardware = { - amdgpu.loadInInitrd = lib.mkDefault false; + amdgpu.initrd.enable = false; nvidia = { modesetting.enable = lib.mkDefault true; diff --git a/lenovo/legion/16ach6h/nvidia/default.nix b/lenovo/legion/16ach6h/nvidia/default.nix index 31de5c1..33f3265 100644 --- a/lenovo/legion/16ach6h/nvidia/default.nix +++ b/lenovo/legion/16ach6h/nvidia/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ lib, options, ... }: { imports = [ ../hybrid ]; @@ -9,18 +9,11 @@ # because when writing the specialization of Dual-Direct GFX, I did not completely # remove all packages for amd igpu. I only removed amdgpu from # services.xserver.videoDrivers by overriding. This is because the specialization - # of nix cannot implement such an operation as canceling an import. In the end, if - # it is enabled in Dual-Direct GFX In the absence of amd igpu, the amdvlk package - # caused the proton to crash. In order to solve this problem, I add the option of - # whether to enable amdvlk to the configuration file of amd gpu, and open it by - # default, and turn it off in specialization, so as to delete amdvlk package and - # other packages for amd igpu in specialization. At the same time, I also added an - # option to amdgpu's opencl runtime. + # of nix cannot implement such an operation as canceling an import. hardware = { nvidia.prime.offload.enable = false; - amdgpu = { - amdvlk = false; - opencl = false; - }; + } // lib.optionalAttrs (options ? amdgpu.opencl.enable) { + # introduced in https://github.com/NixOS/nixpkgs/pull/319865 + amdgpu.opencl.enable = lib.mkDefault false; }; -} \ No newline at end of file +} diff --git a/lenovo/legion/16achg6/nvidia/default.nix b/lenovo/legion/16achg6/nvidia/default.nix index af0f2d6..5c933fa 100644 --- a/lenovo/legion/16achg6/nvidia/default.nix +++ b/lenovo/legion/16achg6/nvidia/default.nix @@ -1,13 +1,12 @@ -{ ... }: +{ lib, options, ... }: { imports = [ ../hybrid ]; services.xserver.videoDrivers = [ "nvidia" ]; hardware = { nvidia.prime.offload.enable = false; - amdgpu = { - amdvlk = false; - opencl = false; - }; + } // lib.optionalAttrs (options ? amdgpu.opencl.enable) { + # introduced in https://github.com/NixOS/nixpkgs/pull/319865 + amdgpu.opencl.enable = lib.mkDefault false; }; -} \ No newline at end of file +} diff --git a/lenovo/thinkpad/e470/default.nix b/lenovo/thinkpad/e470/default.nix index 3200732..55aa595 100644 --- a/lenovo/thinkpad/e470/default.nix +++ b/lenovo/thinkpad/e470/default.nix @@ -3,7 +3,7 @@ { imports = [ ../. - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/gpu/nvidia/prime.nix ]; diff --git a/lenovo/thinkpad/l480/default.nix b/lenovo/thinkpad/l480/default.nix index d000320..2211c06 100644 --- a/lenovo/thinkpad/l480/default.nix +++ b/lenovo/thinkpad/l480/default.nix @@ -2,7 +2,7 @@ { imports = [ ../. - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop/ssd ]; diff --git a/lenovo/thinkpad/p1/3th-gen/nvidia.nix b/lenovo/thinkpad/p1/3th-gen/nvidia.nix index 0808107..ae19167 100644 --- a/lenovo/thinkpad/p1/3th-gen/nvidia.nix +++ b/lenovo/thinkpad/p1/3th-gen/nvidia.nix @@ -1,13 +1,21 @@ { lib, ... }: { - hardware.nvidia.modesetting.enable = true; - hardware.opengl.driSupport32Bit = true; - hardware.opengl.enable = true; - - hardware.nvidia.prime = { - # Bus ID of the Intel GPU. - intelBusId = lib.mkDefault "PCI:0:2:0"; - # Bus ID of the NVIDIA GPU. - nvidiaBusId = lib.mkDefault "PCI:1:0:0"; + imports = [ + ../../../../common/gpu/24.05-compat.nix + ]; + hardware = { + graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; + }; + nvidia = { + modesetting.enable = lib.mkDefault true; + prime = { + # Bus ID of the Intel GPU. + intelBusId = lib.mkDefault "PCI:0:2:0"; + # Bus ID of the NVIDIA GPU. + nvidiaBusId = lib.mkDefault "PCI:1:0:0"; + }; + }; }; } diff --git a/lenovo/thinkpad/p50/default.nix b/lenovo/thinkpad/p50/default.nix index 3e77eb5..ef2cbd5 100644 --- a/lenovo/thinkpad/p50/default.nix +++ b/lenovo/thinkpad/p50/default.nix @@ -13,12 +13,6 @@ nvidiaBusId = lib.mkDefault "PCI:1:0:0"; }; }; - - # is this too much? It's convenient for Steam. - opengl = { - driSupport = lib.mkDefault true; - driSupport32Bit = lib.mkDefault true; - }; }; # required to make wireless work diff --git a/lenovo/thinkpad/p51/default.nix b/lenovo/thinkpad/p51/default.nix index 4c9be3c..6bd162d 100644 --- a/lenovo/thinkpad/p51/default.nix +++ b/lenovo/thinkpad/p51/default.nix @@ -1,25 +1,25 @@ { config, lib, ... }: { imports = [ + ../../../common/gpu/24.05-compat.nix ../../../common/gpu/nvidia/prime.nix ../../../common/cpu/intel - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ../../../common/pc/laptop/acpi_call.nix ../. ]; hardware = { + graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; + }; + nvidia = { prime = { intelBusId = lib.mkDefault "PCI:0:2:0"; nvidiaBusId = lib.mkDefault "PCI:1:0:0"; }; }; - - # is this too much? It's convenient for Steam. - opengl = { - driSupport = lib.mkDefault true; - driSupport32Bit = lib.mkDefault true; - }; }; # required to make wireless work diff --git a/lenovo/thinkpad/p52/default.nix b/lenovo/thinkpad/p52/default.nix index 31c9294..2f6676a 100644 --- a/lenovo/thinkpad/p52/default.nix +++ b/lenovo/thinkpad/p52/default.nix @@ -1,5 +1,6 @@ { lib, config, ... }: { imports = [ + ../../../common/gpu/24.05-compat.nix ../../../common/gpu/nvidia/prime.nix ../../../common/cpu/intel ../../../common/pc/laptop/acpi_call.nix @@ -7,18 +8,18 @@ ]; hardware = { + # is this too much? It's convenient for Steam. + graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; + }; + nvidia = { prime = { intelBusId = lib.mkDefault "PCI:0:2:0"; nvidiaBusId = lib.mkDefault "PCI:1:0:0"; }; }; - - # is this too much? It's convenient for Steam. - opengl = { - driSupport = lib.mkDefault true; - driSupport32Bit = lib.mkDefault true; - }; }; # required to make wireless work diff --git a/lenovo/thinkpad/t14s/amd/gen4/default.nix b/lenovo/thinkpad/t14s/amd/gen4/default.nix new file mode 100644 index 0000000..d13eb4f --- /dev/null +++ b/lenovo/thinkpad/t14s/amd/gen4/default.nix @@ -0,0 +1,9 @@ +{ lib, pkgs, ... }: +{ + imports = [ + ../. + ]; + + # Fix laptop not properly powering off during shutdown. + boot.kernelParams = [ "apm=power_off" ]; +} diff --git a/lenovo/thinkpad/t420/default.nix b/lenovo/thinkpad/t420/default.nix index a3c7db4..09f5d3f 100644 --- a/lenovo/thinkpad/t420/default.nix +++ b/lenovo/thinkpad/t420/default.nix @@ -2,7 +2,7 @@ imports = [ ../. ../tp-smapi.nix - ../../../common/cpu/intel/sandy-bridge + ../../../common/gpu/intel/sandy-bridge ../../../common/pc/laptop/acpi_call.nix ]; } diff --git a/lenovo/thinkpad/t520/default.nix b/lenovo/thinkpad/t520/default.nix index a3c7db4..09f5d3f 100644 --- a/lenovo/thinkpad/t520/default.nix +++ b/lenovo/thinkpad/t520/default.nix @@ -2,7 +2,7 @@ imports = [ ../. ../tp-smapi.nix - ../../../common/cpu/intel/sandy-bridge + ../../../common/gpu/intel/sandy-bridge ../../../common/pc/laptop/acpi_call.nix ]; } diff --git a/lenovo/thinkpad/w520/default.nix b/lenovo/thinkpad/w520/default.nix index a3c7db4..09f5d3f 100644 --- a/lenovo/thinkpad/w520/default.nix +++ b/lenovo/thinkpad/w520/default.nix @@ -2,7 +2,7 @@ imports = [ ../. ../tp-smapi.nix - ../../../common/cpu/intel/sandy-bridge + ../../../common/gpu/intel/sandy-bridge ../../../common/pc/laptop/acpi_call.nix ]; } diff --git a/lenovo/thinkpad/x220/default.nix b/lenovo/thinkpad/x220/default.nix index ec8b45c..c63333b 100644 --- a/lenovo/thinkpad/x220/default.nix +++ b/lenovo/thinkpad/x220/default.nix @@ -1,7 +1,7 @@ { imports = [ ../. - ../../../common/cpu/intel/sandy-bridge + ../../../common/gpu/intel/sandy-bridge ../../../common/pc/laptop/hdd # TODO: reverse compat ../tp-smapi.nix ]; diff --git a/lenovo/yoga/6/13ALC6/default.nix b/lenovo/yoga/6/13ALC6/default.nix index bd2e80c..0acf508 100644 --- a/lenovo/yoga/6/13ALC6/default.nix +++ b/lenovo/yoga/6/13ALC6/default.nix @@ -7,14 +7,12 @@ ]; boot.initrd.kernelModules = [ "ideapad_laptop" ]; - hardware.opengl.extraPackages = with pkgs; [ - vaapiVdpau - libvdpau-va-gl - ]; # latest kernel needed to make wifi work boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.16") pkgs.linuxPackages_latest; # energy savings boot.kernelParams = ["mem_sleep_default=deep" "pcie_aspm.policy=powersupersave"]; + + hardware.bluetooth.enable = true; } diff --git a/lenovo/yoga/7/14ARH7/amdgpu/default.nix b/lenovo/yoga/7/14ARH7/amdgpu/default.nix index 4d16de0..a23307a 100644 --- a/lenovo/yoga/7/14ARH7/amdgpu/default.nix +++ b/lenovo/yoga/7/14ARH7/amdgpu/default.nix @@ -1,23 +1,4 @@ -# Including this file will enable the AMD-GPU driver - -{ lib, pkgs, ... }: - -let - inherit (lib) mkDefault; - -in { - imports = [ - ../shared.nix - ]; - - # AMD RX680 - services.xserver.videoDrivers = mkDefault [ "amdgpu" ]; - - hardware = { - amdgpu.loadInInitrd = true; - opengl.extraPackages = with pkgs; [ - vaapiVdpau - libvdpau-va-gl - ]; - }; +# Including this file will enable the AMD-GPU driver (in shared.nix) +{ + imports = [ ../shared.nix ]; } diff --git a/lenovo/yoga/7/14ARH7/nvidia/default.nix b/lenovo/yoga/7/14ARH7/nvidia/default.nix index fb4553e..0ca5afd 100644 --- a/lenovo/yoga/7/14ARH7/nvidia/default.nix +++ b/lenovo/yoga/7/14ARH7/nvidia/default.nix @@ -18,11 +18,7 @@ in { hardware = { ## Enable the Nvidia card, as well as Prime and Offload: - amdgpu.loadInInitrd = true; - opengl.extraPackages = with pkgs; [ - vaapiVdpau - libvdpau-va-gl - ]; + amdgpu.initrd.enable = true; nvidia = { modesetting.enable = true; diff --git a/microsoft/surface/common/default.nix b/microsoft/surface/common/default.nix index 7499a19..057142c 100644 --- a/microsoft/surface/common/default.nix +++ b/microsoft/surface/common/default.nix @@ -6,8 +6,6 @@ let in { imports = [ ./kernel - ./ipts - ./surface-control ]; microsoft-surface.kernelVersion = mkDefault "6.6"; diff --git a/microsoft/surface/common/ipts/default.nix b/microsoft/surface/common/ipts/default.nix deleted file mode 100644 index 8e1f475..0000000 --- a/microsoft/surface/common/ipts/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - inherit (lib) mkDefault mkEnableOption mkIf mkMerge mkOption types; - - cfg = config.microsoft-surface.ipts; - - iptsConfFile = pkgs.writeTextFile { - name = "iptsd.conf"; - text = lib.generators.toINI { } cfg.config; - }; - -in -{ - options.microsoft-surface.ipts = { - enable = mkEnableOption "Enable IPTSd for Microsoft Surface"; - - config = mkOption { - type = types.attrs; - default = { }; - description = '' - Values to wrote to iptsd.conf, first key is section, second key is property. - See the example config; https://github.com/linux-surface/iptsd/blob/v1.4.0/etc/iptsd.conf - ''; - example = '' - DFT = { - ButtonMinMag = 1000; - }; - ''; - }; - }; - - config = mkMerge [ - { - microsoft-surface.ipts.enable = mkDefault false; - } - - (mkIf cfg.enable { - systemd.services.iptsd = { - description = "IPTSD"; - path = with pkgs; [ iptsd ]; - script = "iptsd $(iptsd-find-hidraw)"; - wantedBy = [ "multi-user.target" ]; - }; - environment.etc."iptsd/iptsd.conf".source = "${iptsConfFile}"; - }) - ]; -} diff --git a/microsoft/surface/common/kernel/default.nix b/microsoft/surface/common/kernel/default.nix index 0c0159a..a8f598d 100644 --- a/microsoft/surface/common/kernel/default.nix +++ b/microsoft/surface/common/kernel/default.nix @@ -5,7 +5,7 @@ let in { imports = [ - ./linux-6.8.x + ./linux-6.9.x ]; options.microsoft-surface.kernelVersion = mkOption { diff --git a/microsoft/surface/common/kernel/linux-6.8.x/default.nix b/microsoft/surface/common/kernel/linux-6.9.x/default.nix similarity index 87% rename from microsoft/surface/common/kernel/linux-6.8.x/default.nix rename to microsoft/surface/common/kernel/linux-6.9.x/default.nix index e016d77..c0fd5c9 100644 --- a/microsoft/surface/common/kernel/linux-6.8.x/default.nix +++ b/microsoft/surface/common/kernel/linux-6.9.x/default.nix @@ -7,14 +7,14 @@ let cfg = config.microsoft-surface; - version = "6.8.9"; + version = "6.9.3"; kernelPatches = surfacePatches { inherit version; patchFn = ./patches.nix; }; kernelPackages = linuxPackage { inherit version kernelPatches; - sha256 = "sha256-+QXxI46nqOhTFLrPKDMC6AlwBgENJfzqcm0N4OpbybY="; + sha256 = "1bnzxparybwh320019pr2msaapas41dhjmvg4gy791rn05jc88f3"; ignoreConfigErrors=true; }; diff --git a/microsoft/surface/common/kernel/linux-6.8.x/patches.nix b/microsoft/surface/common/kernel/linux-6.9.x/patches.nix similarity index 61% rename from microsoft/surface/common/kernel/linux-6.8.x/patches.nix rename to microsoft/surface/common/kernel/linux-6.9.x/patches.nix index 353764b..9590b9e 100644 --- a/microsoft/surface/common/kernel/linux-6.8.x/patches.nix +++ b/microsoft/surface/common/kernel/linux-6.9.x/patches.nix @@ -86,59 +86,63 @@ }; } { - name = "ms-surface/0001-surface3-oemb"; - patch = patchSrc + "/0001-surface3-oemb.patch"; + name = "ms-surface/0001-secureboot"; + patch = patchSrc + "/0001-secureboot.patch"; } { - name = "ms-surface/0002-mwifiex"; - patch = patchSrc + "/0002-mwifiex.patch"; + name = "ms-surface/0002-surface3-oemb"; + patch = patchSrc + "/0002-surface3-oemb.patch"; } { - name = "ms-surface/0003-ath10k"; - patch = patchSrc + "/0003-ath10k.patch"; + name = "ms-surface/0003-mwifiex"; + patch = patchSrc + "/0003-mwifiex.patch"; } { - name = "ms-surface/0004-ipts"; - patch = patchSrc + "/0004-ipts.patch"; + name = "ms-surface/0004-ath10k"; + patch = patchSrc + "/0004-ath10k.patch"; } { - name = "ms-surface/0005-ithc"; - patch = patchSrc + "/0005-ithc.patch"; + name = "ms-surface/0005-ipts"; + patch = patchSrc + "/0005-ipts.patch"; } { - name = "ms-surface/0006-surface-sam"; - patch = patchSrc + "/0006-surface-sam.patch"; + name = "ms-surface/0006-ithc"; + patch = patchSrc + "/0006-ithc.patch"; } { - name = "ms-surface/0007-surface-sam-over-hid"; - patch = patchSrc + "/0007-surface-sam-over-hid.patch"; + name = "ms-surface/0007-surface-sam"; + patch = patchSrc + "/0007-surface-sam.patch"; } { - name = "ms-surface/0008-surface-button"; - patch = patchSrc + "/0008-surface-button.patch"; + name = "ms-surface/0008-surface-sam-over-hid"; + patch = patchSrc + "/0008-surface-sam-over-hid.patch"; } { - name = "ms-surface/0009-surface-typecover"; - patch = patchSrc + "/0009-surface-typecover.patch"; + name = "ms-surface/0009-surface-button"; + patch = patchSrc + "/0009-surface-button.patch"; } { - name = "ms-surface/0010-surface-shutdown"; - patch = patchSrc + "/0010-surface-shutdown.patch"; + name = "ms-surface/0010-surface-typecover"; + patch = patchSrc + "/0010-surface-typecover.patch"; } { - name = "ms-surface/0011-surface-gpe"; - patch = patchSrc + "/0011-surface-gpe.patch"; + name = "ms-surface/0011-surface-shutdown"; + patch = patchSrc + "/0011-surface-shutdown.patch"; } { - name = "ms-surface/0012-cameras"; - patch = patchSrc + "/0012-cameras.patch"; + name = "ms-surface/0012-surface-gpe"; + patch = patchSrc + "/0012-surface-gpe.patch"; } { - name = "ms-surface/0013-amd-gpio"; - patch = patchSrc + "/0013-amd-gpio.patch"; + name = "ms-surface/0013-cameras"; + patch = patchSrc + "/0013-cameras.patch"; } { - name = "ms-surface/0014-rtc"; - patch = patchSrc + "/0014-rtc.patch"; + name = "ms-surface/0014-amd-gpio"; + patch = patchSrc + "/0014-amd-gpio.patch"; + } + { + name = "ms-surface/0015-rtc"; + patch = patchSrc + "/0015-rtc.patch"; } ] diff --git a/microsoft/surface/common/repos.nix b/microsoft/surface/common/repos.nix index 321e729..313f133 100644 --- a/microsoft/surface/common/repos.nix +++ b/microsoft/surface/common/repos.nix @@ -4,8 +4,8 @@ linux-surface = fetchFromGitHub { owner = "linux-surface"; repo = "linux-surface"; - rev = "arch-6.8.6-1"; - hash = "sha256-kLnHcYFeQ7/8lbSL4p9D2aC4V/Ib1tU225UOkRcNnH4="; + rev = "arch-6.9.3-1"; + hash = "sha256-HoG7MuWAtiTAX9CJeqCGrfkfoue7XLtSMF6zjx4z7i8="; }; # This is the owner and repo for the pre-patched kernel from the "linux-surface" project: diff --git a/microsoft/surface/common/surface-control/default.nix b/microsoft/surface/common/surface-control/default.nix deleted file mode 100644 index 4927c24..0000000 --- a/microsoft/surface/common/surface-control/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, pkgs, ... }: - - -let - inherit (lib) mkDefault mkEnableOption mkIf mkMerge; - - cfg = config.microsoft-surface.surface-control; - -in { - options.microsoft-surface.surface-control = { - enable = mkEnableOption "Enable 'surface-control' for Microsoft Surface"; - }; - - config = mkMerge [ - { - microsoft-surface.surface-control.enable = mkDefault false; - } - - (mkIf cfg.enable { - environment.systemPackages = with pkgs; [ surface-control ]; - services.udev.packages = with pkgs; [ surface-control]; - users.groups.surface-control = { }; - }) - ]; -} diff --git a/microsoft/surface/surface-go/default.nix b/microsoft/surface/surface-go/default.nix index fdd13f6..017cd71 100644 --- a/microsoft/surface/surface-go/default.nix +++ b/microsoft/surface/surface-go/default.nix @@ -14,7 +14,7 @@ in { ../../../common/pc/ssd # The Intel CPU module auto-includes Intel's GPU: ../../../common/cpu/intel - ../../../common/cpu/intel/kaby-lake + ../../../common/gpu/intel/kaby-lake ]; boot.kernelParams = [ diff --git a/microsoft/surface/surface-laptop-amd/default.nix b/microsoft/surface/surface-laptop-amd/default.nix index 4985911..644b7d9 100644 --- a/microsoft/surface/surface-laptop-amd/default.nix +++ b/microsoft/surface/surface-laptop-amd/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ lib, pkgs, ... }: # This module is intended to support the Surface Laptop range, specifically those with AMD CPUs. # It's expected it will work equally well on many other Surface models, but they may need further @@ -15,6 +15,6 @@ ]; # Note: The IPTS module is not often required on devices with Surface Laptop 3 (AMD). - microsoft-surface.ipts.enable = true; - microsoft-surface.surface-control.enable = true; + services.iptsd.enable = lib.mkDefault true; + environment.systemPackages = [ pkgs.surface-control ]; } diff --git a/microsoft/surface/surface-pro-intel/default.nix b/microsoft/surface/surface-pro-intel/default.nix index 026843a..20ebbba 100644 --- a/microsoft/surface/surface-pro-intel/default.nix +++ b/microsoft/surface/surface-pro-intel/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ lib, pkgs, ... }: # This module is intended to support the Surface Pro range, specifically those with Intel CPUs. # It's expected it will work equally well on many other Surface models, but they may need further @@ -13,6 +13,11 @@ ../../../common/cpu/intel ]; - microsoft-surface.ipts.enable = true; - microsoft-surface.surface-control.enable = true; + services.iptsd.enable = lib.mkDefault true; + environment.systemPackages = [ pkgs.surface-control ]; + + services.thermald = lib.mkDefault { + enable = true; + configFile = ./thermal-conf.xml; + }; } diff --git a/microsoft/surface/surface-pro-intel/thermal-conf.xml b/microsoft/surface/surface-pro-intel/thermal-conf.xml new file mode 100644 index 0000000..459ef81 --- /dev/null +++ b/microsoft/surface/surface-pro-intel/thermal-conf.xml @@ -0,0 +1,27 @@ + + + + Surface Pro Intel Thermal Workaround + * + QUIET + + + cpu + + + x86_pkg_temp + 65000 + passive + SEQUENTIAL + + 1 + rapl_controller + 100 + 10 + + + + + + + diff --git a/pine64/pinebook-pro/README.md b/pine64/pinebook-pro/README.md index b6c0811..c791634 100644 --- a/pine64/pinebook-pro/README.md +++ b/pine64/pinebook-pro/README.md @@ -32,14 +32,6 @@ https://github.com/NixOS/nixos-hardware/blob/6d1bd5bc2e8b9992a3f57e416ba50fbed55 HDMI over Type-C works only for the custom kernel and the audio dosen't work (it's an upstream problem). -#### `rockchipdrm` and `efifb` - -This can be worked around by booting with the `efifb=off` kernel command-line. - -This is already handled for you by this configuration. If using the generic -UEFI AArch64 iso, you will need to add the option yourself to the command-line -using GRUB. - #### _EFI_ and poweroff When booted using EFI, the system will not power off. It will stay seemingly diff --git a/protectli/vp4670/default.nix b/protectli/vp4670/default.nix index fdaac85..14dcf4c 100644 --- a/protectli/vp4670/default.nix +++ b/protectli/vp4670/default.nix @@ -1,6 +1,6 @@ { imports = [ - ../../common/cpu/intel/comet-lake + ../../common/gpu/intel/comet-lake ]; boot.initrd.kernelModules = [ diff --git a/purism/librem/5r4/kernel.nix b/purism/librem/5r4/kernel.nix index 28f5958..f348ff3 100644 --- a/purism/librem/5r4/kernel.nix +++ b/purism/librem/5r4/kernel.nix @@ -6,14 +6,14 @@ buildLinux (args // rec { defconfig = "librem5_defconfig"; - version = "6.6.6-librem5"; + version = "6.6.29-librem5"; modDirVersion = version; src = fetchFromGitLab { domain = "source.puri.sm"; owner = "Librem5"; repo = "linux"; - rev = "pureos/6.6.6pureos1"; - hash = "sha256-LJfY45yNYgFYLCGxb+WRMYBUHnY4HCI2rkflPeaeFe0="; + rev = "pureos/6.6.29pureos1"; + hash = "sha256-i8HSAJ1/Z2Ux2s3Srse+L0S1Zd/70ldpGBhIgEZ6nBw="; }; kernelPatches = [ ]; structuredExtraConfig = with lib.kernel; { diff --git a/purism/librem/5r4/u-boot/default.nix b/purism/librem/5r4/u-boot/default.nix index 26c217c..a6b00a7 100644 --- a/purism/librem/5r4/u-boot/default.nix +++ b/purism/librem/5r4/u-boot/default.nix @@ -51,6 +51,7 @@ let rev = "956aa590c93977992743b41c45d3c7ee5a024915"; # this is the latest commit on the upstream/librem5 branch hash = "sha256-MsIIlarN+WFFEzc0ptLAgS7BwJ6Cosy42xo0EwPn1AU="; }; + patches = []; BL31 = "${arm-trusted-firmware-imx8mq}/bl31.bin"; preConfigure = '' cp $BL31 . diff --git a/raspberry-pi/3/default.nix b/raspberry-pi/3/default.nix new file mode 100644 index 0000000..57da74a --- /dev/null +++ b/raspberry-pi/3/default.nix @@ -0,0 +1,34 @@ +{ lib +, pkgs +, ... +}: + +{ + boot.kernelPackages = lib.mkDefault pkgs.linuxKernel.packages.linux_rpi3; + + # fix the following error : + # modprobe: FATAL: Module ahci not found in directory + # https://github.com/NixOS/nixpkgs/issues/154163#issuecomment-1350599022 + nixpkgs.overlays = [ + (_final: super: { + makeModulesClosure = x: + super.makeModulesClosure (x // { allowMissing = true; }); + }) + ]; + + # https://github.com/NixOS/nixpkgs/blob/b72bde7c4a1f9c9bf1a161f0c267186ce3c6483c/nixos/modules/installer/sd-card/sd-image-aarch64.nix#L12 + # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) + boot.loader.grub.enable = lib.mkDefault false; + # Enables the generation of /boot/extlinux/extlinux.conf + boot.loader.generic-extlinux-compatible.enable = lib.mkDefault true; + + # The last console argument in the list that linux can find at boot will receive kernel logs. + # The serial ports listed here are: + # - ttyS0: serial + # - tty0: hdmi + boot.kernelParams = [ + "console=ttyS0,115200n8" + "console=tty0" + ]; + +} diff --git a/raspberry-pi/4/bluetooth.nix b/raspberry-pi/4/bluetooth.nix new file mode 100644 index 0000000..78619bc --- /dev/null +++ b/raspberry-pi/4/bluetooth.nix @@ -0,0 +1,44 @@ +{ config, lib, ... }: + +let + cfg = config.hardware.raspberry-pi."4".bluetooth; +in +{ + options.hardware = { + raspberry-pi."4".bluetooth = { + enable = lib.mkEnableOption '' + configuration for bluetooth + ''; + }; + }; + + config = lib.mkIf cfg.enable { + hardware.raspberry-pi."4".apply-overlays-dtmerge.enable = lib.mkDefault true; + # doesn't work for the CM module, so we exclude e.g. bcm2711-rpi-cm4.dts + hardware.deviceTree.filter = "bcm2711-rpi-4*.dtb"; + + hardware.deviceTree = { + overlays = [ + { + name = "bluetooth-overlay"; + dtsText = '' + /dts-v1/; + /plugin/; + + / { + compatible = "brcm,bcm2711"; + + fragment@0 { + target = <&uart0_pins>; + __overlay__ { + brcm,pins = <30 31 32 33>; + brcm,pull = <2 0 0 2>; + }; + }; + }; + ''; + } + ]; + }; + }; +} diff --git a/raspberry-pi/4/default.nix b/raspberry-pi/4/default.nix index 41d065a..a2739d7 100644 --- a/raspberry-pi/4/default.nix +++ b/raspberry-pi/4/default.nix @@ -4,6 +4,7 @@ imports = [ ./audio.nix ./backlight.nix + ./bluetooth.nix ./cpu-revision.nix ./digi-amp-plus.nix ./dwc2.nix diff --git a/starfive/visionfive/v2/8gb-patch.dts b/starfive/visionfive/v2/8gb-patch.dts deleted file mode 100644 index 342dcba..0000000 --- a/starfive/visionfive/v2/8gb-patch.dts +++ /dev/null @@ -1,11 +0,0 @@ -/dts-v1/; -/plugin/; -/ { - compatible = "starfive,jh7110"; - fragment@0 { - target-path = "/memory@40000000"; - __overlay__ { - reg = <0x0 0x40000000 0x2 0x0>; - }; - }; -}; diff --git a/starfive/visionfive/v2/README.md b/starfive/visionfive/v2/README.md index 6ec2612..6ceb59b 100644 --- a/starfive/visionfive/v2/README.md +++ b/starfive/visionfive/v2/README.md @@ -54,25 +54,6 @@ Build the sd image. nix build .# ``` -## Additional configuration -Additional configuration may be needed depending on your specific hardware configuration. -### Board rev 1.2A -If you have the 1.2A board revision add the following to your config: -``` nix -hardware.deviceTree.name = - lib.mkDefault "starfive/jh7110-starfive-visionfive-2-v1.2a.dtb"; -``` - -### 8GB memory -If your board has 8GB of RAM add the following to your config: - -``` nix -hardware.deviceTree.overlays = [{ - name = "8GB-patch"; - dtsFile = "${nixos-hardware}/starfive/visionfive/v2/8gb-patch.dts"; -}]; -``` - # Updating the bootloader ## SD-Card Install the firmware update script diff --git a/starfive/visionfive/v2/default.nix b/starfive/visionfive/v2/default.nix index 62cfe63..973db41 100644 --- a/starfive/visionfive/v2/default.nix +++ b/starfive/visionfive/v2/default.nix @@ -18,12 +18,4 @@ generic-extlinux-compatible.enable = lib.mkDefault true; }; }; - - hardware.deviceTree.name = - lib.mkDefault "starfive/jh7110-starfive-visionfive-2-v1.3b.dtb"; - - hardware.deviceTree.overlays = [{ - name = "qspi-patch"; - dtsFile = ./qspi-patch.dts; - }]; } diff --git a/starfive/visionfive/v2/qspi-patch.dts b/starfive/visionfive/v2/qspi-patch.dts deleted file mode 100644 index 6e12c98..0000000 --- a/starfive/visionfive/v2/qspi-patch.dts +++ /dev/null @@ -1,17 +0,0 @@ -/dts-v1/; -/plugin/; -/ { - compatible = "starfive,jh7110"; - fragment@0 { - target = <&qspi>; - __overlay__ { - nor_flash: flash@0 { - partitions { - spl@0 { - reg = <0x0 0x40000>; - }; - }; - }; - }; - }; -}; diff --git a/system76/gaze18/default.nix b/system76/gaze18/default.nix new file mode 100644 index 0000000..0485e16 --- /dev/null +++ b/system76/gaze18/default.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: +{ + imports = [ + ../. + ../../common/gpu/nvidia/prime.nix + ]; + + boot.initrd.kernelModules = [ "nvidia" ]; + + hardware.graphics = { + enable = lib.mkDefault true; + enable32Bit = lib.mkDefault true; + }; + + hardware.nvidia = { + + # modesetting.enable = lib.mkDefault true; + + powerManagement.finegrained = lib.mkDefault true; + + prime = { + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; +} diff --git a/tests/run.py b/tests/run.py index 07a86c0..6668b4e 100755 --- a/tests/run.py +++ b/tests/run.py @@ -81,7 +81,7 @@ def write_eval_test(f: IO[str], profiles: list[str]) -> None: continue system = "x86_64-linux" - if "raspberry-pi/4" == profile or "raspberry-pi/5" == profile: + if profile in ("raspberry-pi/3", "raspberry-pi/4", "raspberry-pi/5"): system = "aarch64-linux" f.write( diff --git a/tuxedo/pulse/14/gen3/README.md b/tuxedo/pulse/14/gen3/README.md index a44b5b3..e419ae4 100644 --- a/tuxedo/pulse/14/gen3/README.md +++ b/tuxedo/pulse/14/gen3/README.md @@ -5,3 +5,11 @@ [NixOS hardware configuration](https://github.com/NixOS/nixos-hardware) for [TUXEDO Pulse 14 - Gen3](https://www.tuxedocomputers.com/en/TUXEDO-Pulse-14-Gen3). + +## Troubleshooting + +### Shutdown and Power Issues + +With the Linux Kernel version `6.6.33` (NixOS 24.05) there are shutdown issues resulting in the battery not turning off +completely. Apparently a newer Kernel (tested with `6.8.12`) fixes this (the exact version where this problem is fixed is unknown). +This `default.nix` will upgrade to the `pkgs.linuxPackages_latest` if the kernel is older than `6.8.12`. diff --git a/tuxedo/pulse/14/gen3/default.nix b/tuxedo/pulse/14/gen3/default.nix index f43fbb0..fb4aa24 100644 --- a/tuxedo/pulse/14/gen3/default.nix +++ b/tuxedo/pulse/14/gen3/default.nix @@ -1,4 +1,9 @@ -{pkgs, ...}: { +{ + lib, + pkgs, + config, + ... +}: { imports = [ ../../../../common/cpu/amd ../../../../common/cpu/amd/pstate.nix @@ -6,4 +11,14 @@ ../../../../common/pc/laptop ../../../../common/pc/laptop/ssd ]; + + # Fixing a power-issue with older kernels. + # When powered off, the battery does not turn off completely. + # Kernel 6.8.12 fixes this, + # the exact version is still unknown which fixed this. + boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.8.12") ( + if (config.boot.zfs.enabled) + then pkgs.zfs.latestCompatibleLinuxPackages + else pkgs.linuxPackages_latest + ); }