Files
x1e-nixos/README.md
2026-04-10 15:45:53 +04:00

76 lines
2.3 KiB
Markdown

# x1e-nixos
NixOS flake providing kernel and hardware support for the **Microsoft Surface Laptop 7** (Snapdragon X Elite / x1e80100).
## Usage
```nix
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
x1e-nixos.url = "git+https://git.scug.io/nikkuss/x1e-nixos.git";
# Required: provides pkgs.slbounce, pkgs.tcblaunch,
# pkgs.x1e80100-firmware, pkgs.x1e80100-linux-firmware
custom-pkgs = {
url = "git+https://git.scug.io/nikkuss/pkgs.git";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { nixpkgs, x1e-nixos, custom-pkgs, ... }: {
nixosConfigurations.my-surface = nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
modules = [
{ nixpkgs.overlays = [ custom-pkgs.overlays.default ]; }
x1e-nixos.nixosModules.default
./configuration.nix
];
};
};
}
```
The `default` module imports everything (kernel, modules, boot, hardware). To pick individual pieces:
```nix
x1e-nixos.nixosModules.kernel # boot.kernelPackages + initrd config
x1e-nixos.nixosModules.kernel-modules # out-of-tree .ko modules
x1e-nixos.nixosModules.boot # systemd-boot + slbounce + firmware paths
x1e-nixos.nixosModules.hardware # DTB + firmware packages
```
## Optional modules
Some modules don't auto-load via device tree / PCI and are behind config flags:
```nix
{
x1e.model = "15"; # "13" (default) or "15" — selects the correct DTB
x1e.cpuParking = true; # loads cpu_parking at boot
x1e.ecReboot = true; # loads ec_reboot at boot, exposes /sys/kernel/ec_reboot/reboot
}
```
## Touchpad not working
After a lid close or certain sleep/wake cycles, the EC may cut power to the touchpad sensor in a way that Linux cannot recover from on its own. If the touchpad stops responding:
**Option A — sysfs (no reboot required on its own, but the EC reset will reboot the machine):**
```sh
modprobe ec_reboot
echo 1 > /sys/kernel/ec_reboot/reboot
```
**Option B — hard power off:**
Hold the power button for **10 seconds** until the machine fully shuts off, then power it back on.
Both methods force a full EC power cycle, which resets the touchpad sensor state.
## EL2
The EL2 boot specialisation (slbounce) is currently broken. The default boot entry runs in EL1.