{
  description = "haoxiangliew's nixos-unstable config";

  inputs = {
    nixos-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
    lanzaboote.url = "github:nix-community/lanzaboote";
    home-manager.url = "github:nix-community/home-manager";
    agenix.url = "github:ryantm/agenix";
    fenix.url = "github:nix-community/fenix";
    emacs-overlay.url =
      "github:nix-community/emacs-overlay/c9764e76968428e466a9c4c5f11f48f510fb5c75";
    emacs-lsp-booster.url = "github:slotThe/emacs-lsp-booster-flake";
    neovim-nightly.url = "github:nix-community/neovim-nightly-overlay";
  };

  outputs =
    inputs@{ self, nixos-unstable, lanzaboote, home-manager, agenix, ... }:
    let user = "haoxiangliew";
    in {
      nixosConfigurations = {
        framework = inputs.nixos-unstable.lib.nixosSystem {
          system = "x86_64-linux";
          modules = [
            lanzaboote.nixosModules.lanzaboote
            ./hardware-configuration.nix
            ./overlays.nix
            ./hardware/framework.nix
            ./hosts/framework.nix

            ./modules/security.nix
            ./modules/secure-boot.nix
            ./modules/quiet-boot.nix
            ./modules/nix-core.nix
            ./modules/environments/gnome.nix
            ./modules/fonts.nix
            ./users/${user}.nix

            home-manager.nixosModules.home-manager
            {
              home-manager = {
                useGlobalPkgs = true;
                useUserPackages = true;
                extraSpecialArgs = inputs;
                sharedModules = [ agenix.homeManagerModules.default ];
                users.${user} = {
                  imports = [
                    ./home-manager/framework-home.nix
                    ./modules/environments/gnome-home.nix
                  ];
                };
              };
            }
          ];
          specialArgs = { inherit inputs; };
        };
      };
    };
}
