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

with lib;

let

  func = pkgs.writeText "func.fish" ''
    function func
        echo Hello
    end
  '';

  funcEvent = pkgs.writeText "func-event.fish" ''
    function func-event --on-event="fish_command_not_found"
        echo "Not found!"
    end
  '';

in {
  config = {
    programs.fish = {
      enable = true;

      functions = {
        func = ''echo "Hello"'';
        func-event = {
          body = ''echo "Not found!"'';
          onEvent = "fish_command_not_found";
        };
      };
    };

    # Needed to avoid error with dummy fish package.
    xdg.dataFile."fish/home-manager_generated_completions".source =
      lib.mkForce (builtins.toFile "empty" "");

    nmt = {
      description =
        "if fish.function is set, check file exists and contents match";
      script = ''
        assertFileExists home-files/.config/fish/functions/func.fish
        echo ${func}
        assertFileContent home-files/.config/fish/functions/func.fish ${func}

        assertFileExists home-files/.config/fish/functions/func-event.fish
        echo ${funcEvent}
        assertFileContent home-files/.config/fish/functions/func-event.fish ${funcEvent}
      '';

    };
  };
}