{ config, lib, pkgs, ... }:

with lib;

{
  config = {
    programs.bat = {
      enable = true;

      config = {
        theme = "TwoDark";
        pager = "less -FR";
        map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ];
        show-all = true;

        # False boolean options should not appear in the config
        lessopen = false;
      };

      themes.testtheme.src = pkgs.writeText "testtheme.tmTheme" ''
        This is a test theme.
      '';

      syntaxes.testsyntax.src = pkgs.writeText "testsyntax.sublime-syntax" ''
        This is a test syntax.
      '';
    };

    test.stubs.bat = { };

    nmt.script = ''
      assertFileExists home-files/.config/bat/config
      assertFileContent home-files/.config/bat/config ${
        pkgs.writeText "bat.expected" ''
          --map-syntax='*.jenkinsfile:Groovy'
          --map-syntax='*.props:Java Properties'
          --pager='less -FR'
          --theme='TwoDark'
          --show-all
        ''
      }

      assertFileExists home-files/.config/bat/themes/testtheme.tmTheme
      assertFileContent home-files/.config/bat/themes/testtheme.tmTheme ${
        pkgs.writeText "bat.expected" ''
          This is a test theme.
        ''
      }

      assertFileExists home-files/.config/bat/syntaxes/testsyntax.sublime-syntax
      assertFileContent home-files/.config/bat/syntaxes/testsyntax.sublime-syntax ${
        pkgs.writeText "bat.expected" ''
          This is a test syntax.
        ''
      }
    '';
  };
}