python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / x11 / window-managers / exwm.nix
bloba97ed74ae8814444c973ee676e80c69456a7ea24
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 (lib.mdDoc "exwm");
22       loadScript = mkOption {
23         default = "(require 'exwm)";
24         type = types.lines;
25         example = ''
26           (require 'exwm)
27           (exwm-enable)
28         '';
29         description = lib.mdDoc ''
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 = lib.mdDoc "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 = lib.mdDoc ''
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   };