{ 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"; rhemawave.url = "git+https://codeberg.org/RhemaWave-Technologies/RhemaWave.git"; rhemawave-dev.url = "git+https://codeberg.org/RhemaWave-Technologies/RhemaWave.git?ref=dev"; nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main"; }; outputs = { self, nixpkgs, disko, nixos-facter-modules, rhemawave, rhemawave-dev, nixos-raspberrypi, ... }@inputs: let system = "x86_64-linux"; mkKioskSystem = { system, rhemawave, upgradeFlakeRef, extraModules ? [], diskModule, enableAutoUpgrade ? true, extraSpecialArgs ? {}}: nixpkgs.lib.nixosSystem { inherit system; specialArgs = { inherit rhemawave; inherit upgradeFlakeRef; } // extraSpecialArgs; modules = [ ./configuration.nix disko.nixosModules.disko diskModule nixos-facter-modules.nixosModules.facter { facter.reportPath = ./facter.json; } rhemawave.nixosModules.default ] ++ extraModules; }; mkRpiKioskSystem = { rhemawave, upgradeFlakeRef, extraModules ? [], enableAutoUpgrade ? true }: nixos-raspberrypi.lib.nixosSystem { specialArgs = { inherit rhemawave upgradeFlakeRef; inherit nixos-raspberrypi; }; 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 rhemawave.nixosModules.default { # system.autoUpgrade = { # enable = enableAutoUpgrade; # flake = upgradeFlakeRef; # dates = "*:00/10"; # allowReboot = true; # flags = [ "--refresh" ]; # }; 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.rhemawavekiosk = self.nixosConfigurations.rhemawavekiosk.config.system.build.toplevel; packages.x86_64-linux.rhemawavekiosk-dev = self.nixosConfigurations.rhemawavekiosk-dev.config.system.build.toplevel; packages.x86_64-linux.rhemawavekiosk-commercial = self.nixosConfigurations.rhemawavekiosk-commercial.config.system.build.toplevel; packages.x86_64-linux.rhemawavekiosk-android = self.nixosConfigurations.rhemawavekiosk-android.config.system.build.toplevel; nixosConfigurations = { rhemawavekiosk = mkKioskSystem { system = "x86_64-linux"; rhemawave = rhemawave; diskModule = ./disk-config.nix; upgradeFlakeRef = "git+https://codeberg.org/RhemaWave-Technologies/KioskConfig.git#rhemawavekiosk"; extraModules = []; }; rhemawavekiosk-dev = mkKioskSystem { system = "x86_64-linux"; rhemawave = rhemawave-dev; diskModule = ./disk-config.nix; upgradeFlakeRef = "git+https://codeberg.org/RhemaWave-Technologies/KioskConfig.git?ref=dev#rhemawavekiosk-dev"; extraModules = []; }; rhemawavekiosk-commercial = mkKioskSystem { system = "x86_64-linux"; rhemawave = rhemawave; diskModule = ./commercial-disk-config.nix; upgradeFlakeRef = "git+https://codeberg.org/RhemaWave-Technologies/KioskConfig.git#rhemawavekiosk-commercial"; extraModules = []; }; rhemawavekiosk-commercial-dev = mkKioskSystem { system = "x86_64-linux"; rhemawave = rhemawave; diskModule = ./commercial-disk-config.nix; upgradeFlakeRef = "git+https://codeberg.org/RhemaWave-Technologies/KioskConfig.git?ref=dev#rhemawavekiosk-commercial"; extraModules = []; }; rhemawavekiosk-android = mkKioskSystem { system = "x86_64-linux"; rhemawave = rhemawave; diskModule = ./disk-config.nix; upgradeFlakeRef = "git+https://codeberg.org/RhemaWave-Technologies/KioskConfig.git#rhemawavekiosk-android"; extraModules = [./rotated_display.nix ]; }; rhemawavekiosk-rpi = mkRpiKioskSystem { rhemawave = rhemawave; upgradeFlakeRef = "git+https://codeberg.org/RhemaWave-Technologies/KioskConfig.git#rhemawavekiosk-rpi"; }; rhemawavekiosk-rpi-dev = mkRpiKioskSystem { rhemawave = rhemawave-dev; upgradeFlakeRef = "git+https://codeberg.org/RhemaWave-Technologies/KioskConfig.git?ref=dev#rhemawavekiosk-rpi-dev"; }; usb-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.rhemawavekiosk ]; environment.etc."disko-config.nix".source = ./disk-config.nix; }) ]; }; commercial-usb-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.rhemawavekiosk-commercial ]; environment.etc."disko-config.nix".source = ./commercial-disk-config.nix; }) ]; }; 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.rhemawavekiosk-android ]; environment.etc."disko-config.nix".source = ./disk-config.nix; }) ]; }; 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.rhemawavekiosk-dev ]; environment.etc."disko-config.nix".source = ./disk-config.nix; }) ]; }; }; }; }