{
  config,
  lib,
  pkgs,
  mjallenThemeComputed,
  ...
}:
with lib;
let
  cfg = config.mjallen.programs.hyprland;

  # Pull from global theme options
  themeSize = config.mjallen.theme.gtk.size; # "standard" | "compact"
  themeAccent = config.mjallen.theme.gtk.accent; # "default" | ... | "all"
  themeTweak = config.mjallen.theme.gtk.tweak; # "normal" | "rimless" | "float" | "black"
  themeColor = config.mjallen.theme.gtk.color; # "light" | "dark"
  iconThemeVariant = config.mjallen.theme.icons.variant; # "default" | ... | "all"
  iconScheme = config.mjallen.theme.icons.scheme; # "default" | "nord" | "dracula" | ...

  # Cursor
  cursorTheme = "macOS";
  cursorThemePkg = pkgs.apple-cursor;
  cursorSize = 24;

  # GTK
  gtkTheme = mjallenThemeComputed.gtkTheme;
  gtkThemePkg = pkgs.colloid-gtk-theme.override {
    sizeVariants = [ themeSize ];
    colorVariants = [ themeColor ];
    themeVariants = [ themeAccent ];
    tweaks = [ themeTweak ];
  };

  # Icons
  iconTheme = mjallenThemeComputed.iconTheme;
  iconThemePkg = pkgs.colloid-icon-theme.override {
    schemeVariants = [ iconScheme ];
    colorVariants = [ iconThemeVariant ];
  };

  # Fonts
  fontName = "JetBrainsMono NFM";
  fontPackage = pkgs.nerd-fonts.jetbrains-mono;
  fontSize = 12;
in
{
  config = mkIf cfg.enable {
    home = {
      pointerCursor = {
        gtk.enable = true;
        package = cursorThemePkg;
        name = cursorTheme;
        size = cursorSize;
      };
    };

    dconf = {
      enable = true;
      settings = {
        "org/gnome/desktop/interface".color-scheme = "prefer-dark";
        "org/gnome/desktop/interface".cursor-theme = cursorTheme;
        "org/gnome/desktop/interface".gtk-theme = gtkTheme;
        "org/gnome/desktop/interface".icon-theme = iconTheme;
      };
    };

    gtk = {
      enable = true;

      cursorTheme = {
        name = cursorTheme;
        package = cursorThemePkg;
      };

      theme = {
        name = gtkTheme;
        package = gtkThemePkg;
      };

      iconTheme = {
        name = iconTheme;
        package = iconThemePkg;
      };

      gtk3.extraConfig = {
        gtk-application-prefer-dark-theme = true;
      };

      gtk4.extraConfig = {
        gtk-application-prefer-dark-theme = true;
      };

      font = {
        name = fontName;
        package = fontPackage;
        size = fontSize;
      };
    };
  };
}
