grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / x11 / window-managers / exwm.nix
blob406b6be5b92c28fb867fa4bd5a8e3d6a3ad3f87f
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.xserver.windowManager.exwm;
7   loadScript = pkgs.writeText "emacs-exwm-load" ''
8     ${cfg.loadScript}
9     ${optionalString cfg.enableDefaultConfig ''
10       (require 'exwm-config)
11       (exwm-config-default)
12     ''}
13   '';
14   packages = epkgs: cfg.extraPackages epkgs ++ [ epkgs.exwm ];
15   exwm-emacs = pkgs.emacsWithPackages packages;
19   options = {
20     services.xserver.windowManager.exwm = {
21       enable = mkEnableOption "exwm";
22       loadScript = mkOption {
23         default = "(require 'exwm)";
24         type = types.lines;
25         example = ''
26           (require 'exwm)
27           (exwm-enable)
28         '';
29         description = ''
30           Emacs lisp code to be run after loading the user's init
31           file. If enableDefaultConfig is true, this will be run
32           before loading the default config.
33         '';
34       };
35       enableDefaultConfig = mkOption {
36         default = true;
37         type = lib.types.bool;
38         description = "Enable an uncustomised exwm configuration.";
39       };
40       extraPackages = mkOption {
41         type = types.functionTo (types.listOf types.package);
42         default = epkgs: [];
43         defaultText = literalExpression "epkgs: []";
44         example = literalExpression ''
45           epkgs: [
46             epkgs.emms
47             epkgs.magit
48             epkgs.proofgeneral
49           ]
50         '';
51         description = ''
52           Extra packages available to Emacs. The value must be a
53           function which receives the attrset defined in
54           {var}`emacs.pkgs` as the sole argument.
55         '';
56       };
57     };
58   };
60   config = mkIf cfg.enable {
61     services.xserver.windowManager.session = singleton {
62       name = "exwm";
63       start = ''
64         ${exwm-emacs}/bin/emacs -l ${loadScript}
65       '';
66     };
67     environment.systemPackages = [ exwm-emacs ];
68   };