at 21.11-pre 6.8 kB view raw
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}