1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8with lib;
9
10let
11
12 cfg = config.services.xserver.windowManager.awesome;
13 awesome = cfg.package;
14 getLuaPath = lib: dir: "${lib}/${dir}/lua/${awesome.lua.luaversion}";
15 makeSearchPath = lib.concatMapStrings (
16 path: " --search " + (getLuaPath path "share") + " --search " + (getLuaPath path "lib")
17 );
18in
19
20{
21
22 ###### interface
23
24 options = {
25
26 services.xserver.windowManager.awesome = {
27
28 enable = mkEnableOption "Awesome window manager";
29
30 luaModules = mkOption {
31 default = [ ];
32 type = types.listOf types.package;
33 description = "List of lua packages available for being used in the Awesome configuration.";
34 example = literalExpression "[ pkgs.luaPackages.vicious ]";
35 };
36
37 package = mkPackageOption pkgs "awesome" { };
38
39 noArgb = mkOption {
40 default = false;
41 type = types.bool;
42 description = "Disable client transparency support, which can be greatly detrimental to performance in some setups";
43 };
44 };
45
46 };
47
48 ###### implementation
49
50 config = mkIf cfg.enable {
51
52 services.xserver.windowManager.session = singleton {
53 name = "awesome";
54 start = ''
55 ${awesome}/bin/awesome ${lib.optionalString cfg.noArgb "--no-argb"} ${makeSearchPath cfg.luaModules} &
56 waitPID=$!
57 '';
58 };
59
60 environment.systemPackages = [ awesome ];
61
62 };
63}