{
  description = "mehbark's NixOS configuration";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";

    fh.url = "https://flakehub.com/f/DeterminateSystems/fh/*.tar.gz";

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

    flake-utils.url = "github:numtide/flake-utils";

    nixos-generators.url = "github:nix-community/nixos-generators";
    nixos-generators.inputs.nixpkgs.follows = "nixpkgs";

    hyprland.url = "github:hyprwm/Hyprland";

    pesterchum.url = "git+https://g.pyrope.net/pesterchum";
    pesterchum.inputs.nixpkgs.follows = "nixpkgs";

    # for l8r :::;)
    #homeage.url = "github:jordanisaacs/homeage";
    #homeage.inputs.nixpkgs.follows = "nixpkgs";

    nix-darwin.url = "github:LnL7/nix-darwin";
    nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = inputs@{
    self,
    nixpkgs,
    home-manager,
    flake-utils,
    nixos-generators,
    hyprland,
    fh,
    pesterchum,
    nix-darwin,
    ...
  }:
  let
    # :(
    # could do like nix-i3, nix-hyprland but that would be LAME
    conf = (import ./build.conf.nix) { wm = "plasma"; };
    modules = [
      ((import ./configuration.nix) conf)
      home-manager.nixosModules.home-manager
      {
        home-manager.useGlobalPkgs = true;
        home-manager.useUserPackages = true;
        home-manager.users.mbk = (import ./home.nix) {
          inherit conf;
          more-packages = [
            pesterchum.packages.x86_64-linux.default
          ];
        };
      }
      {
        environment.systemPackages = [ fh.packages.x86_64-linux.default ];
      }
      # V evil V
      # (nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")
    ];
  in
  {
    nixosConfigurations = {
      nix = nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        inherit modules;
        specialArgs = { inherit inputs; };
      };
    };

    homeConfigurations.mbk = home-manager.lib.homeManagerConfiguration {
      pkgs = nixpkgs.legacyPackages.x86_64-linux;

      modules = if conf.wm == "hyprland" then modules ++ [
        hyprland.homeManagerModules.default
        {wayland.windowManager.hyprland.enable = true;}
      ] else modules;
    };

    darwinConfigurations = {
      mac = nix-darwin.lib.darwinSystem {
        modules = [
          ./darwin.nix
          home-manager.darwinModules.home-manager
          {
            home-manager.useGlobalPkgs = true;
            home-manager.useUserPackages = true;
            home-manager.users.clark = import ./home.nix {inherit conf; darwin = true;};
          }
        ];
        specialArgs = { inherit inputs; };
      };
    };

    # meh, doesn't rly work
    packages.x86_64-linux = {
      iso = nixos-generators.nixosGenerate {
        system = "x86_64-linux";
        modules = modules ++ [{
          nix.registry.nixpkgs.flake = nixpkgs;
          virtualisation.diskSize = 20 * 1024;
        }];
        format = "iso";
      };
    };

    packages.aarch64-darwin = {
      iso = nixos-generators.nixosGenerate {
        system = "x86_64-linux";
        modules = modules ++ [{
          nix.registry.nixpkgs.flake = nixpkgs;
          virtualisation.diskSize = 20 * 1024;
        }];
        format = "iso";
      };
    };
  };
}