forked from nikkuss/x1e-nixos
76 lines
2.3 KiB
Markdown
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.
|