at master 9.2 kB view raw
1{ 2 lib, 3 pkgs, 4 config, 5 utils, 6 ... 7}: 8 9let 10 inherit (lib) 11 concatMapStrings 12 literalExpression 13 mkDefault 14 mkEnableOption 15 mkIf 16 mkOption 17 types 18 ; 19 20 cfg = config.services.xserver.desktopManager.budgie; 21 22 nixos-background-light = pkgs.nixos-artwork.wallpapers.nineish; 23 nixos-background-dark = pkgs.nixos-artwork.wallpapers.nineish-dark-gray; 24 25 nixos-gsettings-overrides = pkgs.budgie-gsettings-overrides.override { 26 inherit (cfg) extraGSettingsOverrides extraGSettingsOverridePackages; 27 inherit nixos-background-dark nixos-background-light; 28 }; 29 30 nixos-background-info = pkgs.writeTextFile { 31 name = "nixos-background-info"; 32 text = '' 33 <?xml version="1.0"?> 34 <!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd"> 35 <wallpapers> 36 <wallpaper deleted="false"> 37 <name>Nineish</name> 38 <filename>${nixos-background-light.gnomeFilePath}</filename> 39 <options>zoom</options> 40 <shade_type>solid</shade_type> 41 <pcolor>#d1dcf8</pcolor> 42 <scolor>#e3ebfe</scolor> 43 </wallpaper> 44 <wallpaper deleted="false"> 45 <name>Nineish Dark Gray</name> 46 <filename>${nixos-background-dark.gnomeFilePath}</filename> 47 <options>zoom</options> 48 <shade_type>solid</shade_type> 49 <pcolor>#151515</pcolor> 50 <scolor>#262626</scolor> 51 </wallpaper> 52 </wallpapers> 53 ''; 54 destination = "/share/gnome-background-properties/nixos.xml"; 55 }; 56 57 budgie-control-center' = pkgs.budgie-control-center.override { 58 enableSshSocket = config.services.openssh.startWhenNeeded; 59 }; 60 61 notExcluded = pkg: utils.disablePackageByName pkg config.environment.budgie.excludePackages; 62in 63{ 64 meta.maintainers = lib.teams.budgie.members; 65 66 options = { 67 services.xserver.desktopManager.budgie = { 68 enable = mkEnableOption "the Budgie desktop"; 69 70 sessionPath = mkOption { 71 description = '' 72 Additional list of packages to be added to the session search path. 73 Useful for GSettings-conditional autostart. 74 75 Note that this should be a last resort; patching the package is preferred (see GPaste). 76 ''; 77 type = types.listOf types.package; 78 default = [ ]; 79 example = literalExpression "[ pkgs.gpaste ]"; 80 }; 81 82 extraGSettingsOverrides = mkOption { 83 description = "Additional GSettings overrides."; 84 type = types.lines; 85 default = ""; 86 }; 87 88 extraGSettingsOverridePackages = mkOption { 89 description = "List of packages for which GSettings are overridden."; 90 type = types.listOf types.path; 91 default = [ ]; 92 }; 93 94 extraPlugins = mkOption { 95 description = "Extra plugins for the Budgie desktop"; 96 type = types.listOf types.package; 97 default = [ ]; 98 example = literalExpression "[ pkgs.budgie-analogue-clock-applet ]"; 99 }; 100 }; 101 102 environment.budgie.excludePackages = mkOption { 103 description = "Which packages Budgie should exclude from the default environment."; 104 type = types.listOf types.package; 105 default = [ ]; 106 example = literalExpression "[ pkgs.mate-terminal ]"; 107 }; 108 }; 109 110 config = mkIf cfg.enable { 111 services.displayManager.sessionPackages = with pkgs; [ 112 budgie-desktop 113 ]; 114 115 services.xserver.displayManager.lightdm.greeters.slick = { 116 enable = mkDefault true; 117 theme = mkDefault { 118 name = "Qogir"; 119 package = pkgs.qogir-theme; 120 }; 121 iconTheme = mkDefault { 122 name = "Qogir"; 123 package = pkgs.qogir-icon-theme; 124 }; 125 cursorTheme = mkDefault { 126 name = "Qogir"; 127 package = pkgs.qogir-icon-theme; 128 }; 129 }; 130 131 services.xserver.desktopManager.budgie.sessionPath = [ pkgs.budgie-desktop-view ]; 132 133 environment.extraInit = '' 134 ${concatMapStrings (p: '' 135 if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then 136 export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name} 137 fi 138 if [ -d "${p}/lib/girepository-1.0" ]; then 139 export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0 140 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib 141 fi 142 '') cfg.sessionPath} 143 '' 144 + lib.optionalString config.services.gnome.gcr-ssh-agent.enable '' 145 # Hack: https://bugzilla.redhat.com/show_bug.cgi?id=2250704 still 146 # applies to sessions not managed by systemd. 147 if [ -z "$SSH_AUTH_SOCK" ] && [ -n "$XDG_RUNTIME_DIR" ]; then 148 export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gcr/ssh" 149 fi 150 ''; 151 152 environment.systemPackages = 153 with pkgs; 154 [ 155 # Budgie Desktop. 156 budgie-backgrounds 157 budgie-control-center' 158 (budgie-desktop-with-plugins.override { plugins = cfg.extraPlugins; }) 159 budgie-desktop-view 160 budgie-screensaver 161 budgie-session 162 163 # Required by Budgie Menu. 164 gnome-menus 165 166 # Required by Budgie Control Center. 167 zenity 168 169 # Provides `gsettings`. 170 glib 171 172 # Update user directories. 173 xdg-user-dirs 174 ] 175 ++ lib.optional config.networking.networkmanager.enable pkgs.networkmanagerapplet 176 ++ (utils.removePackagesByName [ 177 nemo 178 mate.eom 179 mate.pluma 180 mate.atril 181 mate.engrampa 182 mate.mate-calc 183 mate.mate-system-monitor 184 vlc 185 186 # Desktop themes. 187 qogir-theme 188 qogir-icon-theme 189 nixos-background-info 190 191 # Default settings. 192 nixos-gsettings-overrides 193 ] config.environment.budgie.excludePackages) 194 ++ cfg.sessionPath; 195 196 # Both budgie-desktop-view and nemo defaults to this emulator. 197 programs.gnome-terminal.enable = mkDefault (notExcluded pkgs.gnome-terminal); 198 199 # Fonts. 200 fonts.packages = [ 201 pkgs.noto-fonts 202 pkgs.hack-font 203 ]; 204 fonts.fontconfig.defaultFonts = { 205 sansSerif = mkDefault [ "Noto Sans" ]; 206 monospace = mkDefault [ "Hack" ]; 207 }; 208 209 environment.pathsToLink = [ 210 "/share" # TODO: https://github.com/NixOS/nixpkgs/issues/47173 211 ]; 212 213 # GSettings overrides. 214 environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas"; 215 216 # Required by Budgie Desktop. 217 services.xserver.updateDbusEnvironment = true; 218 programs.dconf.enable = true; 219 220 # Required by Budgie Screensaver. 221 security.pam.services.budgie-screensaver = { }; 222 223 # Required by Budgie's Polkit Dialog. 224 security.polkit.enable = mkDefault true; 225 226 # Required by Budgie Panel plugins and/or Budgie Control Center panels. 227 networking.networkmanager.enable = mkDefault true; # for BCC's Network panel. 228 programs.nm-applet.enable = config.networking.networkmanager.enable; # Budgie has no Network applet. 229 programs.nm-applet.indicator = true; # Budgie uses AppIndicators. 230 231 hardware.bluetooth.enable = mkDefault true; # for Budgie's Status Indicator and BCC's Bluetooth panel. 232 233 xdg.portal.enable = mkDefault true; # for BCC's Applications panel. 234 xdg.portal.extraPortals = with pkgs; [ 235 xdg-desktop-portal-gtk # provides a XDG Portals implementation. 236 ]; 237 xdg.portal.configPackages = mkDefault [ pkgs.budgie-desktop ]; 238 239 services.geoclue2.enable = mkDefault true; # for BCC's Privacy > Location Services panel. 240 services.upower.enable = config.powerManagement.enable; # for Budgie's Status Indicator and BCC's Power panel. 241 services.libinput.enable = mkDefault true; # for BCC's Mouse panel. 242 services.colord.enable = mkDefault true; # for BCC's Color panel. 243 services.gnome.at-spi2-core.enable = mkDefault true; # for BCC's A11y panel. 244 services.accounts-daemon.enable = mkDefault true; # for BCC's Users panel. 245 services.udisks2.enable = mkDefault true; # for BCC's Details panel. 246 247 # For BCC's Online Accounts panel. 248 services.gnome.gnome-online-accounts.enable = mkDefault true; 249 250 # For BCC's Printers panel. 251 services.printing.enable = mkDefault true; 252 services.system-config-printer.enable = config.services.printing.enable; 253 254 # For BCC's Sharing panel. 255 services.dleyna.enable = mkDefault true; 256 services.gnome.gnome-user-share.enable = mkDefault true; 257 services.gnome.rygel.enable = mkDefault true; 258 259 # Other default services. 260 services.gnome.evolution-data-server.enable = mkDefault true; 261 services.gnome.glib-networking.enable = mkDefault true; 262 services.gnome.gnome-keyring.enable = mkDefault true; 263 services.gnome.gcr-ssh-agent.enable = mkDefault true; 264 services.gnome.gnome-settings-daemon.enable = mkDefault true; 265 services.gvfs.enable = mkDefault true; 266 267 # Register packages for DBus. 268 services.dbus.packages = [ 269 budgie-control-center' 270 ]; 271 272 # Register packages for udev. 273 services.udev.packages = with pkgs; [ 274 magpie 275 ]; 276 277 # Shell integration for MATE Terminal. 278 programs.bash.vteIntegration = true; 279 programs.zsh.vteIntegration = true; 280 }; 281}