Seeking Assistance with old EXWM-Emacs Version After 23.11 Update

Hello everyone,

I’m reaching out to any fellow EXWM users who might be able to assist me. I recently updated to version 23.11, but I’ve noticed that my EXWM-emacs version remains at 28.2. Interestingly, when I start emacs in ‘standalone’ mode, it shows as emacs 29.1. For reference, I’m using services.xserver.windowManager.exwm.

If anyone could provide some guidance on how to debug this issue, I would greatly appreciate it. Thanks in advance for your help!

Best,

I don’t use exwm (anymore), but this is expected based on how the exwm module works.

The current default version of emacs in nixpkgs is 28.2: https://search.nixos.org/packages?channel=23.11&show=emacs&from=0&size=50&sort=relevance&type=packages&query=emacs

The exwm module uses an emacs version that does not depend on the emacs version set by services.emacs.package: https://github.com/NixOS/nixpkgs/blob/b4372c4924d9182034066c823df76d6eaf1f4ec4/nixos/modules/services/x11/window-managers/exwm.nix#L15

So, your emacs and exwm-emacs versions are expected to be different. This is confusing and not great.

The fix is to send a PR upstream to change this. Either make exwm reuse the emacs package version, or add a package option so that users can manually force them to be the same (I think the latter is better, especially for people who use home-manager).

Hacking around it in your config is difficult because of how the module is written. Probably easier to just reimplement it from scratch if you don’t fix it upstream.

1 Like

Hey @TLATER. Thank you for taking the time to explain at length. I implemented it as shown in this commit, following the instructions here (untested)

Do you think it makes sense this way?
If so, I would test it then and open a PR.

1 Like

I’m not sure. The emacsWithPackages thing is a bit awkward. Is there any way you could get a handle on the withPackages for a given emacs version instead? I forget how the emacs packages fit together.

1 Like

Overriding would work like this:

 emacsWithPackages = emacs.pkgs.overrideScope (self: super: {emacs = ...;}).withPackages; 

So ultimately, it’s a withPackages function that’s being expected, following the documentation here (same link as above). Is there a reason this “official” way is not prefered?