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