{ lib, pkgs, ... }:

{
  nixpkgs.overlays = [
    (self: super: rec {
      emacs = pkgs.writeShellScriptBin "dummy-emacs-27.2" "" // {
        outPath = "@emacs@";
      };
      emacsPackagesFor = _:
        lib.makeScope super.newScope (_: { emacsWithPackages = _: emacs; });
    })
  ];

  programs.emacs.enable = true;
  services.emacs.enable = true;
  services.emacs.client.enable = true;
  services.emacs.extraOptions = [ "-f" "exwm-enable" ];

  nmt.script = ''
    assertPathNotExists home-files/.config/systemd/user/emacs.socket
    assertFileExists home-files/.config/systemd/user/emacs.service
    assertFileExists home-path/share/applications/emacsclient.desktop

    assertFileContent \
      home-files/.config/systemd/user/emacs.service \
      ${
        pkgs.substituteAll {
          inherit (pkgs) runtimeShell;
          src = ./emacs-service-emacs.service;
        }
      }

    assertFileContent \
      home-path/share/applications/emacsclient.desktop \
      ${./emacs-27-emacsclient.desktop}
  '';
}
