1{ config, pkgs, lib, ... }:
2
3with lib;
4
5let
6 cfg = config.programs.way-cooler;
7 way-cooler = pkgs.way-cooler;
8
9 wcWrapped = pkgs.writeShellScriptBin "way-cooler" ''
10 ${cfg.extraSessionCommands}
11 exec ${pkgs.dbus.dbus-launch} --exit-with-session ${way-cooler}/bin/way-cooler
12 '';
13 wcJoined = pkgs.symlinkJoin {
14 name = "way-cooler-wrapped";
15 paths = [ wcWrapped way-cooler ];
16 };
17 configFile = readFile "${way-cooler}/etc/way-cooler/init.lua";
18 spawnBar = ''
19 util.program.spawn_at_startup("lemonbar");
20 '';
21in
22{
23 options.programs.way-cooler = {
24 enable = mkEnableOption "way-cooler";
25
26 extraSessionCommands = mkOption {
27 default = "";
28 type = types.lines;
29 example = ''
30 export XKB_DEFAULT_LAYOUT=us,de
31 export XKB_DEFAULT_VARIANT=,nodeadkeys
32 export XKB_DEFAULT_OPTIONS=grp:caps_toggle,
33 '';
34 description = ''
35 Shell commands executed just before way-cooler is started.
36 '';
37 };
38
39 extraPackages = mkOption {
40 type = with types; listOf package;
41 default = with pkgs; [
42 westonLite xwayland dmenu
43 ];
44 example = literalExample ''
45 with pkgs; [
46 westonLite xwayland dmenu
47 ]
48 '';
49 description = ''
50 Extra packages to be installed system wide.
51 '';
52 };
53
54 enableBar = mkOption {
55 type = types.bool;
56 default = true;
57 description = ''
58 Whether to enable an unofficial bar.
59 '';
60 };
61 };
62
63 config = mkIf cfg.enable {
64 environment.systemPackages = [ wcJoined ] ++ cfg.extraPackages;
65
66 security.pam.services.wc-lock = {};
67 environment.etc."way-cooler/init.lua".text = ''
68 ${configFile}
69 ${optionalString cfg.enableBar spawnBar}
70 '';
71
72 hardware.opengl.enable = mkDefault true;
73 fonts.enableDefaultFonts = mkDefault true;
74 programs.dconf.enable = mkDefault true;
75 };
76
77 meta.maintainers = with maintainers; [ gnidorah ];
78}