{
  description = "pagedMov's NixOS and Home Manager configuration";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    nur.url = "github:nix-community/NUR";
    hypr-contrib.url = "github:hyprwm/contrib";
    hyprpicker.url = "github:hyprwm/hyprpicker";
    stylix.url = "github:danth/stylix";

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

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

    hyprland = {
      type = "git";
      url = "https://github.com/hyprwm/Hyprland";
      submodules = true;
    };

    spicetify-nix = {
      url = "github:gerg-l/spicetify-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, home-manager, nixpkgs, nur, nixvim, stylix, ... } @ inputs:
    let
      system = "x86_64-linux";
      pkgs = import nixpkgs { inherit system; };
      username = "pagedmov";
    in {
      nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];

      # Home Manager configurations for each user/machine
      homeConfigurations = {
        oganessonHome = home-manager.lib.homeManagerConfiguration {
          inherit pkgs;
          extraSpecialArgs = {
            host = "oganesson";
            inherit self username inputs nur;
          };

          # Specific Home Manager config for oganesson
          modules = [
            ./hosts/desktop/home.nix
            ./modules/home
            stylix.homeManagerModules.stylix
          ];
        };

        mercuryHome = home-manager.lib.homeManagerConfiguration {
          inherit system;
          pkgs = pkgs;
          extraSpecialArgs = { inherit self inputs username; };

          # Specific Home Manager config for mercury
          configuration = import ./hosts/laptop/home.nix;
        };

        xenonHome = home-manager.lib.homeManagerConfiguration {
          inherit system;
          pkgs = pkgs;
          extraSpecialArgs = { inherit self inputs username; };

          # Specific Home Manager config for xenon
          configuration = import ./hosts/server/home.nix;
        };
      };

      nixosConfigurations = {
        oganesson = nixpkgs.lib.nixosSystem {
          specialArgs = {
            host = "oganesson";
            inherit self inputs username;
          };
          inherit system;
          modules = [
            ./hosts/desktop/config.nix
            ./modules/sys
            home-manager.nixosModules.home-manager
            stylix.nixosModules.stylix
            nixvim.nixosModules.nixvim
            nur.nixosModules.nur
          ];
        };

        mercury = nixpkgs.lib.nixosSystem {
          specialArgs = {
            host = "mercury";
            inherit self inputs username;
          };
          inherit system;
          modules = [
            ./hosts/laptop/config.nix
            ./modules/sys
            home-manager.nixosModules.home-manager
            stylix.nixosModules.stylix
            nixvim.nixosModules.nixvim
            nur.nixosModules.nur
          ];
        };

        xenon = nixpkgs.lib.nixosSystem {
          specialArgs = {
            host = "xenon";
            inherit self inputs username;
          };
          inherit system;
          modules = [
            ./hosts/server/config.nix
            ./modules/sys
            ./modules/server
            home-manager.nixosModules.home-manager
            stylix.nixosModules.stylix
            nixvim.nixosModules.nixvim
            nur.nixosModules.nur
          ];
        };

        installer = nixpkgs.lib.nixosSystem {
          specialArgs = {
            host = "installer";
            inherit self inputs;
          };
          inherit system;
          modules = [
            ./hosts/installer
            nixvim.nixosModules.nixvim
          ];
        };
      };
    };
}
