{
  description = "My NixOS desktop and server configs";

  inputs = {

    # NixOS official package source, using the nixos-23.11 branch here
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    nixos-hardware.url = "github:nixos/nixos-hardware";

    # Declarative dotfile management
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    niri = {
      url = "github:sodiboo/niri-flake";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    # Declarative partitioning and formatting
    disko = {
      url = "github:nix-community/disko";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    stylix = {
      url = "github:danth/stylix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nixvim = {
      url = "github:nix-community/nixvim";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    zen = {
      url = "github:MarceColl/zen-browser-flake";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    jovian = {
      url = "github:Jovian-Experiments/Jovian-NixOS";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    # Secrets management. See ./docs/secretsmgmt.md
    sops-nix = {
      url = "github:mic92/sops-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

  };

  outputs = { nixpkgs, ... }@inputs:
    let
      lib = nixpkgs.lib;
    in
    {
      nixosConfigurations = {

        Lenni =
          let
            system = "x86_64-linux";
          in
          lib.nixosSystem {

            specialArgs = {
              hostname = "Lenni";
              inherit inputs;
              inherit system;
            };

            modules = [
              inputs.home-manager.nixosModules.home-manager
              {
                home-manager.useGlobalPkgs = true;
                home-manager.useUserPackages = true;
              }
              inputs.niri.nixosModules.niri
              inputs.sops-nix.nixosModules.sops
              inputs.disko.nixosModules.disko
              inputs.stylix.nixosModules.stylix
              inputs.nixvim.nixosModules.nixvim
              inputs.nixos-hardware.nixosModules.framework-12th-gen-intel
              ./hosts/Lenni
              ./pkgs
            ];

          };

        Puenktchen =
          let
            system = "x86_64-linux";
          in
          lib.nixosSystem {

            specialArgs = {
              hostname = "Puenktchen";
              inherit inputs;
              inherit system;
            };

            modules = [
              inputs.home-manager.nixosModules.home-manager
              {
                home-manager.useGlobalPkgs = true;
                home-manager.useUserPackages = true;
              }
              inputs.niri.nixosModules.niri
              inputs.sops-nix.nixosModules.sops
              inputs.disko.nixosModules.disko
              inputs.stylix.nixosModules.stylix
              inputs.nixvim.nixosModules.nixvim
              inputs.nixos-hardware.nixosModules.common-cpu-amd
              inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
              inputs.nixos-hardware.nixosModules.common-cpu-amd-zenpower
              ./hosts/Puenktchen
              ./pkgs
            ];

          };

        Anton =
          let
            system = "x86_64-linux";
          in
          lib.nixosSystem {

            specialArgs = {
              hostname = "Anton";
              inherit inputs;
              inherit system;
            };

            modules = [
              inputs.home-manager.nixosModules.home-manager
              {
                home-manager.useGlobalPkgs = true;
                home-manager.useUserPackages = true;
              }
              inputs.niri.nixosModules.niri
              inputs.sops-nix.nixosModules.sops
              inputs.disko.nixosModules.disko
              inputs.stylix.nixosModules.stylix
              inputs.nixvim.nixosModules.nixvim
              inputs.nixos-hardware.nixosModules.common-cpu-amd
              inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
              inputs.nixos-hardware.nixosModules.common-cpu-amd-zenpower
              ./hosts/Anton
              ./pkgs
            ];

          };

        Lillie =
          let
            system = "x86_64-linux";
          in
          lib.nixosSystem {

            specialArgs = {
              hostname = "Lillie";
              inherit inputs;
              inherit system;
            };

            modules = [
              inputs.home-manager.nixosModules.home-manager
              {
                home-manager.useGlobalPkgs = true;
                home-manager.useUserPackages = true;
              }
              inputs.niri.nixosModules.niri
              inputs.sops-nix.nixosModules.sops
              inputs.disko.nixosModules.disko
              inputs.stylix.nixosModules.stylix
              inputs.nixvim.nixosModules.nixvim
              inputs.jovian.nixosModules.default
              ./hosts/Lillie
              ./pkgs
            ];

          };

      };
    };
}