{
  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";
    };

    # 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, ... }@attrs: 
  let
      lib = nixpkgs.lib;
  in
  {
    nixosConfigurations = {

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

        specialArgs = {
          hostname = "Lenni";
          type = "desktop";
	        inherit attrs;
          inherit system;
        };

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

      };

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

        specialArgs = {
          hostname = "Puenktchen";
          type = "desktop";
      	  inherit attrs;
          inherit system;
        };

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

      };

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

        specialArgs = {
          hostname = "Anton";
          type = "server";
      	  inherit attrs;
          inherit system;
        };

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

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

        specialArgs = {
          hostname = "Lillie";
          type = "desktop";
	        inherit attrs;
          inherit system;
        };

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

      };

    };
  };
}