{
  config,
  pkgs,
  lib,
  inputs,
  ...
}:

let
  generate-colors =
    colors: with colors; ''
      	$base00: #${base00};
      	$base01: #${base01};
      	$base02: #${base02};
      	$base03: #${base03};
      	$base04: #${base04};
      	$base05: #${base05};
      	$base06: #${base06};
      	$base07: #${base07};
      	$base08: #${base08};
      	$base09: #${base09};
      	$base0A: #${base0A};
      	$base0B: #${base0B};
      	$base0C: #${base0C};
      	$base0D: #${base0D};
      	$base0E: #${base0E};
      	$base0F: #${base0F};
      	'';
in
{
  options.modules.ags = {
    enable = lib.mkEnableOption "Aylur's GTK Shell with optional Stylix support";
    full = lib.mkOption {
      type = lib.types.bool;
      default = false;
      description = "Enable all components (AstalBattery, AstalPowerProfiles etc.)";
    };
  };

  config = lib.mkIf config.modules.ags.enable {
    programs.ags = {
      enable = true;
      extraPackages =
        if config.modules.ags.full then
          with inputs.ags.packages.${pkgs.system};
          [
            apps
            battery
            bluetooth
            greet
            hyprland
            mpris
            network
            notifd
            powerprofiles
            tray
            wireplumber
          ]
        else
          [ ];
    };

    home.file.".config/theme_colors.scss".text =
      if config.modules.stylix.enable then generate-colors config.lib.stylix.colors else null;
  };
}
