at 23.11-pre 7.7 kB view raw
1{ config, lib, pkgs, utils, ... }: 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 15 notExcluded = pkg: (!(lib.elem pkg config.environment.cinnamon.excludePackages)); 16in 17 18{ 19 options = { 20 services.cinnamon = { 21 apps.enable = mkEnableOption (lib.mdDoc "Cinnamon default applications"); 22 }; 23 24 services.xserver.desktopManager.cinnamon = { 25 enable = mkEnableOption (lib.mdDoc "the cinnamon desktop manager"); 26 27 sessionPath = mkOption { 28 default = []; 29 type = types.listOf types.package; 30 example = literalExpression "[ pkgs.gnome.gpaste ]"; 31 description = lib.mdDoc '' 32 Additional list of packages to be added to the session search path. 33 Useful for GSettings-conditional autostart. 34 35 Note that this should be a last resort; patching the package is preferred (see GPaste). 36 ''; 37 }; 38 39 extraGSettingsOverrides = mkOption { 40 default = ""; 41 type = types.lines; 42 description = lib.mdDoc "Additional gsettings overrides."; 43 }; 44 45 extraGSettingsOverridePackages = mkOption { 46 default = []; 47 type = types.listOf types.path; 48 description = lib.mdDoc "List of packages for which gsettings are overridden."; 49 }; 50 }; 51 52 environment.cinnamon.excludePackages = mkOption { 53 default = []; 54 example = literalExpression "[ pkgs.cinnamon.blueberry ]"; 55 type = types.listOf types.package; 56 description = lib.mdDoc "Which packages cinnamon should exclude from the default environment"; 57 }; 58 59 }; 60 61 config = mkMerge [ 62 (mkIf cfg.enable { 63 services.xserver.displayManager.sessionPackages = [ pkgs.cinnamon.cinnamon-common ]; 64 65 services.xserver.displayManager.lightdm.greeters.slick = { 66 enable = mkDefault true; 67 68 # Taken from mint-artwork.gschema.override 69 theme = mkIf (notExcluded pkgs.cinnamon.mint-themes) { 70 name = mkDefault "Mint-Y-Aqua"; 71 package = mkDefault pkgs.cinnamon.mint-themes; 72 }; 73 iconTheme = mkIf (notExcluded pkgs.cinnamon.mint-x-icons) { 74 name = mkDefault "Mint-Y-Aqua"; 75 package = mkDefault pkgs.cinnamon.mint-x-icons; 76 }; 77 cursorTheme = mkIf (notExcluded pkgs.cinnamon.mint-cursor-themes) { 78 name = mkDefault "Bibata-Modern-Classic"; 79 package = mkDefault pkgs.cinnamon.mint-cursor-themes; 80 }; 81 }; 82 services.xserver.displayManager.sessionCommands = '' 83 if test "$XDG_CURRENT_DESKTOP" = "Cinnamon"; then 84 true 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 89 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 fi 96 ''; 97 98 # Default services 99 services.blueman.enable = mkDefault true; 100 hardware.bluetooth.enable = mkDefault true; 101 hardware.pulseaudio.enable = mkDefault true; 102 security.polkit.enable = true; 103 services.accounts-daemon.enable = true; 104 services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true)); 105 services.dbus.packages = with pkgs.cinnamon; [ 106 cinnamon-common 107 cinnamon-screensaver 108 nemo-with-extensions 109 xapp 110 ]; 111 services.cinnamon.apps.enable = mkDefault true; 112 services.gnome.evolution-data-server.enable = true; 113 services.gnome.glib-networking.enable = true; 114 services.gnome.gnome-keyring.enable = true; 115 services.gvfs.enable = true; 116 services.udisks2.enable = true; 117 services.upower.enable = mkDefault config.powerManagement.enable; 118 services.xserver.libinput.enable = mkDefault true; 119 services.xserver.updateDbusEnvironment = true; 120 networking.networkmanager.enable = mkDefault true; 121 122 # Enable colord server 123 services.colord.enable = true; 124 125 # Enable dconf 126 programs.dconf.enable = true; 127 128 # Enable org.a11y.Bus 129 services.gnome.at-spi2-core.enable = true; 130 131 # Fix lockscreen 132 security.pam.services = { 133 cinnamon-screensaver = {}; 134 }; 135 136 environment.systemPackages = with pkgs.cinnamon // pkgs; ([ 137 desktop-file-utils 138 139 # common-files 140 cinnamon-common 141 cinnamon-session 142 cinnamon-desktop 143 cinnamon-menus 144 cinnamon-translations 145 146 # utils needed by some scripts 147 killall 148 149 # session requirements 150 cinnamon-screensaver 151 # cinnamon-killer-daemon: provided by cinnamon-common 152 networkmanagerapplet # session requirement - also nm-applet not needed 153 154 # For a polkit authentication agent 155 polkit_gnome 156 157 # packages 158 nemo-with-extensions 159 cinnamon-control-center 160 cinnamon-settings-daemon 161 libgnomekbd 162 163 # theme 164 gnome.adwaita-icon-theme 165 gnome.gnome-themes-extra 166 gtk3.out 167 168 # other 169 glib # for gsettings 170 xdg-user-dirs 171 ] ++ utils.removePackagesByName [ 172 # accessibility 173 onboard 174 orca 175 176 # theme 177 sound-theme-freedesktop 178 nixos-artwork.wallpapers.simple-dark-gray 179 mint-artwork 180 mint-cursor-themes 181 mint-themes 182 mint-x-icons 183 mint-y-icons 184 xapp # provides some xapp-* icons 185 ] config.environment.cinnamon.excludePackages); 186 187 xdg.mime.enable = true; 188 xdg.icons.enable = true; 189 190 # Override GSettings schemas 191 environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas"; 192 193 environment.pathsToLink = [ 194 # FIXME: modules should link subdirs of `/share` rather than relying on this 195 "/share" # TODO: https://github.com/NixOS/nixpkgs/issues/47173 196 ]; 197 198 # Shell integration for VTE terminals 199 programs.bash.vteIntegration = mkDefault true; 200 programs.zsh.vteIntegration = mkDefault true; 201 202 # Harmonize Qt applications under Cinnamon 203 qt.enable = true; 204 qt.platformTheme = "gnome"; 205 qt.style = "adwaita"; 206 207 # Default Fonts 208 fonts.fonts = with pkgs; [ 209 source-code-pro # Default monospace font in 3.32 210 ubuntu_font_family # required for default theme 211 ]; 212 }) 213 214 (mkIf serviceCfg.apps.enable { 215 programs.geary.enable = mkDefault true; 216 programs.gnome-disks.enable = mkDefault true; 217 programs.gnome-terminal.enable = mkDefault true; 218 programs.file-roller.enable = mkDefault true; 219 220 environment.systemPackages = with pkgs // pkgs.gnome // pkgs.cinnamon; utils.removePackagesByName [ 221 # cinnamon team apps 222 bulky 223 warpinator 224 225 # cinnamon xapp 226 xviewer 227 xreader 228 xed-editor 229 xplayer 230 pix 231 232 # external apps shipped with linux-mint 233 hexchat 234 gnome-calculator 235 gnome-calendar 236 gnome-screenshot 237 ] config.environment.cinnamon.excludePackages; 238 }) 239 ]; 240}