grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / x11 / desktop-managers / cinnamon.nix
blobcd5c9e1c948fca89c8f16b2ec70ef0c3e0718d1f
1 { config, lib, pkgs, utils, ... }:
3 with lib;
5 let
7   cfg = config.services.xserver.desktopManager.cinnamon;
8   serviceCfg = config.services.cinnamon;
10   nixos-gsettings-overrides = pkgs.cinnamon-gsettings-overrides.override {
11     extraGSettingsOverridePackages = cfg.extraGSettingsOverridePackages;
12     extraGSettingsOverrides = cfg.extraGSettingsOverrides;
13   };
15   notExcluded = pkg: (!(lib.elem pkg config.environment.cinnamon.excludePackages));
19   options = {
20     services.cinnamon = {
21       apps.enable = mkEnableOption "Cinnamon default applications";
22     };
24     services.xserver.desktopManager.cinnamon = {
25       enable = mkEnableOption "the cinnamon desktop manager";
27       sessionPath = mkOption {
28         default = [];
29         type = types.listOf types.package;
30         example = literalExpression "[ pkgs.gpaste ]";
31         description = ''
32           Additional list of packages to be added to the session search path.
33           Useful for GSettings-conditional autostart.
35           Note that this should be a last resort; patching the package is preferred (see GPaste).
36         '';
37       };
39       extraGSettingsOverrides = mkOption {
40         default = "";
41         type = types.lines;
42         description = "Additional gsettings overrides.";
43       };
45       extraGSettingsOverridePackages = mkOption {
46         default = [];
47         type = types.listOf types.path;
48         description = "List of packages for which gsettings are overridden.";
49       };
50     };
52     environment.cinnamon.excludePackages = mkOption {
53       default = [];
54       example = literalExpression "[ pkgs.blueman ]";
55       type = types.listOf types.package;
56       description = "Which packages cinnamon should exclude from the default environment";
57     };
59   };
61   config = mkMerge [
62     (mkIf cfg.enable {
63       services.displayManager.sessionPackages = [ pkgs.cinnamon-common ];
65       services.xserver.displayManager.lightdm.greeters.slick = {
66         enable = mkDefault true;
68         # Taken from mint-artwork.gschema.override
69         theme = mkIf (notExcluded pkgs.mint-themes) {
70           name = mkDefault "Mint-Y-Aqua";
71           package = mkDefault pkgs.mint-themes;
72         };
73         iconTheme = mkIf (notExcluded pkgs.mint-y-icons) {
74           name = mkDefault "Mint-Y-Sand";
75           package = mkDefault pkgs.mint-y-icons;
76         };
77         cursorTheme = mkIf (notExcluded pkgs.mint-cursor-themes) {
78           name = mkDefault "Bibata-Modern-Classic";
79           package = mkDefault pkgs.mint-cursor-themes;
80         };
81       };
83       # Have to take care of GDM + Cinnamon on Wayland users
84       environment.extraInit = ''
85         ${concatMapStrings (p: ''
86           if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
87             export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
88           fi
90           if [ -d "${p}/lib/girepository-1.0" ]; then
91             export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0
92             export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
93           fi
94         '') cfg.sessionPath}
95       '';
97       # Default services
98       services.blueman.enable = mkDefault (notExcluded pkgs.blueman);
99       hardware.bluetooth.enable = mkDefault true;
100       security.polkit.enable = true;
101       services.accounts-daemon.enable = true;
102       services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
103       services.dbus.packages = with pkgs; [
104         cinnamon-common
105         cinnamon-screensaver
106         nemo-with-extensions
107         xapp
108       ];
109       services.cinnamon.apps.enable = mkDefault true;
110       services.gnome.evolution-data-server.enable = true;
111       services.gnome.glib-networking.enable = true;
112       services.gnome.gnome-keyring.enable = true;
113       services.gvfs.enable = true;
114       services.switcherooControl.enable = mkDefault true; # xapp-gpu-offload-helper
115       services.touchegg.enable = mkDefault true;
116       services.udisks2.enable = true;
117       services.upower.enable = mkDefault config.powerManagement.enable;
118       services.libinput.enable = mkDefault true;
119       services.xserver.updateDbusEnvironment = true;
120       networking.networkmanager.enable = mkDefault true;
122       # Enable colord server
123       services.colord.enable = true;
125       # Enable dconf
126       programs.dconf.enable = true;
128       # Enable org.a11y.Bus
129       services.gnome.at-spi2-core.enable = true;
131       # Fix lockscreen
132       security.pam.services = {
133         cinnamon-screensaver = {};
134       };
136       environment.systemPackages = with pkgs; ([
137         desktop-file-utils
139         # common-files
140         cinnamon-common
141         cinnamon-session
142         cinnamon-desktop
143         cinnamon-menus
144         cinnamon-translations
146         # utils needed by some scripts
147         killall
149         # session requirements
150         cinnamon-screensaver
151         # cinnamon-killer-daemon: provided by cinnamon-common
152         networkmanagerapplet # session requirement - also nm-applet not needed
154         # For a polkit authentication agent
155         polkit_gnome
157         # packages
158         nemo-with-extensions
159         gnome-online-accounts-gtk
160         cinnamon-control-center
161         cinnamon-settings-daemon
162         libgnomekbd
164         # theme
165         adwaita-icon-theme
166         gnome-themes-extra
167         gtk3.out
169         # other
170         glib # for gsettings
171         xdg-user-dirs
172       ] ++ utils.removePackagesByName [
173         # accessibility
174         onboard
176         # theme
177         sound-theme-freedesktop
178         nixos-artwork.wallpapers.simple-dark-gray
179         mint-artwork
180         mint-cursor-themes
181         mint-l-icons
182         mint-l-theme
183         mint-themes
184         mint-x-icons
185         mint-y-icons
186         xapp # provides some xapp-* icons
187       ] config.environment.cinnamon.excludePackages);
189       xdg.mime.enable = true;
190       xdg.icons.enable = true;
192       xdg.portal.enable = true;
193       xdg.portal.extraPortals = [
194         pkgs.xdg-desktop-portal-xapp
195         (pkgs.xdg-desktop-portal-gtk.override {
196           # Do not build portals that we already have.
197           buildPortalsInGnome = false;
198         })
199       ];
201       services.orca.enable = mkDefault (notExcluded pkgs.orca);
203       xdg.portal.configPackages = mkDefault [ pkgs.cinnamon-common ];
205       # Override GSettings schemas
206       environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
208       environment.pathsToLink = [
209         # FIXME: modules should link subdirs of `/share` rather than relying on this
210         "/share" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
211       ];
213       # Shell integration for VTE terminals
214       programs.bash.vteIntegration = mkDefault true;
215       programs.zsh.vteIntegration = mkDefault true;
217       # Qt application style
218       qt = {
219         enable = mkDefault true;
220         style = mkDefault "gtk2";
221         platformTheme = mkDefault "gtk2";
222       };
224       # Default Fonts
225       fonts.packages = with pkgs; [
226         dejavu_fonts # Default monospace font in LMDE 6+
227         ubuntu-classic # required for default theme
228       ];
229     })
231     (mkIf serviceCfg.apps.enable {
232       programs.gnome-disks.enable = mkDefault (notExcluded pkgs.gnome-disk-utility);
233       programs.gnome-terminal.enable = mkDefault (notExcluded pkgs.gnome-terminal);
234       programs.file-roller.enable = mkDefault (notExcluded pkgs.file-roller);
236       environment.systemPackages = with pkgs; utils.removePackagesByName [
237         # cinnamon team apps
238         bulky
239         warpinator
241         # cinnamon xapp
242         xviewer
243         xreader
244         xed-editor
245         xplayer
246         pix
248         # external apps shipped with linux-mint
249         gnome-calculator
250         gnome-calendar
251         gnome-screenshot
252       ] config.environment.cinnamon.excludePackages;
253     })
254   ];