{
  config,
  pkgs,
  lib,
  ...
}: let
  inherit (config.rose-pine) sources;

  cfg = config.services.mako.rose-pine;
  enable = cfg.enable && config.services.mako.enable;

  themeName =
    if (cfg.flavor == "main")
    then "rose-pine"
    else "rose-pine-${cfg.flavor}";
  theme = lib.rp.fromINI (sources.mako + "/theme/${themeName}.theme");

  # Settings that need to be extracted and put in extraConfig
  extraConfigAttrs = lib.attrsets.getAttrs ["urgency=high"] theme;
in {
  options.services.mako.rose-pine =
    lib.rp.mkRosePineOpt {name = "mako";};

  # Will cause infinite recursion if config.services.mako is directly set as a
  # whole.
  config.services.mako = lib.mkIf enable {
    backgroundColor = theme.background-color;
    textColor = theme.text-color;
    borderColor = theme.border-color;
    progressColor = theme.progress-color;
    extraConfig = builtins.readFile (
      (pkgs.formats.ini {}).generate "mako-extra-config" extraConfigAttrs
    );
  };
}
