biscuit

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

configuration.nix (5500B)


      1 { lib, config, pkgs, ... }:
      2 
      3 let
      4   local_config = if (builtins.pathExists ./local/module.nix)
      5                  then ./local/module.nix
      6                  else null;
      7   saturn = pkgs.callPackage ./pkgs/saturn {};
      8 
      9   drm-framebuffer =  pkgs.stdenv.mkDerivation {
     10     name = "drm-framebuffer";
     11     src = pkgs.fetchFromGitHub {
     12       owner = "embear-engineering";
     13       repo = "drm-framebuffer";
     14       rev = "80e862bd13bc0f96848af1c1b24b4b0e1fe5b23c";
     15       hash = "sha256-YBRG8FUbhwAgquzehvo5Mu+xODcWOOG1HTMtUhNq6xo=";
     16     };
     17     nativeBuildInputs = [ pkgs.pkg-config ];
     18     buildInputs = with pkgs; [ libdrm ];
     19     preBuild = ''
     20       makeFlagsArray+=("CFLAGS=$($PKG_CONFIG --libs --cflags libdrm)")
     21     '';
     22     makeFlags = [ "DESTDIR=${placeholder "out"}" "bindir=/bin" ];
     23   };
     24 
     25   modemFirmware = config.mobile.device.firmware.override {
     26     modem = ./local/harpia-modem;
     27   };
     28   secrets = import ./local/secrets.nix;
     29 in {
     30   imports = [
     31     (import ../mobile-nixos/lib/configuration.nix { device = "motorola-harpia"; })
     32   ] ++ lib.optional (local_config != null) local_config;
     33 
     34 
     35   config = {
     36     nixpkgs.overlays = [
     37       (final: prev: {
     38         wlr-randr = prev.wlr-randr.overrideAttrs(o: {
     39           depsBuildBuild = [ final.pkgsBuildBuild.pkg-config ];
     40         });
     41         maps = final.callPackage ./pkgs/maps {};
     42         qmi-nmea = final.callPackage ./pkgs/qmi-nmea {};
     43       })
     44     ];
     45     mobile = {
     46       adbd.enable = false;
     47       boot.stage-1.firmware = [
     48         modemFirmware
     49         pkgs.wireless-regdb
     50       ];
     51     };
     52     hardware.firmware = [
     53       modemFirmware
     54       pkgs.wireless-regdb
     55     ];
     56     system.stateVersion = "23.11";
     57 
     58     boot.kernelParams = [
     59       # "dyndbg=\"file drivers/base/firmware_loader/main.c +fmp\""
     60       # "dyndbg=\"file drivers/gpu/drm/panel/msm8953-generated/panel-boe-bs052fhm-a00-6c01.c  +fmp\""
     61       # "dyndbg=\"file drivers/video/backlight/qcom-wled.c +fmp\""
     62     ];
     63 
     64     fileSystems."/boot" = {
     65       device = "/dev/disk/by-label/nixos-boot";
     66       fsType = "ext2";
     67     };
     68 
     69     # according to fdisk, /dev/mmcblk0p41 is 30469887-7471104=22998783
     70     # blocks, and if we let it get resized by whatever magic this is
     71     # (I'm assuming systemd-growfs), on the subsequent boot we'll get
     72     # an error
     73 
     74     # EXT4-fs (mmcblk0p41): bad geometry: block count 2883067 exceeds size of device (2874848 blocks)
     75 
     76     # in which neither number matches the reported size (they're both
     77     # about 10% of it). cool.
     78 
     79     boot.growPartition = lib.mkForce false;
     80 
     81     services.udev.extraRules = ''
     82       # unlock the gps engine
     83       SUBSYSTEM=="wwan", ENV{DEVNAME}=="/dev/wwan0qmi0", ENV{DEVTYPE}=="wwan_port", \
     84         RUN+="${pkgs.libqmi}/bin/qmicli -pd $env{DEVNAME} --loc-set-engine-lock=none"
     85     '';
     86 
     87     networking = {
     88       interfaces.wlan0.useDHCP = true;
     89       hostName = "biscuit";
     90       networkmanager = {
     91         enable = true;
     92         unmanaged = ["wlan0"];
     93       };
     94       useNetworkd = true;
     95       # requires nixpkgs 0deadd5baf (Dec 2024)
     96       modemmanager.enable = true;
     97       inherit (secrets) wireless;
     98     };
     99 
    100     services.openssh.enable = true;
    101 
    102     services.cage =
    103       let wlinit = pkgs.writeScript "wlinit" ''
    104         ${pkgs.wlr-randr}/bin/wlr-randr --output DSI-1 --scale 2
    105         exec ${saturn}/bin/saturn
    106       '';
    107       in {
    108         enable = true;
    109         program = wlinit;
    110         user = "dan";
    111       };
    112     systemd.services.cage-tty1 = {
    113       conflicts = [ "getty@tty1.service" ];
    114     };
    115     systemd.services."getty@tty1.service" = {
    116       enable = false;
    117       wantedBy = lib.mkForce []; # Ensures it isn't pulled in by other services
    118     };
    119     environment.systemPackages = with pkgs; [
    120       drm-framebuffer
    121       satellite
    122       wlr-randr
    123       maps
    124       qmi-nmea
    125     ];
    126     environment.sessionVariables = {
    127       GSK_RENDERER = "cairo"; # gl is crashing with Satellite app
    128     };
    129 
    130 
    131     users.users.dan = {
    132       isNormalUser = true;
    133       uid = 1000;
    134       extraGroups = [ "wheel" "libvirtd" "docker" "dialout" ];
    135       openssh.authorizedKeys.keys = import ../telent-nixos-config/users/dan/authorized-keys.nix;
    136     };
    137 
    138     users.users.root.openssh.authorizedKeys.keys = import ../telent-nixos-config/users/dan/authorized-keys.nix;
    139 
    140     hardware.opengl = {
    141       # enable = true; driSupport = true;
    142     };
    143     hardware.bluetooth.enable = true;
    144 
    145     systemd.services = {
    146       nmea-share = {
    147         wantedBy = [ "multi-user.target" ];
    148         serviceConfig = {
    149           ExecStart = ''
    150             ${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=0755
    151           '';
    152           Restart = "always";
    153           RestartSec = "2";
    154         };
    155       };
    156       rmtfs =
    157         # the four files in here are partition images:
    158         #  partlabel => filename
    159         #  modemst1  => modem_fs1
    160         #  modemst2  => modem_fs2
    161         #  fsc       => modem_fsc
    162         #  fsg       => modem_fsg
    163 
    164         let files = pkgs.runCommand "rmtfs" {} ''
    165           mkdir -p $out/lib/firmware
    166           cp ${./local/uncompressed-firmware/rmtfs}/* $out/lib/firmware
    167         '';
    168         in {
    169           wantedBy = [ "multi-user.target" ];
    170           serviceConfig = {
    171             # https://github.com/andersson/rmtfs/blob/7a5ae7e0a57be3e09e0256b51b9075ee6b860322/rmtfs.c#L507-L541
    172             ExecStart = "${pkgs.rmtfs}/bin/rmtfs -s -r -o ${files}/lib/firmware";
    173             Restart = "always";
    174             RestartSec = "10";
    175           };
    176         };
    177     };
    178 
    179   };
    180 }