dot.nix/iso/flake.nix
Chris Toph aab3a6fd34
Some checks are pending
Build NixOS ISOs / build-iso (arm, desktop, ubuntu-latest-arm64) (push) Waiting to run
Build NixOS ISOs / build-iso (arm, server, ubuntu-latest-arm64) (push) Waiting to run
Build NixOS ISOs / build-iso (x86, desktop, ubuntu-latest) (push) Waiting to run
Build NixOS ISOs / build-iso (x86, server, ubuntu-latest) (push) Waiting to run
Build NixOS ISOs / create-release (push) Blocked by required conditions
Add GitHub Actions workflow for building ISOs and update iso flake.nix for package generation
2025-06-16 02:45:51 -04:00

115 lines
3 KiB
Nix

{
description = "NixOS ISO configurations based on dot.nix";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
dot-nix = {
url = "github:tophc7/dot.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
dot-nix,
...
}@inputs:
let
inherit (nixpkgs) lib;
# Merge inputs with dot-nix inputs
allInputs = inputs // dot-nix.inputs;
# Define supported systems
ARM = "aarch64-linux";
X86 = "x86_64-linux";
systems = [
ARM
X86
];
# Helper to create ISO configurations
mkIso =
name: system: modules:
lib.nixosSystem {
inherit system;
specialArgs = {
inputs = allInputs; # Pass merged inputs as 'inputs'
outputs = dot-nix.outputs; # Pass main flake outputs
inherit system;
isARM = system == ARM;
lib = nixpkgs.lib.extend (
self: super: {
custom = import "${dot-nix}/lib" { inherit (nixpkgs) lib; };
}
);
};
modules = [
"${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
./not-secrets.nix
./default.nix
] ++ modules;
};
# Generate configurations for all system/type combinations
mkConfigurations =
let
configs = lib.flatten (
lib.map (
system:
let
archSuffix = if system == ARM then "arm" else "x86";
in
[
{
name = "server-iso-${archSuffix}";
inherit system;
modules = [ ./dist/server.nix ];
}
{
name = "desktop-iso-${archSuffix}";
inherit system;
modules = [ ./dist/desktop.nix ];
}
]
) systems
);
in
lib.listToAttrs (
lib.map (config: {
name = config.name;
value = mkIso config.name config.system config.modules;
}) configs
);
# Generate packages per system - each system only exposes its own packages
mkPackages =
system:
let
archSuffix = if system == ARM then "arm" else "x86";
in
{
"server-iso-${archSuffix}" =
self.nixosConfigurations."server-iso-${archSuffix}".config.system.build.isoImage;
"desktop-iso-${archSuffix}" =
self.nixosConfigurations."desktop-iso-${archSuffix}".config.system.build.isoImage;
};
in
{
nixosConfigurations = mkConfigurations;
# Each system only exposes packages it can build
packages = {
"${X86}" = mkPackages X86;
"${ARM}" = mkPackages ARM;
};
# For convenience - all systems get all configs
inherit (dot-nix.outputs) overlays;
};
}