{
  lib,
  config,
  system,
  pkgs,
  ...
}:
let
  inherit (lib) mkEnableOption mkIf;
  inherit (lib.snowfall.system) is-darwin;

  cfg = config.marleyos.programs.wezterm;
  inherit (config.marleyos.theme) colors;

  isGenericLinux = config.targets.genericLinux.enable;
  isNotNixOS = isGenericLinux || (is-darwin system);
in
{
  options.marleyos.programs.wezterm.enable = mkEnableOption "wezterm";

  config = mkIf cfg.enable {
    programs.wezterm = {
      enable = true;

      # Generic linux: NixGL makes Wezterm shit the bed for some reason.
      # macOS: Prefer brew cask so a proper Applications shortcut is made.
      package = mkIf isNotNixOS pkgs.emptyDirectory;

      # TODO: create `local config` & return it seperately, so other modules can
      # insert config in the middle
      extraConfig =
        let
          # TODO: Set this in marleyos.theme
          fonts = config.fonts.fontconfig.defaultFonts.monospace;
        in
        # lua
        ''
          local config = wezterm.config_builder()

          config.enable_tab_bar = false

          config.color_scheme = "${colors.base}"

          config.font = wezterm.font_with_fallback({
            {
              family = "Maple Mono NF",
              -- TODO: Set this in marleyos.theme
              harfbuzz_features = {
                "cv02",
                "ss01",
                "ss02",
                "ss03",
                "ss04",
                "ss05",
              }
            },
            ${toString (map (font: "{ family = \"${font}\" },") fonts)}
            { family = "FairiesevkaTerm Nerd Font Mono" },
            {
              family = "FiraCode Nerd Font",
              harfbuzz_features = {
                "cv02",
                "cv06",
                "ss01",
                "cv14",
                "onum",
                "ss04",
                "cv18",
                "cv31",
                "cv30",
                "cv25",
                "cv26",
                "cv32",
                "ss06",
                "ss07",
              },
            },
            { family = "Apple Color Emoji" },
          })

          -- TODO: on mairley this should be set to 14.0
          config.font_size = ${if (is-darwin system) then "14.0" else "11.0"}

          return config
        '';
    };
  };
}
