1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.xserver.desktopManager.cinnamon;
8 serviceCfg = config.services.cinnamon;
9
10 nixos-gsettings-overrides = pkgs.cinnamon.cinnamon-gsettings-overrides.override {
11 extraGSettingsOverridePackages = cfg.extraGSettingsOverridePackages;
12 extraGSettingsOverrides = cfg.extraGSettingsOverrides;
13 };
14
15in
16
17{
18 options = {
19 services.cinnamon = {
20 apps.enable = mkEnableOption "Cinnamon default applications";
21 };
22
23 services.xserver.desktopManager.cinnamon = {
24 enable = mkEnableOption "the cinnamon desktop manager";
25
26 sessionPath = mkOption {
27 default = [];
28 type = types.listOf types.package;
29 example = literalExample "[ pkgs.gnome.gpaste ]";
30 description = ''
31 Additional list of packages to be added to the session search path.
32 Useful for GSettings-conditional autostart.
33
34 Note that this should be a last resort; patching the package is preferred (see GPaste).
35 '';
36 };
37
38 extraGSettingsOverrides = mkOption {
39 default = "";
40 type = types.lines;
41 description = "Additional gsettings overrides.";
42 };
43
44 extraGSettingsOverridePackages = mkOption {
45 default = [];
46 type = types.listOf types.path;
47 description = "List of packages for which gsettings are overridden.";
48 };
49 };
50
51 environment.cinnamon.excludePackages = mkOption {
52 default = [];
53 example = literalExample "[ pkgs.cinnamon.blueberry ]";
54 type = types.listOf types.package;
55 description = "Which packages cinnamon should exclude from the default environment";
56 };
57
58 };
59
60 config = mkMerge [
61 (mkIf (cfg.enable && config.services.xserver.displayManager.lightdm.enable && config.services.xserver.displayManager.lightdm.greeters.gtk.enable) {
62 services.xserver.displayManager.lightdm.greeters.gtk.extraConfig = mkDefault (builtins.readFile "${pkgs.cinnamon.mint-artwork}/etc/lightdm/lightdm-gtk-greeter.conf.d/99_linuxmint.conf");
63 })
64
65 (mkIf cfg.enable {
66 services.xserver.displayManager.sessionPackages = [ pkgs.cinnamon.cinnamon-common ];
67
68 services.xserver.displayManager.sessionCommands = ''
69 if test "$XDG_CURRENT_DESKTOP" = "Cinnamon"; then
70 true
71 ${concatMapStrings (p: ''
72 if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
73 export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
74 fi
75
76 if [ -d "${p}/lib/girepository-1.0" ]; then
77 export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0
78 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
79 fi
80 '') cfg.sessionPath}
81 fi
82 '';
83
84 # Default services
85 hardware.bluetooth.enable = mkDefault true;
86 hardware.pulseaudio.enable = mkDefault true;
87 security.polkit.enable = true;
88 services.accounts-daemon.enable = true;
89 services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
90 services.dbus.packages = with pkgs.cinnamon; [
91 cinnamon-common
92 cinnamon-screensaver
93 nemo
94 xapps
95 ];
96 services.cinnamon.apps.enable = mkDefault true;
97 services.gnome.glib-networking.enable = true;
98 services.gnome.gnome-keyring.enable = true;
99 services.gvfs.enable = true;
100 services.udisks2.enable = true;
101 services.upower.enable = mkDefault config.powerManagement.enable;
102 services.xserver.libinput.enable = mkDefault true;
103 services.xserver.updateDbusEnvironment = true;
104 networking.networkmanager.enable = mkDefault true;
105
106 # Enable colord server
107 services.colord.enable = true;
108
109 # Enable dconf
110 programs.dconf.enable = true;
111
112 # Enable org.a11y.Bus
113 services.gnome.at-spi2-core.enable = true;
114
115 # Fix lockscreen
116 security.pam.services = {
117 cinnamon-screensaver = {};
118 };
119
120 environment.systemPackages = with pkgs.cinnamon // pkgs; [
121 desktop-file-utils
122 nixos-artwork.wallpapers.simple-dark-gray
123 onboard
124 sound-theme-freedesktop
125
126 # common-files
127 cinnamon-common
128 cinnamon-session
129 cinnamon-desktop
130 cinnamon-menus
131 cinnamon-translations
132
133 # utils needed by some scripts
134 killall
135
136 # session requirements
137 cinnamon-screensaver
138 # cinnamon-killer-daemon: provided by cinnamon-common
139 gnome.networkmanagerapplet # session requirement - also nm-applet not needed
140
141 # For a polkit authentication agent
142 polkit_gnome
143
144 # packages
145 nemo
146 cinnamon-control-center
147 cinnamon-settings-daemon
148 gnome.libgnomekbd
149 orca
150
151 # theme
152 gnome.adwaita-icon-theme
153 hicolor-icon-theme
154 gnome.gnome-themes-extra
155 gtk3.out
156 mint-artwork
157 mint-themes
158 mint-x-icons
159 mint-y-icons
160 vanilla-dmz
161
162 # other
163 glib # for gsettings
164 shared-mime-info # for update-mime-database
165 xdg-user-dirs
166 ];
167
168 # Override GSettings schemas
169 environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
170
171 environment.pathsToLink = [
172 # FIXME: modules should link subdirs of `/share` rather than relying on this
173 "/share" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
174 ];
175
176 # Shell integration for VTE terminals
177 programs.bash.vteIntegration = mkDefault true;
178 programs.zsh.vteIntegration = mkDefault true;
179
180 # Harmonize Qt5 applications under Pantheon
181 qt5.enable = true;
182 qt5.platformTheme = "gnome";
183 qt5.style = "adwaita";
184
185 # Default Fonts
186 fonts.fonts = with pkgs; [
187 source-code-pro # Default monospace font in 3.32
188 ubuntu_font_family # required for default theme
189 ];
190 })
191
192 (mkIf serviceCfg.apps.enable {
193 programs.geary.enable = mkDefault true;
194 programs.gnome-disks.enable = mkDefault true;
195 programs.gnome-terminal.enable = mkDefault true;
196 programs.evince.enable = mkDefault true;
197 programs.file-roller.enable = mkDefault true;
198
199 environment.systemPackages = (with pkgs // pkgs.gnome // pkgs.cinnamon; pkgs.gnome.removePackagesByName [
200 # cinnamon team apps
201 blueberry
202 warpinator
203
204 # external apps shipped with linux-mint
205 hexchat
206 gnome-calculator
207 ] config.environment.cinnamon.excludePackages);
208 })
209 ];
210}