{ config, lib, ... }:

let
  nixvimCfg = config.nixvimConfigs.fiesta;
  cfg = nixvimCfg.setups.ui;
in
{
  options.nixvimConfigs.fiesta.setups.ui.enable =
    lib.mkEnableOption "configuration for UI-related settings and plugins";

  config = lib.mkIf cfg.enable {
    # Set the colorscheme. Take note, we'll set in the default since this NixVim configuration
    colorschemes = lib.mkDefault { kanagawa.enable = true; };

    # Make it so that terminal GUI colors are au natural.
    opts.termguicolors = true;

    # Show locations you're supposed to be copying from the internet (or your
    # own code).
    opts.number = true;

    # Make it easy to count.
    opts.relativenumber = true;

    # Make it easy to identify your cursor.
    opts.cursorline = true;

    # Conceal all of the hidden weapons (or distractions).
    opts.conceallevel = 1;

    # Show them hidden suckers.
    opts.list = true;
    opts.listchars = {
      tab = "↦ ";
      trail = "·";
      nbsp = "%";
    };

    # My elderly forgot-how-to-do-this assistant.
    plugins.which-key.enable = true;

    # Taste the rainbow delimiters.
    plugins.rainbow-delimiters.enable = nixvimCfg.setups.treesitter.enable;

    # Enable them status bars.
    plugins.lualine = {
      enable = true;
      iconsEnabled = true;
      globalstatus = true;
      alwaysDivideMiddle = true;

      # Disable the section separators.
      sectionSeparators = {
        left = "";
        right = "";
      };

      sections = {
        lualine_a = [ "mode" ];
        lualine_c = [
          {
            name = "filename";
            extraConfig = {
              newfile_status = true;
              shorting_target = 10;
              path = 1;
            };
          }
        ];
        lualine_z = [ "location" ];
      };
    };
  };
}