100 lines
2.7 KiB
Nix
100 lines
2.7 KiB
Nix
{
|
|
description = "deskOS - An easy to use, stable desktop operating system";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
} @ inputs: let
|
|
supportedSystems = [
|
|
"aarch64-darwin"
|
|
"aarch64-linux"
|
|
"x86_64-darwin"
|
|
"x86_64-linux"
|
|
];
|
|
|
|
# Function to generate a set based on supported systems:
|
|
forAllSystems = inputs.nixpkgs.lib.genAttrs supportedSystems;
|
|
|
|
# Attribute set of nixpkgs for each system:
|
|
nixpkgsFor = forAllSystems (system:
|
|
import inputs.nixpkgs {
|
|
inherit system;
|
|
config.allowUnfree = true;
|
|
});
|
|
in {
|
|
nixosConfigurations = {
|
|
installer = nixpkgs.lib.nixosSystem {
|
|
modules = [
|
|
"${nixpkgs}/nixos/modules/installer/cd-dvd/channel.nix"
|
|
./machines/installer
|
|
];
|
|
specialArgs = {inherit inputs;};
|
|
};
|
|
};
|
|
|
|
nixosModules.default = import ./modules/desk-os;
|
|
|
|
packages = forAllSystems (system: let
|
|
pkgs = nixpkgsFor.${system};
|
|
in {
|
|
default = self.packages.${system}.demo;
|
|
demo =
|
|
(inputs.nixpkgs.lib.nixosSystem {
|
|
inherit system;
|
|
modules = [
|
|
./modules/desk-os
|
|
(import ./machines/demo {inherit pkgs;})
|
|
];
|
|
})
|
|
.config
|
|
.system
|
|
.build
|
|
.vm;
|
|
|
|
installer-demo = pkgs.writeShellScript "installer-demo" ''
|
|
set -euo pipefail
|
|
disk=installer-demo-root.img
|
|
${pkgs.qemu}/bin/qemu-img create -f qcow2 "$disk" 80G
|
|
${pkgs.qemu}/bin/qemu-system-x86_64 \
|
|
-cpu host \
|
|
-enable-kvm \
|
|
-m 8G \
|
|
-vga virtio \
|
|
-display gtk,full-screen=on,grab-on-hover=on \
|
|
-bios ${pkgs.OVMF.fd}/FV/OVMF.fd \
|
|
-cdrom ${self.packages.${system}.installer-iso}/iso/*.iso \
|
|
-hda "$disk"
|
|
'';
|
|
|
|
installer-iso = inputs.self.nixosConfigurations.installer.config.system.build.isoImage;
|
|
});
|
|
|
|
apps = forAllSystems (system: {
|
|
default = self.apps.${system}.demo;
|
|
demo = let
|
|
clean-state-demo = nixpkgsFor.${system}.writeShellScriptBin "run" ''
|
|
${self.packages.${system}.demo}/bin/run-desk-os-demo-vm
|
|
# Remove disk image forcing demo VM to start with a clean state every time
|
|
if [ -f ./desk-os-demo.qcow2 ]; then
|
|
rm ./desk-os-demo.qcow2
|
|
fi
|
|
'';
|
|
in {
|
|
type = "app";
|
|
program = "${clean-state-demo}/bin/run";
|
|
};
|
|
|
|
installer-demo = {
|
|
type = "app";
|
|
program = "${self.packages.${system}.installer-demo}";
|
|
};
|
|
});
|
|
|
|
formatter = forAllSystems (system: nixpkgsFor.${system}.alejandra);
|
|
};
|
|
}
|