{ mkTarget, lib, ... }:
mkTarget {
  options.exportedBarConfig = lib.mkOption {
    type = lib.types.attrs;
    default = { };
    description = ''
      Theming configuration which can be merged with your own:

      ```nix
      xsession.windowManager.i3.config.bars = [
        (
          {
            # your configuration
          }
          // config.stylix.targets.i3.exportedBarConfig
        )
      ];
      ```
    '';
  };

  imports = lib.singleton (
    { config, ... }:
    {
      lib.stylix.i3.bar = lib.warn "stylix: `config.lib.stylix.i3.bar` has been renamed to `config.stylix.targets.i3.exportedBarConfig` and will be removed after 26.11." config.stylix.targets.i3.exportedBarConfig;
    }
  );

  config = [
    (
      { fonts }:
      let
        fonts' = {
          names = [ fonts.sansSerif.name ];
          size = fonts.sizes.desktop * 1.0;
        };
      in
      {
        xsession.windowManager.i3.config.fonts = fonts';
        stylix.targets.i3.exportedBarConfig.fonts = fonts';
      }
    )
    (
      { colors }:
      with colors.withHashtag;
      let
        text = base05;
        urgent = base08;
        focused = base0D;
        unfocused = base03;
      in
      {
        xsession.windowManager.i3.config.colors =
          let
            background = base00;
            indicator = base0B;
          in
          {
            inherit background;
            urgent = {
              inherit background indicator text;
              border = urgent;
              childBorder = urgent;
            };
            focused = {
              inherit background indicator text;
              border = focused;
              childBorder = focused;
            };
            focusedInactive = {
              inherit background indicator text;
              border = unfocused;
              childBorder = unfocused;
            };
            unfocused = {
              inherit background indicator text;
              border = unfocused;
              childBorder = unfocused;
            };
            placeholder = {
              inherit background indicator text;
              border = unfocused;
              childBorder = unfocused;
            };
          };

        stylix.targets.i3.exportedBarConfig.colors =
          let
            background = base00;
            border = background;
          in
          {
            inherit background;
            statusline = text;
            separator = base03;
            focusedWorkspace = {
              inherit text background;
              border = focused;
            };
            activeWorkspace = {
              inherit border background;
              text = focused;
            };
            inactiveWorkspace = { inherit text border background; };
            urgentWorkspace = {
              inherit text background;
              border = urgent;
            };
            bindingMode = {
              inherit text border;
              background = urgent;
            };
          };
      }
    )
  ];
}
