1{
2 config,
3 lib,
4 pkgs,
5 utils,
6 ...
7}:
8
9with lib;
10
11let
12
13 e = pkgs.enlightenment;
14 xcfg = config.services.xserver;
15 cfg = xcfg.desktopManager.enlightenment;
16
17 GST_PLUGIN_PATH = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" [
18 pkgs.gst_all_1.gst-plugins-base
19 pkgs.gst_all_1.gst-plugins-good
20 pkgs.gst_all_1.gst-plugins-bad
21 pkgs.gst_all_1.gst-libav
22 ];
23
24in
25
26{
27 meta = {
28 maintainers = teams.enlightenment.members;
29 };
30
31 imports = [
32 (mkRenamedOptionModule
33 [ "services" "xserver" "desktopManager" "e19" "enable" ]
34 [ "services" "xserver" "desktopManager" "enlightenment" "enable" ]
35 )
36 ];
37
38 options = {
39
40 services.xserver.desktopManager.enlightenment.enable = mkOption {
41 type = types.bool;
42 default = false;
43 description = "Enable the Enlightenment desktop environment.";
44 };
45
46 environment.enlightenment.excludePackages = mkOption {
47 default = [ ];
48 example = literalExpression "[ pkgs.enlightenment.ephoto ]";
49 type = types.listOf types.package;
50 description = "Which packages Enlightenment should exclude from the default environment";
51 };
52 };
53
54 config = mkIf cfg.enable {
55
56 environment.systemPackages = utils.removePackagesByName (with pkgs; [
57 enlightenment.econnman
58 enlightenment.efl
59 enlightenment.enlightenment
60 enlightenment.ecrire
61 enlightenment.ephoto
62 enlightenment.rage
63 enlightenment.terminology
64 xorg.xcursorthemes
65 ]) config.environment.enlightenment.excludePackages;
66
67 environment.pathsToLink = [
68 "/etc/enlightenment"
69 "/share/enlightenment"
70 "/share/elementary"
71 "/share/locale"
72 ];
73
74 services.displayManager.sessionPackages = [ pkgs.enlightenment.enlightenment ];
75
76 services.xserver.displayManager.sessionCommands = ''
77 if test "$XDG_CURRENT_DESKTOP" = "Enlightenment"; then
78 export GST_PLUGIN_PATH="${GST_PLUGIN_PATH}"
79
80 # make available for D-BUS user services
81 #export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}:${config.system.path}/share:${e.efl}/share
82
83 # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
84 ${pkgs.xdg-user-dirs}/bin/xdg-user-dirs-update
85 fi
86 '';
87
88 # Wrappers for programs installed by enlightenment that should be setuid
89 security.wrappers = {
90 enlightenment_ckpasswd = {
91 setuid = true;
92 owner = "root";
93 group = "root";
94 source = "${pkgs.enlightenment.enlightenment}/lib/enlightenment/utils/enlightenment_ckpasswd";
95 };
96 enlightenment_sys = {
97 setuid = true;
98 owner = "root";
99 group = "root";
100 source = "${pkgs.enlightenment.enlightenment}/lib/enlightenment/utils/enlightenment_sys";
101 };
102 enlightenment_system = {
103 setuid = true;
104 owner = "root";
105 group = "root";
106 source = "${pkgs.enlightenment.enlightenment}/lib/enlightenment/utils/enlightenment_system";
107 };
108 };
109
110 environment.etc."X11/xkb".source = xcfg.xkb.dir;
111
112 fonts.packages = [ pkgs.dejavu_fonts ];
113
114 services.udisks2.enable = true;
115 services.upower.enable = config.powerManagement.enable;
116 services.libinput.enable = mkDefault true;
117
118 services.dbus.packages = [ e.efl ];
119
120 systemd.user.services.efreet = {
121 enable = true;
122 description = "org.enlightenment.Efreet";
123 serviceConfig = {
124 ExecStart = "${e.efl}/bin/efreetd";
125 StandardOutput = "null";
126 };
127 };
128
129 systemd.user.services.ethumb = {
130 enable = true;
131 description = "org.enlightenment.Ethumb";
132 serviceConfig = {
133 ExecStart = "${e.efl}/bin/ethumbd";
134 StandardOutput = "null";
135 };
136 };
137
138 };
139
140}