{
  description = "Nixos Config";

  inputs = {
    # Nixpkgs
    nixpkgs.url = "github:nixos/nixpkgs/release-24.11";
    nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";

    # NUR
    nur.url = "github:nix-community/NUR";

    # Home manager
    home-manager = {
      url = "github:nix-community/home-manager/release-24.11";
      inputs.nixpkgs.follows = "nixpkgs";
    };

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

    # Arion for docker
    arion = {
      url = "github:hercules-ci/arion/236f9dd82d6ef6a2d9987c7a7df3e75f1bc8b318";
    };

    # nix-bitcoin
    nix-bitcoin = {
      url = "github:fort-nix/nix-bitcoin/nixos-24.11";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    lnbits = {
      url = "github:lnbits/lnbits/v0.12.12";
    };

    # Nix colors
    nix-colors.url = "github:misterio77/nix-colors";

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

    impermanence = {
      url = "github:nix-community/impermanence";
    };

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

    nix-secrets = {
      url = "git+ssh://git@git.bitlab21.com/sam/nix-secrets.git";
      inputs = {};
    };
  };

  outputs = {
    self,
    nixpkgs,
    home-manager,
    ...
  } @ inputs: let
    inherit (self) outputs;
    systems = [
      "x86_64-linux"
    ];
    forAllSystems = nixpkgs.lib.genAttrs systems;
    inherit (nixpkgs) lib;
    configVars = import ./vars {inherit inputs lib;};
    specialArgs = {
      inherit
        inputs
        outputs
        configVars
        ;
    };
  in {
    packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system});
    overlays = import ./overlays {inherit inputs;};
    nixosModules = import ./modules/nixos;
    homeManagerModules = import ./modules/home-manager;

    # System level configs
    nixosConfigurations = {
      bootstrap = nixpkgs.lib.nixosSystem {
        inherit specialArgs;
        modules = [
          ./hosts/bootstrap
        ];
      };
      sparky = nixpkgs.lib.nixosSystem {
        inherit specialArgs;
        modules = [
          ./hosts/sparky
          home-manager.nixosModules.home-manager
          {
            home-manager.extraSpecialArgs = specialArgs;
          }
        ];
      };
      semita = nixpkgs.lib.nixosSystem {
        inherit specialArgs;
        modules = [
          ./hosts/semita
          home-manager.nixosModules.home-manager
          {
            home-manager.extraSpecialArgs = specialArgs;
          }
        ];
      };
      merlin = nixpkgs.lib.nixosSystem {
        inherit specialArgs;
        modules = [
          ./hosts/merlin
          home-manager.nixosModules.home-manager
          {
            home-manager.extraSpecialArgs = specialArgs;
          }
        ];
      };
      citadel = nixpkgs.lib.nixosSystem {
        inherit specialArgs;
        modules = [
          ./hosts/citadel

          home-manager.nixosModules.home-manager
          {
            home-manager.extraSpecialArgs = specialArgs;
          }
        ];
      };
    };
  };
}