summary refs log tree commit diff
path: root/nixos/modules/services/x11/window-managers/compiz.nix
blob: 209401f26468b9c7d5d8461a23f2a777d06e4c3a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{ config, pkgs, ... }:

with pkgs.lib;

let

  cfg = config.services.xserver.windowManager.compiz;
  xorg = config.services.xserver.package;

in

{

  options = {

    services.xserver.windowManager.compiz = {

      enable = mkOption {
        default = false;
        description = "Enable the Compiz window manager.";
      };

      renderingFlag = mkOption {
        default = "";
        example = "--indirect-rendering";
        description = "Pass the <option>--indirect-rendering</option> flag to Compiz.";
      };

    };

  };


  config = mkIf cfg.enable {

    services.xserver.windowManager.session = singleton
      { name = "compiz";
        start =
          ''
            # Start Compiz using the flat-file configuration backend
            # (ccp).
            export COMPIZ_PLUGINDIR=${config.system.path}/lib/compiz
            export COMPIZ_METADATADIR=${config.system.path}/share/compiz
            ${pkgs.compiz}/bin/compiz ccp ${cfg.renderingFlag} &

            # Start GTK-style window decorator.
            ${pkgs.compiz}/bin/gtk-window-decorator &
          '';
      };

    environment.systemPackages =
      [ pkgs.compiz
        pkgs.compiz_ccsm
        pkgs.compiz_plugins_main
        pkgs.compiz_plugins_extra
        pkgs.libcompizconfig # for the "ccp" plugin
      ];

    environment.pathsToLink = [ "/lib/compiz" "/share/compiz" ];

  };

}