aboutsummaryrefslogtreecommitdiff
path: root/tests/modules/services
diff options
context:
space:
mode:
authorTad Fisher <tadfisher@gmail.com>2020-06-08 14:01:17 -0700
committerRobert Helgesson <robert@rycee.net>2020-06-11 20:39:49 +0200
commit3815248786cb7b911ae1a72d2ec769f93c0b27b6 (patch)
tree11bf1373d5e6597d751129d905daaa6a195350d4 /tests/modules/services
parent02c1f8d416d55d8bc8d4de62f65f62fef40e5e80 (diff)
emacs: Support socket activation via systemd
Add 'services.emacs.socketActivation.enable' for generating an 'emacs.socket' systemd unit. Emacs since version 26 has supported socket activation, whereby an external process manager such as systemd listens on a socket and passes it to the Emacs daemon when the manager launches it. This improves startup time of the user session and avoids launching the daemon when not needed, for example when launching the user session via SSH. This implementation hard-codes the socket path to the default for the version of 'programs.emacs.finalPackage', because systemd does not perform shell expansion in the socket unit's 'ListenStream' parameter and it seems like an advanced use-case to change the socket path. Shell expansion would be desirable as the socket path usually resides in directories such as $XDG_RUNTIME_DIR or $TMPDIR. Tests were added to verify behavior in the following cases: - Emacs service with socket activation disabled - Emacs 26 with socket activation enabled - Emacs 27 with socket activation enabled PR #1314
Diffstat (limited to 'tests/modules/services')
-rw-r--r--tests/modules/services/emacs/default.nix5
-rw-r--r--tests/modules/services/emacs/emacs-emacsclient.desktop12
-rw-r--r--tests/modules/services/emacs/emacs-service-emacs.service12
-rw-r--r--tests/modules/services/emacs/emacs-service.nix32
-rw-r--r--tests/modules/services/emacs/emacs-socket-26-emacs.service9
-rw-r--r--tests/modules/services/emacs/emacs-socket-26-emacs.socket12
-rw-r--r--tests/modules/services/emacs/emacs-socket-26.nix35
-rw-r--r--tests/modules/services/emacs/emacs-socket-27-emacs.service9
-rw-r--r--tests/modules/services/emacs/emacs-socket-27-emacs.socket12
-rw-r--r--tests/modules/services/emacs/emacs-socket-27.nix37
10 files changed, 175 insertions, 0 deletions
diff --git a/tests/modules/services/emacs/default.nix b/tests/modules/services/emacs/default.nix
new file mode 100644
index 00000000000..af27538d99d
--- /dev/null
+++ b/tests/modules/services/emacs/default.nix
@@ -0,0 +1,5 @@
+{
+ emacs-service = ./emacs-service.nix;
+ emacs-socket-26 = ./emacs-socket-26.nix;
+ emacs-socket-27 = ./emacs-socket-27.nix;
+}
diff --git a/tests/modules/services/emacs/emacs-emacsclient.desktop b/tests/modules/services/emacs/emacs-emacsclient.desktop
new file mode 100644
index 00000000000..ab9849bb6b9
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-emacsclient.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Type=Application
+Exec=@emacs@/bin/emacsclient -c %F
+Terminal=false
+Name=Emacs Client
+Icon=emacs
+Comment=Edit text
+GenericName=Text Editor
+MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
+Categories=Utility;TextEditor;
+StartupWMClass=Emacs
+
diff --git a/tests/modules/services/emacs/emacs-service-emacs.service b/tests/modules/services/emacs/emacs-service-emacs.service
new file mode 100644
index 00000000000..c862e5688c6
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-service-emacs.service
@@ -0,0 +1,12 @@
+[Install]
+WantedBy=default.target
+
+[Service]
+ExecStart=@emacs@/bin/emacs --fg-daemon
+ExecStop=@emacs@/bin/emacsclient --eval '(kill-emacs 0)'
+Restart=on-failure
+
+[Unit]
+Description=Emacs: the extensible, self-documenting text editor
+Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
+X-RestartIfChanged=false
diff --git a/tests/modules/services/emacs/emacs-service.nix b/tests/modules/services/emacs/emacs-service.nix
new file mode 100644
index 00000000000..06a26c82309
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-service.nix
@@ -0,0 +1,32 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ nixpkgs.overlays = [
+ (self: super: rec {
+ emacs = pkgs.writeShellScriptBin "dummy-emacs" "" // {
+ outPath = "@emacs@";
+ };
+ emacsPackagesFor = _:
+ makeScope super.newScope (_: { emacsWithPackages = _: emacs; });
+ })
+ ];
+
+ programs.emacs.enable = true;
+ services.emacs.enable = true;
+ services.emacs.client.enable = true;
+
+ 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 \
+ ${./emacs-service-emacs.service}
+ assertFileContent home-path/share/applications/emacsclient.desktop \
+ ${./emacs-emacsclient.desktop}
+ '';
+ };
+}
diff --git a/tests/modules/services/emacs/emacs-socket-26-emacs.service b/tests/modules/services/emacs/emacs-socket-26-emacs.service
new file mode 100644
index 00000000000..8e9daba80d7
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-socket-26-emacs.service
@@ -0,0 +1,9 @@
+[Service]
+ExecStart=@emacs@/bin/emacs --fg-daemon="%T/emacs%U/server"
+ExecStop=@emacs@/bin/emacsclient --eval '(kill-emacs 0)'
+Restart=on-failure
+
+[Unit]
+Description=Emacs: the extensible, self-documenting text editor
+Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
+X-RestartIfChanged=false
diff --git a/tests/modules/services/emacs/emacs-socket-26-emacs.socket b/tests/modules/services/emacs/emacs-socket-26-emacs.socket
new file mode 100644
index 00000000000..d2fa78e2265
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-socket-26-emacs.socket
@@ -0,0 +1,12 @@
+[Install]
+WantedBy=sockets.target
+
+[Socket]
+DirectoryMode=0700
+FileDescriptorName=server
+ListenStream=%T/emacs%U/server
+SocketMode=0600
+
+[Unit]
+Description=Emacs: the extensible, self-documenting text editor
+Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
diff --git a/tests/modules/services/emacs/emacs-socket-26.nix b/tests/modules/services/emacs/emacs-socket-26.nix
new file mode 100644
index 00000000000..7905e19b346
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-socket-26.nix
@@ -0,0 +1,35 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ nixpkgs.overlays = [
+ (self: super: rec {
+ emacs = pkgs.writeShellScriptBin "dummy-emacs-26.3" "" // {
+ outPath = "@emacs@";
+ };
+ emacsPackagesFor = _:
+ makeScope super.newScope (_: { emacsWithPackages = _: emacs; });
+ })
+ ];
+
+ programs.emacs.enable = true;
+ services.emacs.enable = true;
+ services.emacs.client.enable = true;
+ services.emacs.socketActivation.enable = true;
+
+ nmt.script = ''
+ assertFileExists 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.socket \
+ ${./emacs-socket-26-emacs.socket}
+ assertFileContent home-files/.config/systemd/user/emacs.service \
+ ${./emacs-socket-26-emacs.service}
+ assertFileContent home-path/share/applications/emacsclient.desktop \
+ ${./emacs-emacsclient.desktop}
+ '';
+ };
+}
diff --git a/tests/modules/services/emacs/emacs-socket-27-emacs.service b/tests/modules/services/emacs/emacs-socket-27-emacs.service
new file mode 100644
index 00000000000..99bacf2903b
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-socket-27-emacs.service
@@ -0,0 +1,9 @@
+[Service]
+ExecStart=@emacs@/bin/emacs --fg-daemon="%t/emacs/server"
+ExecStop=@emacs@/bin/emacsclient --eval '(kill-emacs 0)'
+Restart=on-failure
+
+[Unit]
+Description=Emacs: the extensible, self-documenting text editor
+Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
+X-RestartIfChanged=false
diff --git a/tests/modules/services/emacs/emacs-socket-27-emacs.socket b/tests/modules/services/emacs/emacs-socket-27-emacs.socket
new file mode 100644
index 00000000000..8fa68bf5911
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-socket-27-emacs.socket
@@ -0,0 +1,12 @@
+[Install]
+WantedBy=sockets.target
+
+[Socket]
+DirectoryMode=0700
+FileDescriptorName=server
+ListenStream=%t/emacs/server
+SocketMode=0600
+
+[Unit]
+Description=Emacs: the extensible, self-documenting text editor
+Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
diff --git a/tests/modules/services/emacs/emacs-socket-27.nix b/tests/modules/services/emacs/emacs-socket-27.nix
new file mode 100644
index 00000000000..d1ecb954a78
--- /dev/null
+++ b/tests/modules/services/emacs/emacs-socket-27.nix
@@ -0,0 +1,37 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+in {
+ config = {
+ nixpkgs.overlays = [
+ (self: super: rec {
+ emacs = pkgs.writeShellScriptBin "dummy-emacs-27.0.91" "" // {
+ outPath = "@emacs@";
+ };
+ emacsPackagesFor = _:
+ makeScope super.newScope (_: { emacsWithPackages = _: emacs; });
+ })
+ ];
+
+ programs.emacs.enable = true;
+ services.emacs.enable = true;
+ services.emacs.client.enable = true;
+ services.emacs.socketActivation.enable = true;
+
+ nmt.script = ''
+ assertFileExists 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.socket \
+ ${./emacs-socket-27-emacs.socket}
+ assertFileContent home-files/.config/systemd/user/emacs.service \
+ ${./emacs-socket-27-emacs.service}
+ assertFileContent home-path/share/applications/emacsclient.desktop \
+ ${./emacs-emacsclient.desktop}
+ '';
+ };
+}