{
    description = "NixOS Configuration";

    inputs = {
        # General NixOS config
        nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
        nixpkgs-24-11.url = "github:NixOS/nixpkgs/nixos-24.11";
        # Nixpkgs index for command-not-found support
        nix-index-database = {
            url = "github:nix-community/nix-index-database";
            inputs.nixpkgs.follows = "nixpkgs";
        };
        # NixOS Grub Themes (hyperfluent)
        nixos-grub-themes = {
            url = "github:jeslie0/nixos-grub-themes";
            inputs.nixpkgs.follows = "nixpkgs";
        };
        # SDDM Sugar Candy
        sddm-sugar-candy-nix = {
            url = "github:Zhaith-Izaliel/sddm-sugar-candy-nix";
            inputs.nixpkgs.follows = "nixpkgs";
        };
        # Home Manager + Plasma
        home-manager = {
            url = "github:nix-community/home-manager/master";
            inputs.nixpkgs.follows = "nixpkgs";
        };
        plasma-manager = {
            url = "github:nix-community/plasma-manager";
            inputs.nixpkgs.follows = "nixpkgs";
            inputs.home-manager.follows = "home-manager";
        };
        # Firefox Nightly + Addons
        firefox-nightly = {
            url = "github:nix-community/flake-firefox-nightly";
            inputs.nixpkgs.follows = "nixpkgs";
        };
        firefox-addons = {
            type = "gitlab";
            owner = "rycee";
            repo = "nur-expressions";
            dir = "/pkgs/firefox-addons";
            
            inputs.nixpkgs.follows = "nixpkgs";
        };
        # VSCode extensions
        vscode-extensions = {
            url = "github:nix-community/nix-vscode-extensions";
            inputs.nixpkgs.follows = "nixpkgs";
        };
    };

    outputs = inputs@{ nixpkgs, home-manager, plasma-manager, nix-index-database, ... }: let
        system = "x86_64-linux";
        pkgs = nixpkgs.legacyPackages.${system};
        secrets = import ./secrets.nix;
    in {
        nixosConfigurations.ty-nixos = nixpkgs.lib.nixosSystem {
            inherit system;

            modules = [
                ./hosts/laptop

                # Better command-not-found
                nix-index-database.nixosModules.nix-index
                { programs.nix-index-database.comma.enable = true; }

                # Home manager
                home-manager.nixosModules.home-manager
                ./home-manager
            ];

            specialArgs = {
                inherit inputs system secrets;
            };
        };

        # Add home manager configuration compatibility to the main flake
        homeConfigurations."ty" = home-manager.lib.homeManagerConfiguration {
            inherit pkgs;

            # Specify your home configuration modules here, for example,
            # the path to your home.nix.
            modules = [ 
                plasma-manager.homeManagerModules.plasma-manager
                ./home-manager/custom-modules
                ./home-manager/home.nix
            ];

            extraSpecialArgs = {
                inherit inputs system secrets;
            };
        };
    };
}