{ lib, config, pkgs, ... }: let saturn = pkgs.callPackage ./pkgs/saturn {}; 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" ]; }; modemFirmware = config.mobile.device.firmware.override { modem = ./local/harpia-modem; }; secrets = import ./local/secrets.nix; in { imports = [ (import ../mobile-nixos/lib/configuration.nix { device = "motorola-harpia"; }) ]; config = { 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 {}; }) ]; mobile = { adbd.enable = true; boot.stage-1.firmware = [ modemFirmware pkgs.wireless-regdb ]; }; hardware.firmware = [ modemFirmware pkgs.wireless-regdb ]; system.stateVersion = "23.11"; boot.kernelParams = [ # "dyndbg=\"file drivers/base/firmware_loader/main.c +fmp\"" # "dyndbg=\"file drivers/gpu/drm/panel/msm8953-generated/panel-boe-bs052fhm-a00-6c01.c +fmp\"" # "dyndbg=\"file drivers/video/backlight/qcom-wled.c +fmp\"" ]; 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" ''; 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; services.cage = let wlinit = pkgs.writeScript "wlinit" '' ${pkgs.wlr-randr}/bin/wlr-randr --output DSI-1 --scale 2 exec ${saturn}/bin/saturn ''; in { enable = true; program = wlinit; user = "dan"; }; environment.systemPackages = with pkgs; [ drm-framebuffer saturn satellite wlr-randr maps qmi-nmea ]; users.users.dan = { isNormalUser = true; uid = 1000; extraGroups = [ "wheel" "libvirtd" "docker" "dialout" ]; openssh.authorizedKeys.keys = import ../telent-nixos-config/users/dan/authorized-keys.nix; }; users.users.root.openssh.authorizedKeys.keys = import ../telent-nixos-config/users/dan/authorized-keys.nix; hardware.opengl = { enable = true; driSupport = true; }; systemd.services = { 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"; }; }; }; }; }