{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; nixos-facter-modules.url = "github:numtide/nixos-facter-modules"; radiantwave.url = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/radiantwave.git?ref=main"; radiantwave-legacy.url = "git+https://fb62d6c0cb4e2ca3b7ed6e08b4942c29ed071cef@gitea.radiantwavetech.com/RadiantWaveTech/radiantwave-legacy.git?ref=main"; nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main"; }; outputs = { self, nixpkgs, disko, nixos-facter-modules, radiantwave, radiantwave-legacy, nixos-raspberrypi, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; # Plymouth theme: renders the RadiantWave SVG to a full-HD splash.png # at build time (librsvg), so the theme is hermetic and resolution- # independent. The .plymouth file's /usr paths are rewritten to $out # (the NixOS module's initrd fixup rewrites store paths again). radiantwavePlymouth = pkgs.stdenv.mkDerivation { pname = "radiantwave-plymouth"; version = "1.0.0"; nativeBuildInputs = [ pkgs.librsvg ]; src = ./assets/RWT-Circular-Color-ForOnDark.svg; dontUnpack = true; buildPhase = '' mkdir -p $out/share/plymouth/themes/radiantwave rsvg-convert \ --keep-aspect-ratio \ --background-color=#111318 \ --width=3840 \ --height=2160 \ --output=$out/share/plymouth/themes/radiantwave/splash.png \ $src sed 's,/usr/,'"$out"'/,g' ${./plymouth-theme/radiantwave.plymouth} \ > $out/share/plymouth/themes/radiantwave/radiantwave.plymouth cp ${./plymouth-theme/radiantwave.script} \ $out/share/plymouth/themes/radiantwave/radiantwave.script ''; }; mkKioskSystem = { system, radiantwave, upgradeFlakeRef, extraModules ? [], diskModule, extraSpecialArgs ? {}}: nixpkgs.lib.nixosSystem { inherit system; specialArgs = { inherit radiantwave; inherit upgradeFlakeRef; inherit radiantwavePlymouth; } // extraSpecialArgs; modules = [ { nixpkgs.config.allowUnfree = true; } ./configuration.nix disko.nixosModules.disko diskModule nixos-facter-modules.nixosModules.facter { facter.reportPath = ./facter.json; } radiantwave.nixosModules.default ] ++ extraModules; }; mkRpiKioskSystem = { radiantwave, upgradeFlakeRef, extraModules ? [] }: nixos-raspberrypi.lib.nixosSystem { specialArgs = { inherit radiantwave upgradeFlakeRef; inherit nixos-raspberrypi; inherit radiantwavePlymouth; }; modules = [ ({ ... }: { imports = with nixos-raspberrypi.nixosModules; [ sd-image raspberry-pi-5.base raspberry-pi-5.page-size-16k raspberry-pi-5.display-vc4 ]; }) ./configuration.nix radiantwave.nixosModules.default { boot.loader.systemd-boot.enable = nixpkgs.lib.mkForce false; boot.loader.efi.canTouchEfiVariables = nixpkgs.lib.mkForce false; boot.loader.raspberry-pi.bootloader = "kernel"; nix.settings.extra-substituters = [ "https://nixos-raspberrypi.cachix.org" ]; nix.settings.extra-trusted-public-keys = [ "nixos-raspberrypi.cachix.org-1:4iMO9LXa8BqhU+Rpg6LQKiGa2lsNh/j2oiYLNOQ5sPI=" ]; } ] ++ extraModules; }; in { packages.x86_64-linux.radiantwavekiosk = self.nixosConfigurations.radiantwavekiosk.config.system.build.toplevel; packages.x86_64-linux.radiantwavekiosk-dev = self.nixosConfigurations.radiantwavekiosk-dev.config.system.build.toplevel; packages.x86_64-linux.radiantwavekiosk-commercial = self.nixosConfigurations.radiantwavekiosk-commercial.config.system.build.toplevel; packages.x86_64-linux.radiantwavekiosk-android = self.nixosConfigurations.radiantwavekiosk-android.config.system.build.toplevel; # Kiosk nixosConfigurations = { radiantwavekiosk = mkKioskSystem { system = "x86_64-linux"; radiantwave = radiantwave-legacy; diskModule = ./disk-config.nix; upgradeFlakeRef = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/KioskConfig.git#radiantwavekiosk"; extraModules = []; }; # Kiosk-dev radiantwavekiosk-dev = mkKioskSystem { system = "x86_64-linux"; radiantwave = radiantwave; diskModule = ./disk-config.nix; upgradeFlakeRef = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/KioskConfig.git?ref=dev#radiantwavekiosk-dev"; extraModules = []; }; # Commercial radiantwavekiosk-commercial = mkKioskSystem { system = "x86_64-linux"; radiantwave = radiantwave-legacy; diskModule = ./commercial-disk-config.nix; upgradeFlakeRef = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/KioskConfig.git#radiantwavekiosk-commercial"; extraModules = []; }; # Commercial-dev radiantwavekiosk-commercial-dev = mkKioskSystem { system = "x86_64-linux"; radiantwave = radiantwave; diskModule = ./commercial-disk-config.nix; upgradeFlakeRef = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/KioskConfig.git?ref=dev#radiantwavekiosk-commercial"; extraModules = []; }; # Kiosk - rotated screen for android displays radiantwavekiosk-android = mkKioskSystem { system = "x86_64-linux"; radiantwave = radiantwave-legacy; diskModule = ./disk-config.nix; upgradeFlakeRef = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/KioskConfig.git#radiantwavekiosk-android"; extraModules = [./rotated_display.nix ]; }; # Raspberry pi 5 radiantwavekiosk-rpi = mkRpiKioskSystem { radiantwave = radiantwave-legacy; upgradeFlakeRef = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/KioskConfig.git#radiantwavekiosk-rpi"; }; # Raspberry pi 5 dev radiantwavekiosk-rpi-dev = mkRpiKioskSystem { radiantwave = radiantwave; upgradeFlakeRef = "git+https://gitea.radiantwavetech.com/RadiantWaveTech/KioskConfig.git?ref=dev#radiantwavekiosk-rpi-dev"; }; # === USB Images === # Kiosk ISO kiosk-iso = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inherit inputs; inherit self; }; modules = [ "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" disko.nixosModules.disko ./iso-config.nix ./disk-config.nix ({ pkgs, ... }: { environment.systemPackages = [ disko.packages.${system}.default ]; isoImage.storeContents = [ self.packages.x86_64-linux.radiantwavekiosk ]; environment.etc."disko-config.nix".source = ./disk-config.nix; }) ]; }; # Commercial iso commercial-iso = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inherit inputs; inherit self; }; modules = [ "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" disko.nixosModules.disko ./commercial-iso-config.nix ./commercial-disk-config.nix ({ pkgs, ... }: { environment.systemPackages = [ disko.packages.${system}.default ]; isoImage.storeContents = [ self.packages.x86_64-linux.radiantwavekiosk-commercial ]; environment.etc."disko-config.nix".source = ./commercial-disk-config.nix; }) ]; }; # kiosk rotated screen ISO android-iso = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inherit inputs; inherit self; }; modules = [ "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" disko.nixosModules.disko ./iso-config.nix ./disk-config.nix ({ pkgs, ... }: { environment.systemPackages = [ disko.packages.${system}.default ]; isoImage.storeContents = [ self.packages.x86_64-linux.radiantwavekiosk-android ]; environment.etc."disko-config.nix".source = ./disk-config.nix; }) ]; }; # Kiosk iso development branch dev-iso = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = { inherit inputs; inherit self; }; modules = [ "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" disko.nixosModules.disko ./dev-iso.nix ./disk-config.nix ({ pkgs, ... }: { environment.systemPackages = [ disko.packages.${system}.default ]; isoImage.storeContents = [ self.packages.x86_64-linux.radiantwavekiosk-dev ]; environment.etc."disko-config.nix".source = ./disk-config.nix; }) ]; }; }; }; }