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}