biscuit/configuration.nix

168 lines
4.9 KiB
Nix
Raw Normal View History

{ lib, config, pkgs, ... }:
let
2024-07-21 19:56:12 +00:00
saturn = pkgs.callPackage ./pkgs/saturn {};
2024-02-18 22:04:58 +00:00
drm-framebuffer = pkgs.stdenv.mkDerivation {
name = "drm-framebuffer";
src = pkgs.fetchFromGitHub {
owner = "embear-engineering";
repo = "drm-framebuffer";
rev = "80e862bd13bc0f96848af1c1b24b4b0e1fe5b23c";
hash = "sha256-YBRG8FUbhwAgquzehvo5Mu+xODcWOOG1HTMtUhNq6xo=";
};
nativeBuildInputs = [ pkgs.pkg-config ];
buildInputs = with pkgs; [ libdrm ];
preBuild = ''
makeFlagsArray+=("CFLAGS=$($PKG_CONFIG --libs --cflags libdrm)")
'';
makeFlags = [ "DESTDIR=${placeholder "out"}" "bindir=/bin" ];
};
2024-02-18 22:01:55 +00:00
modemFirmware = config.mobile.device.firmware.override {
modem = ./local/harpia-modem;
};
secrets = import ./local/secrets.nix;
in {
imports = [
2024-02-18 22:01:55 +00:00
(import ../mobile-nixos/lib/configuration.nix { device = "motorola-harpia"; })
];
config = {
2024-07-21 20:01:39 +00:00
nixpkgs.overlays = [
(final: prev: {
wlr-randr = prev.wlr-randr.overrideAttrs(o: {
depsBuildBuild = [ final.pkgsBuildBuild.pkg-config ];
});
maps = final.callPackage ./pkgs/maps {};
qmi-nmea = final.callPackage ./pkgs/qmi-nmea {};
})
2024-07-21 20:01:39 +00:00
];
mobile = {
adbd.enable = true;
2024-02-18 22:01:55 +00:00
boot.stage-1.firmware = [
modemFirmware
pkgs.wireless-regdb
];
};
2024-02-18 22:01:55 +00:00
hardware.firmware = [
modemFirmware
pkgs.wireless-regdb
];
system.stateVersion = "23.11";
2024-02-18 22:08:21 +00:00
boot.kernelParams = [
2024-07-19 22:48:04 +00:00
# "dyndbg=\"file drivers/base/firmware_loader/main.c +fmp\""
2024-02-18 22:08:21 +00:00
# "dyndbg=\"file drivers/gpu/drm/panel/msm8953-generated/panel-boe-bs052fhm-a00-6c01.c +fmp\""
# "dyndbg=\"file drivers/video/backlight/qcom-wled.c +fmp\""
];
2024-02-18 22:08:21 +00:00
fileSystems."/boot" = {
device = "/dev/disk/by-label/nixos-boot";
fsType = "ext2";
};
# according to fdisk, /dev/mmcblk0p41 is 30469887-7471104=22998783
# blocks, and if we let it get resized by whatever magic this is
# (I'm assuming systemd-growfs), on the subsequent boot we'll get
# an error
# EXT4-fs (mmcblk0p41): bad geometry: block count 2883067 exceeds size of device (2874848 blocks)
# in which neither number matches the reported size (they're both
# about 10% of it). cool.
boot.growPartition = lib.mkForce false;
services.udev.extraRules = ''
# unlock the gps engine
SUBSYSTEM=="wwan", ENV{DEVNAME}=="/dev/wwan0qmi0", ENV{DEVTYPE}=="wwan_port", \
RUN+="${pkgs.libqmi}/bin/qmicli -pd $env{DEVNAME} --loc-set-engine-lock=none"
'';
2024-07-21 20:01:39 +00:00
networking = {
interfaces.wlan0.useDHCP = true;
hostName = "biscuit";
networkmanager = {
enable = true;
unmanaged = ["wlan0"];
};
useNetworkd = true;
# requires nixpkgs 0deadd5baf (Dec 2024)
modemmanager.enable = true;
inherit (secrets) wireless;
};
services.openssh.enable = true;
2024-07-21 20:00:36 +00:00
services.cage =
let wlinit = pkgs.writeScript "wlinit" ''
2024-07-21 20:01:39 +00:00
${pkgs.wlr-randr}/bin/wlr-randr --output DSI-1 --scale 2
2024-07-21 20:00:36 +00:00
exec ${saturn}/bin/saturn
'';
in {
enable = true;
program = wlinit;
user = "dan";
};
environment.systemPackages = with pkgs; [
drm-framebuffer
satellite
2024-07-21 20:01:39 +00:00
wlr-randr
2024-07-22 21:25:25 +00:00
maps
qmi-nmea
2024-07-21 20:00:36 +00:00
];
users.users.dan = {
isNormalUser = true;
uid = 1000;
extraGroups = [ "wheel" "libvirtd" "docker" "dialout" ];
openssh.authorizedKeys.keys = import ../telent-nixos-config/users/dan/authorized-keys.nix;
};
2024-02-18 22:04:07 +00:00
users.users.root.openssh.authorizedKeys.keys = import ../telent-nixos-config/users/dan/authorized-keys.nix;
2024-02-18 22:04:58 +00:00
hardware.opengl = {
enable = true; driSupport = true;
};
systemd.services = {
nmea-share = {
wantedBy = [ "multi-user.target" ];
serviceConfig = {
# https://github.com/andersson/rmtfs/blob/7a5ae7e0a57be3e09e0256b51b9075ee6b860322/rmtfs.c#L507-L541
ExecStart = ''
${pkgs.socat}/bin/socat exec:"${pkgs.qmi-nmea}/bin/qmi-nmea /dev/wwan0qmi0",pty unix-listen:/var/run/gnss-share.sock,fork,umask=0000,mode=0766
'';
Restart = "always";
RestartSec = "2";
};
};
rmtfs =
# the four files in here are partition images:
# partlabel => filename
# modemst1 => modem_fs1
# modemst2 => modem_fs2
# fsc => modem_fsc
# fsg => modem_fsg
let files = pkgs.runCommand "rmtfs" {} ''
mkdir -p $out/lib/firmware
cp ${./local/uncompressed-firmware/rmtfs}/* $out/lib/firmware
'';
in {
wantedBy = [ "multi-user.target" ];
serviceConfig = {
# https://github.com/andersson/rmtfs/blob/7a5ae7e0a57be3e09e0256b51b9075ee6b860322/rmtfs.c#L507-L541
ExecStart = "${pkgs.rmtfs}/bin/rmtfs -s -r -o ${files}/lib/firmware";
Restart = "always";
RestartSec = "10";
};
};
};
};
}