{ config, lib, pkgs, paths, self, keys, inputs, ... }: { # --- CORE HARDWARE (CM5 / RPi5) --- imports = [ inputs.nixos-uconsole.nixosModules.uconsole inputs.nixos-hardware.nixosModules.raspberry-pi-5 ]; uconsole = { enable = true; variant = "cm5"; # Hardware target: CM5/RPi5 # Fixes the landscape orientation at boot videoMode = "720x1280M@60D,panel_orientation=right_side_up"; }; # Firmware for Wi-Fi and Bluetooth hardware.enableRedistributableFirmware = true; hardware.raspberry-pi."5".apply-overlays-dtmerge.enable = true; # Enable GPU acceleration (VideoCore VII) hardware.graphics.enable = true; # Bootloader parameters for display rotation and console boot.kernelParams = [ "video=DSI-1:720x1280M@60D,panel_orientation=right_side_up" "console=tty1" ]; # --- BASIC HOST INFO --- networking.hostName = "uConsole"; networking.networkmanager.enable = true; time.timeZone = "America/Montreal"; i18n.defaultLocale = "en_CA.UTF-8"; # --- GPS DAEMON --- services.gpsd = { enable = true; devices = [ "/dev/ttyAMA0" ]; # Default port for RPi5/CM5 GPS nowait = true; }; # --- USER CONFIGURATION --- users.users.thierry = { isNormalUser = true; description = "Thierry"; extraGroups = [ "wheel" # Sudo "dialout" # Access to serial/HAM rigs "plugdev" # Access to USB SDRs "wireshark" # Packet capture without root "video" # Hardware acceleration access "networkmanager" ]; openssh.authorizedKeys.keys = [ keys.users.gortium.main keys.users.gortium.gitea ]; }; # --- INTERFACE (WAYLAND/SWAY) --- # Sway is recommended for the uConsole's low resources programs.sway = { enable = true; extraOptions = [ "--unsupported-gpu" ]; # Often needed for RPi }; # --- SOFTWARE TOOLKITS --- environment.systemPackages = with pkgs; [ # Base Tools (for your Doom Emacs environment) emacs-pgtk # Emacs with Wayland support git # Required for Doom Emacs / Flakes ripgrep # Fast searching for Emacs/CLI fd # Better find for Emacs htop # Resource monitor tmux # Terminal multiplexer neovim # Alternative editor # HAM RADIO (Digital Modes) js8call # Weak-signal keyboard messaging wsjtx # FT8, JT65, etc. fldigi # Digital modem (PSK, RTTY) pat # Winlink client (Use 'pat configure' after install) direwolf # Software TNC for APRS chirp # Radio programming hamlib # Rig control (rigctl) trustedqsl # LotW log signing # SDR + RF ANALYSIS sdrpp # Modern SDR GUI (Best for uConsole) gqrx # Classic SDR receiver rtl-sdr # Drivers for RTL2832U inspectrum # Offline signal analysis soapysdr-with-plugins # Hardware abstraction layer # LORA, MESH & RETICULUM meshtastic # CLI tools for Meshtastic nodes reticulum-network-stack # The RNS stack (rnsd, rnsh) nomadnet # Reticulum browser/messaging lxmf # Lightweight Mesh Exchange Protocol sidechannel-rns # Visual UI for Reticulum communication # HACKING & SECURITY (Kali-like suite) nmap # Port scanning metasploit # Exploitation framework aircrack-ng # Wi-Fi auditing kismet # Wireless sniffer (Essential for your Pi Zero project) bettercap # MITM and network attack tool wireshark # Protocol analyzer burpsuite # Web vulnerability scanner hashcat # Password recovery john # John the Ripper (password cracking) sqlmap # Automated SQL injection # GPS & OFFLINE MAPPING foxtrotgps # Lightweight map viewer (Perfect for small screens) viking # GPS data editor and map viewer gpsbabel # GPS data conversion marble # KDE Virtual Globe (supports offline tiles) ]; # Udev rules for SDR and Radio hardware access services.udev.packages = [ pkgs.rtl-sdr pkgs.librtlsdr ]; # Enable Wireshark privilege separation programs.wireshark.enable = true; # Enable OpenSSH services.openssh = { enable = true; settings.PermitRootLogin = "prohibit-password"; }; # System state version system.stateVersion = "23.11"; }