summary refs log tree commit diff
path: root/nixos/modules/services/editors
diff options
context:
space:
mode:
authorAtemu <atemu.main@gmail.com>2023-07-29 09:37:47 +0200
committerAtemu <atemu.main@gmail.com>2023-07-29 14:17:28 +0200
commitd391373c40f5677081299ca210aa22eba5261c73 (patch)
tree47de50ecf8196a1d2df87d9d9c63ca78056ae460 /nixos/modules/services/editors
parentc9cf0708f00fbe553319258e48ca89ff9a413703 (diff)
nixos/emacs: start emacs service with the graphical-session
If emacs starts before the graphical session is initialised, clients won't be
able to open new frames in the session. Start emacs with the graphical session
to avoid this issue.

Fixes https://github.com/NixOS/nixpkgs/issues/224512
Diffstat (limited to 'nixos/modules/services/editors')
-rw-r--r--nixos/modules/services/editors/emacs.nix17
1 files changed, 16 insertions, 1 deletions
diff --git a/nixos/modules/services/editors/emacs.nix b/nixos/modules/services/editors/emacs.nix
index fe3a101597947..fad4f39ff2104 100644
--- a/nixos/modules/services/editors/emacs.nix
+++ b/nixos/modules/services/editors/emacs.nix
@@ -80,6 +80,15 @@ in
         using the EDITOR environment variable.
       '';
     };
+
+    startWithGraphical = mkOption {
+      type = types.bool;
+      default = config.services.xserver.enable;
+      defaultText = literalExpression "config.services.xserver.enable";
+      description = lib.mdDoc ''
+        Start emacs with the graphical session instead of any session. Without this, emacs clients will not be able to create frames in the graphical session.
+      '';
+    };
   };
 
   config = mkIf (cfg.enable || cfg.install) {
@@ -92,7 +101,13 @@ in
         ExecStop = "${cfg.package}/bin/emacsclient --eval (kill-emacs)";
         Restart = "always";
       };
-    } // optionalAttrs cfg.enable { wantedBy = [ "default.target" ]; };
+
+      unitConfig = optionalAttrs cfg.startWithGraphical {
+        After = "graphical-session.target";
+      };
+    } // optionalAttrs cfg.enable {
+      wantedBy = if cfg.startWithGraphical then [ "graphical-session.target" ] else [ "default.target" ];
+    };
 
     environment.systemPackages = [ cfg.package editorScript desktopApplicationFile ];