at 23.11-pre 6.8 kB view raw
1{ config, lib, pkgs, utils, ... }: 2 3with lib; 4 5let 6 xcfg = config.services.xserver; 7 cfg = xcfg.desktopManager.deepin; 8 9 nixos-gsettings-overrides = pkgs.deepin.dde-gsettings-schemas.override { 10 extraGSettingsOverridePackages = cfg.extraGSettingsOverridePackages; 11 extraGSettingsOverrides = cfg.extraGSettingsOverrides; 12 }; 13in 14{ 15 options = { 16 17 services.xserver.desktopManager.deepin = { 18 enable = mkEnableOption (lib.mdDoc "Enable Deepin desktop manager"); 19 extraGSettingsOverrides = mkOption { 20 default = ""; 21 type = types.lines; 22 description = lib.mdDoc "Additional gsettings overrides."; 23 }; 24 extraGSettingsOverridePackages = mkOption { 25 default = [ ]; 26 type = types.listOf types.path; 27 description = lib.mdDoc "List of packages for which gsettings are overridden."; 28 }; 29 }; 30 31 environment.deepin.excludePackages = mkOption { 32 default = [ ]; 33 type = types.listOf types.package; 34 description = lib.mdDoc "List of default packages to exclude from the configuration"; 35 }; 36 37 }; 38 39 config = mkIf cfg.enable 40 { 41 services.xserver.displayManager.sessionPackages = [ pkgs.deepin.startdde ]; 42 services.xserver.displayManager.defaultSession = mkDefault "deepin"; 43 44 # Update the DBus activation environment after launching the desktop manager. 45 services.xserver.displayManager.sessionCommands = '' 46 ${lib.getBin pkgs.dbus}/bin/dbus-update-activation-environment --systemd --all 47 ''; 48 49 hardware.bluetooth.enable = mkDefault true; 50 hardware.pulseaudio.enable = mkDefault true; 51 security.polkit.enable = true; 52 53 services.deepin.dde-daemon.enable = mkForce true; 54 services.deepin.dde-api.enable = mkForce true; 55 services.deepin.app-services.enable = mkForce true; 56 57 services.colord.enable = mkDefault true; 58 services.accounts-daemon.enable = mkDefault true; 59 services.gvfs.enable = mkDefault true; 60 services.gnome.glib-networking.enable = mkDefault true; 61 services.gnome.gnome-keyring.enable = mkDefault true; 62 services.bamf.enable = mkDefault true; 63 64 services.xserver.libinput.enable = mkDefault true; 65 services.udisks2.enable = true; 66 services.upower.enable = mkDefault config.powerManagement.enable; 67 networking.networkmanager.enable = mkDefault true; 68 programs.dconf.enable = mkDefault true; 69 70 fonts.fonts = with pkgs; [ noto-fonts ]; 71 xdg.mime.enable = true; 72 xdg.menus.enable = true; 73 xdg.icons.enable = true; 74 xdg.portal.enable = mkDefault true; 75 xdg.portal.extraPortals = mkDefault [ 76 (pkgs.xdg-desktop-portal-gtk.override { 77 buildPortalsInGnome = false; 78 }) 79 ]; 80 81 environment.sessionVariables = { 82 NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas"; 83 DDE_POLKIT_AGENT_PLUGINS_DIRS = [ "${pkgs.deepin.dpa-ext-gnomekeyring}/lib/polkit-1-dde/plugins" ]; 84 }; 85 86 environment.pathsToLink = [ 87 "/lib/dde-dock/plugins" 88 "/lib/dde-control-center" 89 "/lib/dde-session-shell" 90 "/lib/dde-file-manager" 91 "/share/backgrounds" 92 "/share/wallpapers" 93 ]; 94 95 environment.etc = { 96 "distribution.info".text = '' 97 [Distribution] 98 Name=NixOS 99 WebsiteName=www.nixos.org 100 Website=https://www.nixos.org 101 Logo=${pkgs.nixos-icons}/share/icons/hicolor/96x96/apps/nix-snowflake.png 102 LogoLight=${pkgs.nixos-icons}/share/icons/hicolor/32x32/apps/nix-snowflake.png 103 LogoTransparent=${pkgs.deepin.deepin-desktop-base}/share/pixmaps/distribution_logo_transparent.svg 104 ''; 105 "deepin-installer.conf".text = '' 106 system_info_vendor_name="Copyright (c) 2003-2023 NixOS contributors" 107 ''; 108 }; 109 110 systemd.tmpfiles.rules = [ 111 "d /var/lib/AccountsService 0775 root root - -" 112 "C /var/lib/AccountsService/icons 0775 root root - ${pkgs.deepin.dde-account-faces}/var/lib/AccountsService/icons" 113 ]; 114 115 security.pam.services.dde-lock.text = '' 116 # original at {dde-session-shell}/etc/pam.d/dde-lock 117 auth substack login 118 account include login 119 password substack login 120 session include login 121 ''; 122 123 environment.systemPackages = with pkgs; with deepin; 124 let 125 requiredPackages = [ 126 pciutils # for dtkcore/startdde 127 xdotool # for dde-daemon 128 glib # for gsettings program / gdbus 129 gtk3 # for gtk-launch program 130 xdg-user-dirs # Update user dirs 131 util-linux # runuser 132 polkit_gnome 133 librsvg # dde-api use rsvg-convert 134 lshw # for dtkcore 135 libsForQt5.kde-gtk-config # deepin-api/gtk-thumbnailer need 136 libsForQt5.kglobalaccel 137 xsettingsd # lightdm-deepin-greeter 138 qt5platform-plugins 139 deepin-pw-check 140 deepin-turbo 141 142 dde-account-faces 143 deepin-icon-theme 144 deepin-sound-theme 145 deepin-gtk-theme 146 deepin-wallpapers 147 148 startdde 149 dde-dock 150 dde-launcher 151 dde-session-ui 152 dde-session-shell 153 dde-file-manager 154 dde-control-center 155 dde-network-core 156 dde-clipboard 157 dde-calendar 158 dde-polkit-agent 159 dpa-ext-gnomekeyring 160 deepin-desktop-schemas 161 deepin-terminal 162 dde-kwin 163 deepin-kwin 164 ]; 165 optionalPackages = [ 166 onboard # dde-dock plugin 167 deepin-camera 168 deepin-calculator 169 deepin-compressor 170 deepin-editor 171 deepin-picker 172 deepin-draw 173 deepin-album 174 deepin-image-viewer 175 deepin-music 176 deepin-movie-reborn 177 deepin-system-monitor 178 deepin-screen-recorder 179 deepin-shortcut-viewer 180 ]; 181 in 182 requiredPackages 183 ++ utils.removePackagesByName optionalPackages config.environment.deepin.excludePackages; 184 185 services.dbus.packages = with pkgs.deepin; [ 186 dde-dock 187 dde-launcher 188 dde-session-ui 189 dde-session-shell 190 dde-file-manager 191 dde-control-center 192 dde-calendar 193 dde-clipboard 194 dde-kwin 195 deepin-kwin 196 deepin-pw-check 197 ]; 198 199 systemd.packages = with pkgs.deepin; [ 200 dde-launcher 201 dde-file-manager 202 dde-calendar 203 dde-clipboard 204 deepin-kwin 205 ]; 206 }; 207} 208