{ description = "NixOS configuration for multiple hosts."; inputs = { # the Nix package repository # we track the nixos-unstable # branch on every machine nixpkgs = { url = "github:nixos/nixpkgs/nixos-unstable"; }; # secrets for nixos # because we dont want them ending # up in the world-readable Nix store sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; # secure boot for nixos # experimental lanzaboote = { url = "github:nix-community/lanzaboote"; inputs.nixpkgs.follows = "nixpkgs"; }; # StevenBlack's host lists # because we dont want PiHole hosts = { url = "github:StevenBlack/hosts"; inputs.nixpkgs.follows = "nixpkgs"; }; # service virtual machines for nixos # because we dont want to end up # running services on bare-metal svcvm = { url = "github:sotormd/svcvm"; }; # emacs text editor emacs = { url = "github:sotormd/emacs"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs: let # formatter # nixfmt-tree can take an entire directory formatter.x86_64-linux = inputs.nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree; formatter.aarch64-linux = inputs.nixpkgs.legacyPackages.aarch64-linux.nixfmt-tree; # helpers helpers = import ./helpers.nix; # additional lib functions lib = (import ./lib) // { inherit mkConfig; }; # flake-based mkConfig mkConfig = helpers.mkConfigBuilder { nixos = inputs.nixpkgs.lib.nixosSystem; flakeInputs = inputs; flakeSelf = inputs.self; flakeLib = inputs.nixpkgs.lib // lib; nonflake = false; }; # nixosConfigurations & nixosModules nixosConfigurations = helpers.nixosConfigurations { inherit mkConfig; }; inherit (helpers) nixosModules; in { inherit formatter lib nixosConfigurations nixosModules ; }; }