1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6 cfg = config.services.xserver.windowManager.bspwm;
7in
8
9{
10 options = {
11 services.xserver.windowManager.bspwm = {
12 enable = mkEnableOption "bspwm";
13 startThroughSession = mkOption {
14 type = with types; bool;
15 default = false;
16 description = "
17 Start the window manager through the script defined in
18 sessionScript. Defaults to the the bspwm-session script
19 provided by bspwm
20 ";
21 };
22 sessionScript = mkOption {
23 default = "${pkgs.bspwm}/bin/bspwm-session";
24 defaultText = "(pkgs.bspwm)/bin/bspwm-session";
25 description = "
26 The start-session script to use. Defaults to the
27 provided bspwm-session script from the bspwm package.
28
29 Does nothing unless `bspwm.startThroughSession` is enabled
30 ";
31 };
32 };
33 };
34
35 config = mkIf cfg.enable {
36 services.xserver.windowManager.session = singleton {
37 name = "bspwm";
38 start = if cfg.startThroughSession
39 then cfg.sessionScript
40 else ''
41 export _JAVA_AWT_WM_NONREPARENTING=1
42 SXHKD_SHELL=/bin/sh ${pkgs.sxhkd}/bin/sxhkd -f 100 &
43 ${pkgs.bspwm}/bin/bspwm
44 '';
45 };
46 environment.systemPackages = [ pkgs.bspwm ];
47 };
48}