{
  description = "PatOS is a minimal, immutable Linux distribution specialized for the Patagia Platform.";

  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  };

  outputs =
    {
      self,
      flake-utils,
      nixpkgs,
    }:
    flake-utils.lib.eachDefaultSystem (
      system:
      let
        pkgs = import nixpkgs { inherit system; };
      in
      {
        packages = {
          default = self.packages.${system}.image;
          image = pkgs.writeShellScriptBin "image" ''
            echo "make UKI..."

            echo ${self.packages.${system}.kernel.kernel}/bzImage
            mkdir -p patos/efi/boot
            ${self.packages.${system}.systemd.out}/usr/bin/ukify build \
            --linux ${self.packages.${system}.kernel.kernel}/bzImage \
            --initrd ./initrd.gz \
            --cmdline "console=ttyS0" \
            -o patos/efi/boot/bootx64.efi
          '';

          kernel = pkgs.callPackage ./kernel { };
          glibc = pkgs.callPackage ./glibc { };
          systemd = pkgs.callPackage ./systemd { };
          dbus-broker = pkgs.callPackage ./dbus-broker { };

          qemu-uefi-tpm = pkgs.callPackage ./utils/qemu-uefi-tpm.nix { inherit pkgs; };

          mkinitrd = pkgs.callPackage ./utils/mkinitrd.nix {
            inherit pkgs;
            inherit system;
            inherit self;
          };
        };

        checks = {
          simple-test = pkgs.runCommand "simple-test" { } ''
            ${self.packages.${system}.default}/bin/my-program
            touch $out
          '';
        };

        formatter = pkgs.nixpkgs-fmt;

        devShells.default = pkgs.mkShell {
          buildInputs = with pkgs; [
            erofs-utils
            just
            nixd
            nixfmt-rfc-style
            squashfs-tools-ng
            self.packages.${system}.qemu-uefi-tpm
            self.packages.${system}.mkinitrd
          ];
        };

      }
    );
}