diff --git a/README.md b/README.md index 9ec67ab..937bf17 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # nixos x13s +> [!CAUTION] +> This project is unmaintained. + This repository aims to provide easy, shared, support for Lenovo X13s on Linux. The support for this machine is constantly improving in mainline kernel and upstream packages. Eventually the goal is that this repository is no longer necessary. diff --git a/flake.lock b/flake.lock index 190dfbe..3dc68ab 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1717285511, - "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", + "lastModified": 1719994518, + "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", + "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1719254875, - "narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=", + "lastModified": 1722062969, + "narHash": "sha256-QOS0ykELUmPbrrUGmegAUlpmUFznDQeR4q7rFhl8eQg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60", + "rev": "b73c2221a46c13557b1b3be9c2070cc42cf01eb3", "type": "github" }, "original": { @@ -36,14 +36,14 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1717284937, - "narHash": "sha256-lIbdfCsf8LMFloheeE6N31+BMIeixqyQWbSr2vk79EQ=", + "lastModified": 1719876945, + "narHash": "sha256-Fm2rDDs86sHy0/1jxTOKB1118Q0O3Uc7EC0iXvXKpbI=", "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" + "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz" }, "original": { "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" + "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz" } }, "root": { diff --git a/flake.nix b/flake.nix index e57a463..f0ea0ca 100644 --- a/flake.nix +++ b/flake.nix @@ -36,10 +36,6 @@ ]; }; }; - - packages = { - iso = self.nixosConfigurations.iso.config.system.build.isoImage; - }; }; flake.nixosModules.default = import ./module.nix { inherit dtbName; }; @@ -49,21 +45,19 @@ system = "aarch64-linux"; modules = [ self.nixosModules.default - { - nixos-x13s.enable = true; - nixos-x13s.kernel = "jhovold"; # jhovold is default, but mainline supported + ( + { config, pkgs, ... }: + { + nixos-x13s.enable = true; + nixos-x13s.kernel = "jhovold"; # jhovold is default, but mainline supported - # install multiple kernels! note this increases eval time for each specialization - # specialisation = { - # mainline.configuration.nixos-x13s.kernel = "mainline"; - # }; + # allow unfree firmware + nixpkgs.config.allowUnfree = true; - # allow unfree firmware - nixpkgs.config.allowUnfree = true; - - # define your fileSystems - fileSystems."/".device = "/dev/notreal"; - } + # define your fileSystems + fileSystems."/".device = "/dev/notreal"; + } + ) ]; }; @@ -73,12 +67,45 @@ self.nixosModules.default ( - { modulesPath, config, ... }: + { + modulesPath, + config, + lib, + pkgs, + ... + }: let - dtb = "${config.boot.kernelPackages.kernel}/dtbs/qcom/${dtbName}"; + image = import "${inputs.nixpkgs}/nixos/lib/make-disk-image.nix" { + inherit config lib pkgs; + + name = "nixos-x13s-bootstrap"; + diskSize = "auto"; + format = "raw"; + partitionTableType = "efi"; + copyChannel = false; + }; + in { - imports = [ "${toString modulesPath}/installer/cd-dvd/iso-image.nix" ]; + hardware.deviceTree = { + enable = true; + name = "qcom/${dtbName}"; + }; + + system.build.bootstrap-image = image; + + boot = { + initrd = { + systemd.enable = true; + systemd.emergencyAccess = true; + }; + + loader = { + grub.enable = false; + systemd-boot.enable = true; + systemd-boot.graceful = true; + }; + }; nixpkgs.config.allowUnfree = true; @@ -87,16 +114,16 @@ bluetoothMac = "02:68:b3:29:da:98"; }; - isoImage = { - makeEfiBootable = true; - makeUsbBootable = true; - - contents = [ - { - source = dtb; - target = "/x13s.dtb"; - } - ]; + fileSystems = { + "/boot" = { + fsType = "vfat"; + device = "/dev/disk/by-label/ESP"; + }; + "/" = { + device = "/dev/disk/by-label/nixos"; + fsType = "ext4"; + autoResize = true; + }; }; } ) diff --git a/module.nix b/module.nix index 711a9f3..61c066a 100644 --- a/module.nix +++ b/module.nix @@ -20,6 +20,21 @@ let ); dtb = "${linuxPackages_x13s.kernel}/dtbs/qcom/${dtbName}"; dtbEfiPath = "dtbs/x13s.dtb"; + + modulesClosure = pkgs.makeModulesClosure { + rootModules = config.boot.initrd.availableKernelModules ++ config.boot.initrd.kernelModules; + kernel = config.system.modulesTree; + firmware = config.hardware.firmware; + allowMissing = false; + }; + + modulesWithExtra = pkgs.symlinkJoin { + name = "modules-closure"; + paths = [ + modulesClosure + x13sPackages.graphics-firmware + ]; + }; in { options.nixos-x13s = { @@ -41,28 +56,24 @@ in }; config = lib.mkIf cfg.enable { - environment.systemPackages = [ - pkgs.efibootmgr - (x13sPackages.uncompressed-firmware.override { - firmwareFilesList = lib.flatten options.hardware.firmware.definitions; - }) + assertions = [ + { + assertion = false; + message = "adamcstephens/nixos-x13s is no longer maintained"; + } ]; - environment.pathsToLink = [ "/share/uncompressed-firmware" ]; + environment.systemPackages = [ pkgs.efibootmgr ]; hardware.enableAllFirmware = true; - hardware.firmware = [ x13sPackages."x13s/extra-firmware" ]; - - systemd.services.pd-mapper = { - wantedBy = [ "multi-user.target" ]; - - serviceConfig = { - ExecStart = "${lib.getExe x13sPackages.pd-mapper}"; - Restart = "always"; - }; - }; + hardware.firmware = lib.mkBefore [ x13sPackages.graphics-firmware ]; boot = { + initrd.systemd.enable = true; + initrd.systemd.contents = { + "/lib".source = lib.mkForce "${modulesWithExtra}/lib"; + }; + loader.efi.canTouchEfiVariables = true; loader.systemd-boot.enable = lib.mkDefault true; loader.systemd-boot.extraFiles = { @@ -79,11 +90,8 @@ in "efi=noruntime" "clk_ignore_unused" "pd_ignore_unused" - "regulator_ignore_unused" "arm64.nopauth" - - # blacklist graphics in initrd so the firmware can load from disk - "rd.driver.blacklist=msm" + # "regulator_ignore_unused" # allows for > 30 sec to load msm, at the potential cost of power ]; initrd = { @@ -107,7 +115,7 @@ in "dispcc_sc8280xp" "phy_qcom_edp" "panel-edp" - # "msm" + "msm" ]; }; }; diff --git a/npins/sources.json b/npins/sources.json index 6dbc7d2..6224ea5 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -7,10 +7,10 @@ "owner": "jhovold", "repo": "linux" }, - "branch": "wip/sc8280xp-6.10-rc5", - "revision": "fb34a1d838d061d9e2199656b832bb2ebc2dc5e3", - "url": "https://github.com/jhovold/linux/archive/fb34a1d838d061d9e2199656b832bb2ebc2dc5e3.tar.gz", - "hash": "07gsf26954qi9lspbzlc4xsan4vbiyzbfnpwbwyaxcqfibzfg6vg" + "branch": "wip/sc8280xp-6.11-rc1", + "revision": "9c6b81022b9c277d65c68e25f4cfd52f33ef8f28", + "url": "https://github.com/jhovold/linux/archive/9c6b81022b9c277d65c68e25f4cfd52f33ef8f28.tar.gz", + "hash": "13c6r67iy8y750f8zpals4l941lshxx3w3ar1ss9dizsqjsghdsr" } }, "version": 3 diff --git a/packages/default.nix b/packages/default.nix index dd08321..f4a84f7 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -14,17 +14,23 @@ let } ); in -rec { +{ linux_jhovold = pkgs.callPackage linux_x13s_pkg { src = sources.linux-jhovold; - version = "6.10.0-rc5"; + version = "6.11.0-rc1"; defconfig = "johan_defconfig"; }; - pd-mapper = pkgs.callPackage ./pd-mapper { inherit qrtr; }; - qrtr = pkgs.callPackage ./qrtr { }; - - "x13s/extra-firmware" = pkgs.callPackage ./extra-firmware.nix { }; - - uncompressed-firmware = pkgs.callPackage ./uncompressed-firmware.nix { }; + graphics-firmware = + let + gpu-src = pkgs.fetchurl { + url = "https://download.lenovo.com/pccbbs/mobiles/n3hdr20w.exe"; + hash = "sha256-Jwyl9uKOnjpwfHd+VaGHjYs9x8cUuRdFCERuXqaJwEY="; + }; + in + pkgs.runCommand "graphics-firmware" { } '' + mkdir -vp "$out/lib/firmware/qcom/sc8280xp/LENOVO/21BX" + ${lib.getExe pkgs.innoextract} ${gpu-src} + cp -v code\$GetExtractPath\$/*/*.mbn "$out/lib/firmware/qcom/sc8280xp/LENOVO/21BX/" + ''; } diff --git a/packages/extra-firmware.nix b/packages/extra-firmware.nix deleted file mode 100644 index 2578627..0000000 --- a/packages/extra-firmware.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ stdenvNoCC, fetchFromGitHub }: - -stdenvNoCC.mkDerivation { - pname = "x13s-extra-firmware"; - version = "1.0.0"; - - src = fetchFromGitHub { - owner = "ironrobin"; - repo = "x13s-alarm"; - rev = "efa51c3b519f75b3983aef67855b1561d9828771"; - sha256 = "sha256-weETbWXz9aL2pDQDKk7fkb1ecQH0qrhUYDs2E5EiJcI="; - }; - - dontFixup = true; - dontBuild = true; - - installPhase = '' - mkdir -p $out/lib/firmware/qcom/sc8280xp/LENOVO/21BX - cp x13s-firmware/qcvss8280.mbn $out/lib/firmware/qcom/sc8280xp/LENOVO/21BX/ - ''; -} diff --git a/packages/pd-mapper/default.nix b/packages/pd-mapper/default.nix deleted file mode 100644 index d0f4fde..0000000 --- a/packages/pd-mapper/default.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - stdenv, - lib, - fetchFromGitHub, - qrtr, - xz, -}: - -stdenv.mkDerivation { - pname = "pd-mapper"; - version = "unstable-2023-09-01"; - - buildInputs = [ - qrtr - xz - ]; - - src = fetchFromGitHub { - owner = "andersson"; - repo = "pd-mapper"; - rev = "10997ba7c43a3787a40b6b1b161408033e716374"; - hash = "sha256-qGrYNoPCxtdpTdbkSmB39+6/pSXml96Aul8b9opF9Lc="; - }; - - patches = [ ./pd-mapper-firmware-path.diff ]; - - installFlags = [ "prefix=$(out)" ]; - - meta = with lib; { - description = "Qualcomm PD mapper"; - homepage = "https://github.com/andersson/pd-mapper"; - license = licenses.bsd3; - mainProgram = "pd-mapper"; - platforms = platforms.aarch64; - }; -} diff --git a/packages/pd-mapper/pd-mapper-firmware-path.diff b/packages/pd-mapper/pd-mapper-firmware-path.diff deleted file mode 100644 index 8e58e4d..0000000 --- a/packages/pd-mapper/pd-mapper-firmware-path.diff +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/pd-mapper.c b/pd-mapper.c -index 65c4b80..669d9a0 100644 ---- a/pd-mapper.c -+++ b/pd-mapper.c -@@ -194,7 +194,7 @@ static int pd_load_map(const char *file) - } - - #ifndef ANDROID --#define FIRMWARE_BASE "/lib/firmware/" -+#define FIRMWARE_BASE "/run/current-system/sw/share/uncompressed-firmware/" - #else - #define FIRMWARE_BASE "/vendor/firmware/" - #endif diff --git a/packages/qrtr/default.nix b/packages/qrtr/default.nix deleted file mode 100644 index 7dc6e44..0000000 --- a/packages/qrtr/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - stdenv, - lib, - fetchFromGitHub, -}: - -stdenv.mkDerivation { - pname = "qrtr"; - version = "unstable-2023-01-17"; - - src = fetchFromGitHub { - owner = "andersson"; - repo = "qrtr"; - rev = "d0d471c96e7d112fac6f48bd11f9e8ce209c04d2"; - hash = "sha256-KF0gCBRw3BDJdK1s+dYhHkokVTHwRFO58ho0IwHPehc="; - }; - - installFlags = [ "prefix=$(out)" ]; - - meta = with lib; { - description = "QMI IDL compiler"; - homepage = "https://github.com/andersson/qrtr"; - license = licenses.bsd3; - platforms = platforms.aarch64; - }; -} diff --git a/packages/uncompressed-firmware.nix b/packages/uncompressed-firmware.nix deleted file mode 100644 index 8fe5d3a..0000000 --- a/packages/uncompressed-firmware.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - runCommand, - buildEnv, - firmwareFilesList ? [ ], -}: -runCommand "qcom-modem-uncompressed-firmware-share" - { - firmwareFiles = buildEnv { - name = "qcom-modem-uncompressed-firmware"; - paths = firmwareFilesList; - pathsToLink = [ - "/lib/firmware/rmtfs" - "/lib/firmware/qcom" - ]; - }; - } - '' - PS4=" $ " - ( - set -x - mkdir -p $out/share/ - ln -s $firmwareFiles/lib/firmware/ $out/share/uncompressed-firmware - ) - ''