# Copyright 2021 Louis Bettens
# 
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# 
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

{
  description = "guest NixOS images with minimal footprint";

  inputs.devshell.url = "github:numtide/devshell";
  inputs.flake-utils.url = "github:numtide/flake-utils";

  outputs = inputs@{ self, nixpkgs, devshell, flake-utils }:
    with flake-utils.lib;
    let
      overlay = import tool/overlay.nix;
    in
    {
      nixosModules.core = import ./core;
      nixosModules.declarative = import ./declarative inputs;
      inherit overlay;
      defaultTemplate = {
        description = "Example guest configurations";
        path = ./template;
      };
    } // eachDefaultSystem (system:
      let pkgs = import nixpkgs { inherit system; overlays = [ overlay ]; };
      in
      {
        packages.miniguest = pkgs.miniguest;
        defaultPackage = pkgs.miniguest;
        defaultApp = mkApp { drv = pkgs.miniguest; };
        devShell = devshell.legacyPackages.${system}.fromTOML ./devshell.toml;
        checks = import ./checks inputs system;
      });
}
