mirror of
https://codeberg.org/mart-w/nixos-x13s.git
synced 2024-12-11 15:36:13 +01:00
init: x13s module and packages
This commit is contained in:
commit
df8c1f5256
5
.envrc
Normal file
5
.envrc
Normal file
|
@ -0,0 +1,5 @@
|
|||
use flake
|
||||
|
||||
if [ -e .secret.envrc ]; then
|
||||
source .secret.envrc
|
||||
fi
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.secret.envrc
|
64
flake.lock
Normal file
64
flake.lock
Normal file
|
@ -0,0 +1,64 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704982712,
|
||||
"narHash": "sha256-2Ptt+9h8dczgle2Oo6z5ni5rt/uLMG47UFTR1ry/wgg=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "07f6395285469419cf9d078f59b5b49993198c00",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1705856552,
|
||||
"narHash": "sha256-JXfnuEf5Yd6bhMs/uvM67/joxYKoysyE3M2k6T3eWbg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "612f97239e2cc474c13c9dafa0df378058c5ad8d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"dir": "lib",
|
||||
"lastModified": 1703961334,
|
||||
"narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"dir": "lib",
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
25
flake.nix
Normal file
25
flake.nix
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{ flake-parts, ... }:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
imports = [ ./packages/part.nix ];
|
||||
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
perSystem =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
devShells.default = pkgs.mkShellNoCC { packages = [ pkgs.npins ]; };
|
||||
};
|
||||
|
||||
flake.nixosModules.default = import ./module.nix;
|
||||
};
|
||||
}
|
123
module.nix
Normal file
123
module.nix
Normal file
|
@ -0,0 +1,123 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.nixos-x13s;
|
||||
|
||||
x13sPackages = import ./packages/default.nix { inherit lib pkgs; };
|
||||
|
||||
dtbName = "sc8280xp-lenovo-thinkpad-x13s.dtb";
|
||||
linuxPackages_x13s = pkgs.linuxPackagesFor x13sPackages."x13s/linux";
|
||||
dtb = "${linuxPackages_x13s.kernel}/dtbs/qcom/${dtbName}";
|
||||
|
||||
alsa-ucm-conf-env.ALSA_CONFIG_UCM2 = "${x13sPackages."x13s/alsa-ucm-conf"}/share/alsa/ucm2";
|
||||
in
|
||||
{
|
||||
options.nixos-x13s = {
|
||||
enable = lib.mkEnableOption "x13s hardware support";
|
||||
|
||||
bluetoothMac = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "mac address to set on boot";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
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";
|
||||
};
|
||||
};
|
||||
|
||||
environment.sessionVariables = alsa-ucm-conf-env;
|
||||
systemd.user.services.pipewire.environment = alsa-ucm-conf-env;
|
||||
systemd.user.services.wireplumber.environment = alsa-ucm-conf-env;
|
||||
|
||||
boot = {
|
||||
loader.efi.canTouchEfiVariables = true;
|
||||
loader.systemd-boot.enable = lib.mkDefault true;
|
||||
loader.systemd-boot.extraFiles = {
|
||||
"${dtbName}" = dtb;
|
||||
};
|
||||
|
||||
supportedFilesystems = lib.mkForce [
|
||||
"ext4"
|
||||
"btrfs"
|
||||
"vfat"
|
||||
];
|
||||
|
||||
initrd.supportedFilesystems = lib.mkForce [
|
||||
"btrfs"
|
||||
"vfat"
|
||||
];
|
||||
|
||||
kernelPackages = linuxPackages_x13s;
|
||||
|
||||
kernelParams = [
|
||||
# jhovold recommended
|
||||
"efi=noruntime"
|
||||
"clk_ignore_unused"
|
||||
"pd_ignore_unused"
|
||||
"arm64.nopauth"
|
||||
|
||||
# blacklist graphics in initrd so the firmware can load from disk
|
||||
"rd.driver.blacklist=msm"
|
||||
];
|
||||
|
||||
initrd = {
|
||||
includeDefaultModules = false;
|
||||
|
||||
kernelModules = [
|
||||
"nvme"
|
||||
"phy-qcom-qmp-pcie"
|
||||
"pcie-qcom"
|
||||
|
||||
"i2c-core"
|
||||
"i2c-hid"
|
||||
"i2c-hid-of"
|
||||
"i2c-qcom-geni"
|
||||
|
||||
"leds_qcom_lpg"
|
||||
"pwm_bl"
|
||||
"qrtr"
|
||||
"pmic_glink_altmode"
|
||||
"gpio_sbu_mux"
|
||||
"phy-qcom-qmp-combo"
|
||||
"gpucc_sc8280xp"
|
||||
"dispcc_sc8280xp"
|
||||
"phy_qcom_edp"
|
||||
"panel-edp"
|
||||
# "msm"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# default is performance
|
||||
powerManagement.cpuFreqGovernor = "ondemand";
|
||||
|
||||
systemd.services.bluetooth = {
|
||||
serviceConfig = {
|
||||
# disabled because btmgmt call hangs
|
||||
# ExecStartPre = [
|
||||
# ""
|
||||
# "${pkgs.util-linux}/bin/rfkill block bluetooth"
|
||||
# "${pkgs.bluez5-experimental}/bin/btmgmt public-addr ${cfg.bluetoothMac}"
|
||||
# "${pkgs.util-linux}/bin/rfkill unblock bluetooth"
|
||||
# ];
|
||||
RestartSec = 5;
|
||||
Restart = "on-failure";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
47
npins/default.nix
Normal file
47
npins/default.nix
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Generated by npins. Do not modify; will be overwritten regularly
|
||||
let
|
||||
data = builtins.fromJSON (builtins.readFile ./sources.json);
|
||||
version = data.version;
|
||||
|
||||
mkSource = spec:
|
||||
assert spec ? type; let
|
||||
path =
|
||||
if spec.type == "Git" then mkGitSource spec
|
||||
else if spec.type == "GitRelease" then mkGitSource spec
|
||||
else if spec.type == "PyPi" then mkPyPiSource spec
|
||||
else if spec.type == "Channel" then mkChannelSource spec
|
||||
else builtins.throw "Unknown source type ${spec.type}";
|
||||
in
|
||||
spec // { outPath = path; };
|
||||
|
||||
mkGitSource = { repository, revision, url ? null, hash, ... }:
|
||||
assert repository ? type;
|
||||
# At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
|
||||
# In the latter case, there we will always be an url to the tarball
|
||||
if url != null then
|
||||
(builtins.fetchTarball {
|
||||
inherit url;
|
||||
sha256 = hash; # FIXME: check nix version & use SRI hashes
|
||||
})
|
||||
else assert repository.type == "Git"; builtins.fetchGit {
|
||||
url = repository.url;
|
||||
rev = revision;
|
||||
# hash = hash;
|
||||
};
|
||||
|
||||
mkPyPiSource = { url, hash, ... }:
|
||||
builtins.fetchurl {
|
||||
inherit url;
|
||||
sha256 = hash;
|
||||
};
|
||||
|
||||
mkChannelSource = { url, hash, ... }:
|
||||
builtins.fetchTarball {
|
||||
inherit url;
|
||||
sha256 = hash;
|
||||
};
|
||||
in
|
||||
if version == 3 then
|
||||
builtins.mapAttrs (_: mkSource) data.pins
|
||||
else
|
||||
throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"
|
29
npins/sources.json
Normal file
29
npins/sources.json
Normal file
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"pins": {
|
||||
"alsa-ucm-conf": {
|
||||
"type": "Git",
|
||||
"repository": {
|
||||
"type": "GitHub",
|
||||
"owner": "alsa-project",
|
||||
"repo": "alsa-ucm-conf"
|
||||
},
|
||||
"branch": "master",
|
||||
"revision": "e87dde51d68950537f92af955ad0633437cc419a",
|
||||
"url": "https://github.com/alsa-project/alsa-ucm-conf/archive/e87dde51d68950537f92af955ad0633437cc419a.tar.gz",
|
||||
"hash": "14q6h5h4b6kyywmxf1jq726yrv1bl9q6i2pnfbl1hm7r66vgnaip"
|
||||
},
|
||||
"jhovold-linux": {
|
||||
"type": "Git",
|
||||
"repository": {
|
||||
"type": "GitHub",
|
||||
"owner": "jhovold",
|
||||
"repo": "linux"
|
||||
},
|
||||
"branch": "wip/sc8280xp-v6.7",
|
||||
"revision": "bac95eabe6577faa2773cbe7e91c34fd17ab79a0",
|
||||
"url": "https://github.com/jhovold/linux/archive/bac95eabe6577faa2773cbe7e91c34fd17ab79a0.tar.gz",
|
||||
"hash": "1y8abwa506q9dchqvnaqbb8n3i7nj2jnaxcll1f1476qi0yswc1n"
|
||||
}
|
||||
},
|
||||
"version": 3
|
||||
}
|
64
packages/default.nix
Normal file
64
packages/default.nix
Normal file
|
@ -0,0 +1,64 @@
|
|||
{ lib, pkgs, ... }:
|
||||
let
|
||||
sources = import ../npins;
|
||||
kp = [
|
||||
{
|
||||
name = "x13s-cfg";
|
||||
patch = null;
|
||||
extraStructuredConfig = with lib.kernel; {
|
||||
EFI_ARMSTUB_DTB_LOADER = lib.mkForce yes;
|
||||
OF_OVERLAY = lib.mkForce yes;
|
||||
BTRFS_FS = lib.mkForce yes;
|
||||
BTRFS_FS_POSIX_ACL = lib.mkForce yes;
|
||||
MEDIA_CONTROLLER = lib.mkForce yes;
|
||||
SND_USB_AUDIO_USE_MEDIA_CONTROLLER = lib.mkForce yes;
|
||||
SND_USB = lib.mkForce yes;
|
||||
SND_USB_AUDIO = lib.mkForce module;
|
||||
USB_XHCI_PCI = lib.mkForce module;
|
||||
NO_HZ_FULL = lib.mkForce yes;
|
||||
HZ_100 = lib.mkForce yes;
|
||||
HZ_250 = lib.mkForce no;
|
||||
DRM_AMDGPU = lib.mkForce no;
|
||||
DRM_NOUVEAU = lib.mkForce no;
|
||||
QCOM_TSENS = lib.mkForce yes;
|
||||
NVMEM_QCOM_QFPROM = lib.mkForce yes;
|
||||
ARM_QCOM_CPUFREQ_NVMEM = lib.mkForce yes;
|
||||
VIRTIO_PCI = lib.mkForce module;
|
||||
# forthcoming kernel work: QCOM_PD_MAPPER = lib.mkForce module;
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
linux_x13s_pkg =
|
||||
{ buildLinux, ... }@args:
|
||||
let
|
||||
version = "6.7.0";
|
||||
modDirVersion = "${version}";
|
||||
in
|
||||
buildLinux (
|
||||
args
|
||||
// {
|
||||
inherit version modDirVersion;
|
||||
|
||||
src = sources.jhovold-linux;
|
||||
|
||||
kernelPatches = (args.kernelPatches or [ ]) ++ kp;
|
||||
extraMeta.branch = lib.versions.majorMinor version;
|
||||
}
|
||||
// (args.argsOverride or { })
|
||||
);
|
||||
in
|
||||
rec {
|
||||
"x13s/linux" = pkgs.callPackage linux_x13s_pkg { defconfig = "johan_defconfig"; };
|
||||
"x13s/alsa-ucm-conf" = pkgs.alsa-ucm-conf.overrideAttrs (
|
||||
prev: rec {
|
||||
version = "1.2.11-unstable-${builtins.substring 0 7 src.revision}";
|
||||
src = sources.alsa-ucm-conf;
|
||||
}
|
||||
);
|
||||
|
||||
pd-mapper = pkgs.callPackage ./pd-mapper { inherit qrtr; };
|
||||
qrtr = pkgs.callPackage ./qrtr { };
|
||||
|
||||
"x13s/extra-firmware" = pkgs.callPackage ./extra-firmware.nix { };
|
||||
}
|
21
packages/extra-firmware.nix
Normal file
21
packages/extra-firmware.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ 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/
|
||||
'';
|
||||
}
|
6
packages/part.nix
Normal file
6
packages/part.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{ lib, withSystem, ... }:
|
||||
{
|
||||
flake.packages.aarch64-linux = withSystem "aarch64-linux" (
|
||||
{ pkgs, ... }: import ./default.nix { inherit lib pkgs; }
|
||||
);
|
||||
}
|
36
packages/pd-mapper/default.nix
Normal file
36
packages/pd-mapper/default.nix
Normal file
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
}
|
13
packages/pd-mapper/pd-mapper-firmware-path.diff
Normal file
13
packages/pd-mapper/pd-mapper-firmware-path.diff
Normal file
|
@ -0,0 +1,13 @@
|
|||
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/firmware/"
|
||||
#else
|
||||
#define FIRMWARE_BASE "/vendor/firmware/"
|
||||
#endif
|
26
packages/qrtr/default.nix
Normal file
26
packages/qrtr/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue