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 "Deepin desktop manager";
19 extraGSettingsOverrides = mkOption {
20 default = "";
21 type = types.lines;
22 description = "Additional gsettings overrides.";
23 };
24 extraGSettingsOverridePackages = mkOption {
25 default = [ ];
26 type = types.listOf types.path;
27 description = "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 = "List of default packages to exclude from the configuration";
35 };
36
37 };
38
39 config = mkIf cfg.enable
40 {
41 services.displayManager.sessionPackages = [ pkgs.deepin.dde-session ];
42 services.displayManager.defaultSession = mkDefault "dde-x11";
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.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 programs.gnupg.agent.pinentryPackage = mkDefault pkgs.pinentry-qt;
70
71 fonts.packages = with pkgs; [ noto-fonts ];
72 xdg.mime.enable = true;
73 xdg.menus.enable = true;
74 xdg.icons.enable = true;
75 xdg.portal.enable = mkDefault true;
76 xdg.portal.extraPortals = mkDefault [
77 (pkgs.xdg-desktop-portal-gtk.override {
78 buildPortalsInGnome = false;
79 })
80 ];
81
82 # https://github.com/NixOS/nixpkgs/pull/247766#issuecomment-1722839259
83 xdg.portal.config.deepin.default = mkDefault [ "gtk" ];
84
85 environment.sessionVariables = {
86 NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
87 DDE_POLKIT_AGENT_PLUGINS_DIRS = [ "${pkgs.deepin.dpa-ext-gnomekeyring}/lib/polkit-1-dde/plugins" ];
88 };
89
90 environment.pathsToLink = [
91 "/lib/dde-dock/plugins"
92 "/lib/dde-control-center"
93 "/lib/dde-session-shell"
94 "/lib/dde-file-manager"
95 "/share/backgrounds"
96 "/share/wallpapers"
97 "/share/dde-daemon"
98 "/share/dsg"
99 "/share/deepin-themes"
100 "/share/deepin"
101 ];
102
103 environment.etc = {
104 "deepin-installer.conf".text = ''
105 system_info_vendor_name="Copyright (c) 2003-2023 NixOS contributors"
106 '';
107 };
108
109 systemd.tmpfiles.rules = [
110 "d /var/lib/AccountsService 0775 root root - -"
111 "C /var/lib/AccountsService/icons 0775 root root - ${pkgs.deepin.dde-account-faces}/var/lib/AccountsService/icons"
112 ];
113
114 security.pam.services.dde-lock.text = ''
115 # original at {dde-session-shell}/etc/pam.d/dde-lock
116 auth substack login
117 account include login
118 password substack login
119 session include login
120 '';
121
122 environment.systemPackages = with pkgs; with deepin;
123 let
124 requiredPackages = [
125 pciutils # for dtkcore/startdde
126 xdotool # for dde-daemon
127 glib # for gsettings program / gdbus
128 gtk3 # for gtk-launch program
129 xdg-user-dirs # Update user dirs
130 util-linux # runuser
131 polkit_gnome
132 librsvg # dde-api use rsvg-convert
133 lshw # for dtkcore
134 libsForQt5.kde-gtk-config # deepin-api/gtk-thumbnailer need
135 libsForQt5.kglobalaccel
136 xsettingsd # lightdm-deepin-greeter
137 dtkcommon
138 dtkcore
139 dtkgui
140 dtkwidget
141 dtkdeclarative
142 qt5platform-plugins
143 deepin-pw-check
144 deepin-turbo
145
146 dde-account-faces
147 deepin-icon-theme
148 deepin-desktop-theme
149 deepin-sound-theme
150 deepin-gtk-theme
151 deepin-wallpapers
152 deepin-desktop-base
153
154 startdde
155 dde-dock
156 dde-launchpad
157 dde-session-ui
158 dde-session-shell
159 dde-file-manager
160 dde-control-center
161 dde-network-core
162 dde-clipboard
163 dde-calendar
164 dde-polkit-agent
165 dpa-ext-gnomekeyring
166 deepin-desktop-schemas
167 deepin-terminal
168 deepin-kwin
169 dde-session
170 dde-widgets
171 dde-appearance
172 dde-application-manager
173 deepin-service-manager
174 ];
175 optionalPackages = [
176 onboard # dde-dock plugin
177 deepin-calculator
178 deepin-compressor
179 deepin-editor
180 deepin-picker
181 deepin-draw
182 deepin-music
183 deepin-movie-reborn
184 deepin-system-monitor
185 deepin-shortcut-viewer
186 # freeimage has knownVulnerabilties, don't install packages using freeiamge by default
187 # deepin-album
188 # deepin-camera
189 # deepin-image-viewer
190 # deepin-screen-recorder
191 ];
192 in
193 requiredPackages
194 ++ utils.removePackagesByName optionalPackages config.environment.deepin.excludePackages;
195
196 services.dbus.packages = with pkgs.deepin; [
197 dde-dock
198 dde-launchpad
199 dde-session-ui
200 dde-session-shell
201 dde-file-manager
202 dde-control-center
203 dde-calendar
204 dde-clipboard
205 deepin-kwin
206 deepin-pw-check
207 dde-widgets
208 dde-session
209 dde-appearance
210 dde-application-manager
211 deepin-service-manager
212 ];
213
214 systemd.packages = with pkgs.deepin; [
215 dde-launchpad
216 dde-file-manager
217 dde-calendar
218 dde-clipboard
219 deepin-kwin
220 dde-appearance
221 dde-widgets
222 dde-session
223 dde-application-manager
224 deepin-service-manager
225 ];
226 };
227}
228