{
  lib,
  pkgs,
  config,
  ...
}:
let
  cfg = config.share.hardware.amd;
  pkgsVersion = pkgs;#.unstable;
in
{
  imports = [ ./options.nix ];

  config = lib.mkIf cfg.enable {
    boot = {
      kernelModules = [ "nct6775" ];
      kernelParams = [ (if cfg.enable then "amdgpu.ppfeaturemask=0xffffffff" else null) ];
    };

    # Configure programs
    programs.corectrl = {
      enable = cfg.corectrl.enable;
      package = pkgsVersion.corectrl;
    };

    # Configure environment
    environment = {
      # Force radv
      variables = {
        AMD_VULKAN_ICD = "RADV";
        STEAM_FORCE_DESKTOPUI_SCALING = "1.0";
        GDK_SCALE = "1";
      };
    };

    # Configure polkit
    security.polkit = lib.mkIf cfg.corectrl.enablePolkit {
      extraConfig = ''
        polkit.addRule(function(action, subject) {
          if ((action.id == "org.corectrl.helper.init" ||
              action.id == "org.corectrl.helperkiller.init") &&
              subject.local == true &&
              subject.active == true &&
              subject.isInGroup("${cfg.corectrl.polkitGroup}")) {
                  return polkit.Result.YES;
          }
        });
      '';
    };

    # nixpkg is broken so need to manually define
    systemd.services.lactd = lib.mkIf cfg.lact.enable {
      description = "AMDGPU Control Daemon";
      path = with pkgsVersion; [
        bash
        lact
      ];
      script = ''
        lact daemon
      '';
      wantedBy = [ "multi-user.target" ];
      after = [ "multi-user.target" ];
    };

    # Configure environment
    environment = {
      systemPackages = with pkgsVersion; lib.mkIf cfg.lact.enable [ lact ];
    };
  };
}
