# Flake

/**
  Entry point of NixOS configuration

  - Defines external sources and locking their commit, which gives us __purity__.
  - Declares ready-to-use configurations (e.g. development shells, packages, etc.)

  Essentially, `flake.nix` is like `Cargo.toml` in Rust or `package.json` in Node.js, but for an entire operating system.
*/
{ inputs, lib, ... }:
{
  imports = [
    inputs.flake-file.flakeModules.default
    inputs.flake-file.flakeModules.allfollow
    ../devShells
    ../docs
    ../hosts
  ];

  systems = [ "x86_64-linux" ];

  flake-file.inputs = import ./inputs { inherit lib; };
  flake-file.outputs = "inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } ./flake";
  flake-file.description = "SkyOS :: Ultimate NixOS flake";
  flake-file.do-not-edit = ''
    # Generated using github:vic/flake-file.
    # This file is not supposed to be edited manually.
    # Run `nix run .#write-flake` to regenerate it
  '';

  flake-file.prune-lock.enable = true;
}
