about summary refs log tree commit diff
path: root/nixpkgs/pkgs/desktops/deepin
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
committerAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
commit99fcaeccb89621dd492203ce1f2d551c06f228ed (patch)
tree41cb730ae07383004789779b0f6e11cb3f4642a3 /nixpkgs/pkgs/desktops/deepin
parent59c5f5ac8682acc13bb22bc29c7cf02f7d75f01f (diff)
parent75a5ebf473cd60148ba9aec0d219f72e5cf52519 (diff)
downloadnixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.gz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.bz2
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.lz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.xz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.zst
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.zip
Merge branch 'nixos-unstable' of https://github.com/NixOS/nixpkgs
Conflicts:
	nixpkgs/nixos/modules/config/console.nix
	nixpkgs/nixos/modules/services/mail/mailman.nix
	nixpkgs/nixos/modules/services/mail/public-inbox.nix
	nixpkgs/nixos/modules/services/mail/rss2email.nix
	nixpkgs/nixos/modules/services/networking/ssh/sshd.nix
	nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
	nixpkgs/pkgs/applications/networking/irc/weechat/default.nix
	nixpkgs/pkgs/applications/window-managers/sway/default.nix
	nixpkgs/pkgs/build-support/go/module.nix
	nixpkgs/pkgs/build-support/rust/build-rust-package/default.nix
	nixpkgs/pkgs/development/interpreters/python/default.nix
	nixpkgs/pkgs/development/node-packages/overrides.nix
	nixpkgs/pkgs/development/tools/b4/default.nix
	nixpkgs/pkgs/servers/dict/dictd-db.nix
	nixpkgs/pkgs/servers/mail/public-inbox/default.nix
	nixpkgs/pkgs/tools/security/pinentry/default.nix
	nixpkgs/pkgs/tools/text/unoconv/default.nix
	nixpkgs/pkgs/top-level/all-packages.nix
Diffstat (limited to 'nixpkgs/pkgs/desktops/deepin')
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-album/default.nix76
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-calculator/default.nix56
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/default.nix96
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/dont_use_libPath.diff25
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-clone/default.nix73
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-compressor/default.nix71
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-draw/default.nix57
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-editor/default.nix64
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/0001-fix-install-path-for-nix.patch25
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/default.nix82
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-movie-reborn/default.nix140
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-music/default.nix95
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-picker/default.nix58
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/default.nix72
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/use-pkg-config.diff46
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/default.nix97
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/dont_use_libPath.diff36
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-screensaver/default.nix69
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-shortcut-viewer/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-system-monitor/default.nix93
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-terminal/default.nix65
-rw-r--r--nixpkgs/pkgs/desktops/deepin/apps/deepin-voice-note/default.nix77
-rw-r--r--nixpkgs/pkgs/desktops/deepin/artwork/dde-account-faces/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/deepin/artwork/deepin-gtk-theme/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/deepin/artwork/deepin-icon-theme/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/deepin/artwork/deepin-sound-theme/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/deepin/artwork/deepin-wallpapers/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-app-services/default.nix56
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-calendar/default.nix85
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-clipboard/default.nix73
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-control-center/default.nix139
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-control-center/dont-show-endUserLicenseAgreement-for-deepinos.patch29
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-dock/default.nix89
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-file-manager/default.nix144
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-gsettings-schemas/default.nix57
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-kwin/default.nix92
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-launcher/default.nix76
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-network-core/default.nix78
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-polkit-agent/default.nix61
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-session-shell/default.nix112
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dde-session-ui/default.nix108
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/deepin-kwin/default.nix120
-rw-r--r--nixpkgs/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/deepin/default.nix88
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-api/0001-dont-set-PATH.patch54
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-api/default.nix121
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-api/deps.nix210
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0001-fix-wrapped-name-for-verifyExe.patch33
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0002-dont-set-PATH.patch40
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0003-search-in-XDG-directories.patch254
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0004-aviod-use-hardcode-path.patch323
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0005-fix-custom-wallpapers-path.diff22
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/default.nix170
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/deps.nix290
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/deepin-desktop-schemas/default.nix57
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/default.nix84
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/deps.nix75
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/go-dbus-factory/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/go-gir-generator/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/go-lib/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/startdde/0001-avoid-use-hardcode-path.patch153
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/startdde/default.nix102
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-package/startdde/deps.nix236
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/dde-qt-dbus-factory/default.nix53
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/deepin-pdfium/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/deepin-wayland-protocols/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/disomaster/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/docparser/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/dtkcommon/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/dtkcore/default.nix78
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/dtkgui/default.nix72
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/dtkwidget/default.nix80
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/dwayland/default.nix48
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/gio-qt/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/image-editor/default.nix69
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/qt5integration/default.nix59
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/qt5platform-plugins/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/udisks2-qt5/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/deepin/library/util-dfm/default.nix53
-rw-r--r--nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/distribution_logo_transparent.svg243
-rw-r--r--nixpkgs/pkgs/desktops/deepin/misc/deepin-turbo/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/deepin/tools/dde-device-formatter/default.nix69
-rw-r--r--nixpkgs/pkgs/desktops/deepin/tools/deepin-gettext-tools/default.nix50
84 files changed, 6787 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-album/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-album/default.nix
new file mode 100644
index 000000000000..49e2919c2fc0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-album/default.nix
@@ -0,0 +1,76 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, qtbase
+, qtsvg
+, udisks2-qt5
+, gio-qt
+, image-editor
+, glibmm
+, freeimage
+, opencv
+, ffmpeg
+, ffmpegthumbnailer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-album";
+  version = "5.10.9";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-S/oVRD72dtpnvfGV6YfN5/syrmWA44H/1BbmAe0xjAY=";
+  };
+
+  # This patch should be removed after upgrading to 6.0.0
+  postPatch = ''
+    substituteInPlace libUnionImage/CMakeLists.txt \
+      --replace "/usr" "$out"
+    substituteInPlace src/CMakeLists.txt \
+      --replace "/usr" "$out"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    qtbase
+    qtsvg
+    udisks2-qt5
+    gio-qt
+    image-editor
+    glibmm
+    freeimage
+    opencv
+    ffmpeg
+    ffmpegthumbnailer
+  ];
+
+  strictDeps = true;
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A fashion photo manager for viewing and organizing pictures";
+    homepage = "https://github.com/linuxdeepin/deepin-album";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-calculator/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-calculator/default.nix
new file mode 100644
index 000000000000..af3c39a149a1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-calculator/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, qtbase
+, qtsvg
+, dde-qt-dbus-factory
+, cmake
+, qttools
+, pkg-config
+, wrapQtAppsHook
+, gtest
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-calculator";
+  version = "5.8.23";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-MczQWYIQfpSkyA3144y3zly66N0vgcVvTYR6B7Hq1aw=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    qtbase
+    qtsvg
+    dde-qt-dbus-factory
+    gtest
+  ];
+
+  strictDeps = true;
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  meta = with lib; {
+    description = "An easy to use calculator for ordinary users";
+    homepage = "https://github.com/linuxdeepin/deepin-calculator";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/default.nix
new file mode 100644
index 000000000000..a80381f041d1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/default.nix
@@ -0,0 +1,96 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, image-editor
+, qtbase
+, qtmultimedia
+, ffmpeg
+, ffmpegthumbnailer
+, libusb1
+, portaudio
+, libv4l
+, gst_all_1
+, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-camera";
+  version = "1.4.11";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-GQQFwlJNfdsi0GvDRMIorUnlbXrgbYl9H9aBedOm+ZQ=";
+  };
+
+  # QLibrary and dlopen work with LD_LIBRARY_PATH
+  patches = [ ./dont_use_libPath.diff ];
+
+  postPatch = ''
+    substituteInPlace src/CMakeLists.txt \
+      --replace "/usr/share/libimagevisualresult" "${image-editor}/share/libimagevisualresult" \
+      --replace "/usr/include/libusb-1.0" "${lib.getDev libusb1}/include/libusb-1.0"
+    substituteInPlace src/com.deepin.Camera.service \
+      --replace "/usr/bin/qdbus" "${lib.getBin qttools}/bin/qdbus" \
+      --replace "/usr/share" "$out/share"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    image-editor
+    qtbase
+    qtmultimedia
+    ffmpeg
+    ffmpegthumbnailer
+    libusb1
+    portaudio
+    libv4l
+  ] ++ (with gst_all_1 ; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+  ]);
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  strictDeps = true;
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-I${gst_all_1.gstreamer.dev}/include/gstreamer-1.0"
+    "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0"
+  ];
+
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ ffmpeg ffmpegthumbnailer gst_all_1.gstreamer gst_all_1.gst-plugins-base libusb1 libv4l portaudio systemd ]}"
+  ];
+
+  preFixup = ''
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "Tool to view camera, take photo and video";
+    homepage = "https://github.com/linuxdeepin/deepin-camera";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/dont_use_libPath.diff b/nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/dont_use_libPath.diff
new file mode 100644
index 000000000000..b4ef86f79b38
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-camera/dont_use_libPath.diff
@@ -0,0 +1,25 @@
+diff --git a/src/src/mainwindow.cpp b/src/src/mainwindow.cpp
+index d3c6f5c..4817446 100644
+--- a/src/src/mainwindow.cpp
++++ b/src/src/mainwindow.cpp
+@@ -781,19 +781,7 @@ void CMainWindow::slotPopupSettingsDialog()
+ 
+ QString CMainWindow::libPath(const QString &strlib)
+ {
+-    QDir  dir;
+-    QString path  = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
+-    dir.setPath(path);
+-    QStringList list = dir.entryList(QStringList() << (strlib + "*"), QDir::NoDotAndDotDot | QDir::Files); //filter name with strlib
+-
+-    if (list.contains(strlib))
+-        return strlib;
+-
+-    list.sort();
+-    if (list.size() > 0)
+-        return list.last();
+-
+-    return "";
++    return strlib;
+ }
+ 
+ void CMainWindow::reflushSnapshotLabel()
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-clone/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-clone/default.nix
new file mode 100644
index 000000000000..533d2562e625
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-clone/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, qttools
+, pkg-config
+, qtbase
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, libuuid
+, parted
+, partclone
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-clone";
+  version = "5.0.11";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ZOJc8R82R9q87Qpf/J4CXE+xL6nvbsXRIs0boNY+2uk=";
+  };
+
+  postPatch = ''
+    substituteInPlace app/{deepin-clone-ionice,deepin-clone-pkexec,deepin-clone.desktop,com.deepin.pkexec.deepin-clone.policy.tmp} \
+      --replace "/usr" "$out"
+
+    substituteInPlace app/src/corelib/ddevicediskinfo.cpp \
+      --replace "/sbin/blkid" "${libuuid}/bin/blkid"
+
+    substituteInPlace app/src/corelib/helper.cpp \
+      --replace "/bin/lsblk" "${libuuid}/bin/lsblk" \
+      --replace "/sbin/sfdisk" "${libuuid}/bin/sfdisk" \
+      --replace "/sbin/partprobe" "${parted}/bin/partprobe" \
+      --replace "/usr/sbin" "${partclone}/bin"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    libuuid
+    parted
+    partclone
+  ];
+
+  cmakeFlags = [
+    "-DDISABLE_DFM_PLUGIN=YES"
+  ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "Disk and partition backup/restore tool";
+    homepage = "https://github.com/linuxdeepin/deepin-clone";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
+
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-compressor/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-compressor/default.nix
new file mode 100644
index 000000000000..55c1f4d4f293
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-compressor/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, udisks2-qt5
+, cmake
+, qtbase
+, qttools
+, pkg-config
+, kcodecs
+, karchive
+, wrapQtAppsHook
+, minizip
+, libzip
+, libarchive
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-compressor";
+  version = "5.12.15";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-6grnbv9hMKntOmpVcmU5IpAbHM7r0dQWb+SoQYtc5YY=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/source/common/pluginmanager.cpp \
+      --replace "/usr/lib/" "$out/lib/"
+    substituteInPlace src/desktop/deepin-compressor.desktop \
+      --replace "/usr" "$out"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    udisks2-qt5
+    kcodecs
+    karchive
+    minizip
+    libzip
+    libarchive
+  ];
+
+  cmakeFlags = [
+    "-DVERSION=${version}"
+    "-DUSE_TEST=OFF"
+  ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "A fast and lightweight application for creating and extracting archives";
+    homepage = "https://github.com/linuxdeepin/deepin-compressor";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-draw/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-draw/default.nix
new file mode 100644
index 000000000000..c07ca9e0b880
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-draw/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, qttools
+, pkg-config
+, wrapQtAppsHook
+, qtbase
+, qtsvg
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-draw";
+  version = "6.0.5";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-WeubXsshN4tUlIwEHTxHXv1L2dvJ2DZ6qtSPyiVtc98=";
+  };
+
+  postPatch = ''
+    substituteInPlace com.deepin.Draw.service \
+      --replace "/usr/bin/deepin-draw" "$out/bin/deepin-draw"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qt5integration
+    qtsvg
+    dtkwidget
+    qt5platform-plugins
+  ];
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "Lightweight drawing tool for users to freely draw and simply edit images";
+    homepage = "https://github.com/linuxdeepin/deepin-draw";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-editor/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-editor/default.nix
new file mode 100644
index 000000000000..8724eec96850
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-editor/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, qtbase
+, qtsvg
+, dde-qt-dbus-factory
+, kcodecs
+, syntax-highlighting
+, libchardet
+, libuchardet
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-editor";
+  version = "6.0.7";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-7dHSybjoWZ1alcMsMm4BEEQJjQgNmhC7Eskeo3ZmoS8=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    qtbase
+    qtsvg
+    dde-qt-dbus-factory
+    kcodecs
+    syntax-highlighting
+    libchardet
+    libuchardet
+    libiconv
+  ];
+
+  strictDeps = true;
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A desktop text editor that supports common text editing features";
+    homepage = "https://github.com/linuxdeepin/deepin-editor";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/0001-fix-install-path-for-nix.patch b/nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/0001-fix-install-path-for-nix.patch
new file mode 100644
index 000000000000..61d13556acb6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/0001-fix-install-path-for-nix.patch
@@ -0,0 +1,25 @@
+From c2fa29800c64f5bda04203bb2eb1845b29c1de3c Mon Sep 17 00:00:00 2001
+From: rewine <luhongxu@deepin.org>
+Date: Fri, 25 Mar 2022 18:20:17 +0800
+Subject: [PATCH] fix install path for nix
+
+---
+ qimage-plugins/libraw/CMakeLists.txt | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/qimage-plugins/libraw/CMakeLists.txt b/qimage-plugins/libraw/CMakeLists.txt
+index 4bfd85ad..00d11bd3 100644
+--- a/qimage-plugins/libraw/CMakeLists.txt
++++ b/qimage-plugins/libraw/CMakeLists.txt
+@@ -44,7 +44,6 @@ target_include_directories(xraw PUBLIC ${RAW_INCLUDE_DIRS}  ${Qt5Gui_INCLUDE_DIR
+ 
+ target_link_libraries(${CMD_NAME} Qt5::Core Qt5::Gui raw)
+ 
+-install(TARGETS ${CMD_NAME} DESTINATION ${Qt5Core_DIR}/../../qt5/plugins/imageformats)
+-
++install(TARGETS ${CMD_NAME} DESTINATION qt5/plugins/imageformats)
+ 
+ QT5_USE_MODULES(${PROJECT_NAME} Core Gui)
+-- 
+2.35.1
+
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/default.nix
new file mode 100644
index 000000000000..e512dd277545
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-image-viewer/default.nix
@@ -0,0 +1,82 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, qtbase
+, qtsvg
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, gio-qt
+, udisks2-qt5
+, image-editor
+, cmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, libraw
+, libexif
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-image-viewer";
+  version = "5.9.11";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-IkjAW4bqQLEWF2tgccYCVnQgcEp9DJoXrEx2HDC25gs=";
+  };
+
+  patches = [
+    ./0001-fix-install-path-for-nix.patch
+    (fetchpatch {
+      name = "chore-use-GNUInstallDirs-in-CmakeLists.patch";
+      url = "https://github.com/linuxdeepin/deepin-image-viewer/commit/4a046e6207fea306e592fddc33c1285cf719a63d.patch";
+      sha256 = "sha256-aIgYmq6WDfCE+ZcD0GshxM+QmBWZGjh9MzZcTMrhBJ0=";
+    })
+    (fetchpatch {
+      name = "fix-build-with-libraw-0_21.patch";
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-community/2ff11979704dd7156a7e7c3bae9b30f08894063d/trunk/libraw-0.21.patch";
+      sha256 = "sha256-I/w4uiANT8Z8ud/F9WCd3iRHOfplu3fpqnu8ZIs4C+w=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/com.deepin.ImageViewer.service \
+      --replace "/usr/bin/deepin-image-viewer" "$out/bin/deepin-image-viewer"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtsvg
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    gio-qt
+    udisks2-qt5
+    image-editor
+    libraw
+    libexif
+  ];
+
+  strictDeps = true;
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  meta = with lib; {
+    description = "An image viewing tool with fashion interface and smooth performance";
+    homepage = "https://github.com/linuxdeepin/deepin-image-viewer";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-movie-reborn/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-movie-reborn/default.nix
new file mode 100644
index 000000000000..b4741fe2f9c1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-movie-reborn/default.nix
@@ -0,0 +1,140 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, runtimeShell
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, qtbase
+, qttools
+, qtx11extras
+, qtmultimedia
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, qtmpris
+, qtdbusextended
+, gsettings-qt
+, elfutils
+, ffmpeg
+, ffmpegthumbnailer
+, mpv
+, xorg
+, pcre
+, libdvdread
+, libdvdnav
+, libunwind
+, libva
+, zstd
+, glib
+, gst_all_1
+, gtest
+, libpulseaudio
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-movie-reborn";
+  version = "5.10.23";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0m8wYRQGsdN4zpnHUJKCfF05SdvTauRSp6gCu2F9ZAI";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "feat-rewrite-libPath-to-read-LD_LIBRARY_PATH.patch";
+      url = "https://github.com/linuxdeepin/deepin-movie-reborn/commit/432bf452ed244c256e99ecaf80bb6a0eef9b4a74.patch";
+      sha256 = "sha256-5hRQ8D9twBKgouVpIBa1pdAGk0lI/wEdQaHBBHFCZBA";
+    })
+  ];
+
+  postPatch = ''
+    # https://github.com/linuxdeepin/deepin-movie-reborn/pull/198
+    substituteInPlace src/common/diskcheckthread.cpp \
+      --replace "/usr/include/linux/cdrom.h" "linux/cdrom.h"
+    substituteInPlace src/widgets/toolbox_proxy.cpp \
+      --replace "/bin/bash" "${runtimeShell}"
+
+    # libdmr always assume that these libraries exist
+    # otherwise it will lead to coredump
+    # This affects the preview plugin for dde-file-manager
+
+    substituteInPlace src/libdmr/{filefilter.cpp,playlist_model.cpp,gstutils.cpp} \
+      --replace 'LibraryLoader::libPath("libavcodec.so")' '"${lib.getLib ffmpeg}/lib/libavcodec.so"' \
+      --replace 'LibraryLoader::libPath("libavformat.so")' '"${lib.getLib ffmpeg}/lib/libavformat.so"' \
+      --replace 'LibraryLoader::libPath("libavutil.so")' '"${lib.getLib ffmpeg}/lib/libavutil.so"' \
+      --replace 'LibraryLoader::libPath("libffmpegthumbnailer.so")' '"${lib.getLib ffmpegthumbnailer}/lib/libffmpegthumbnailer.so"' \
+      --replace 'LibraryLoader::libPath("libgstreamer-1.0.so")' '"${lib.getLib gst_all_1.gstreamer}/lib/libgstreamer-1.0.so"' \
+      --replace 'LibraryLoader::libPath("libgstpbutils-1.0.so")' '"${lib.getLib gst_all_1.gst-plugins-base}/lib/libgstpbutils-1.0.so"'
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    qtx11extras
+    qtmultimedia
+    qtdbusextended
+    qtmpris
+    gsettings-qt
+    elfutils.dev
+    ffmpeg
+    ffmpegthumbnailer
+    xorg.libXtst
+    xorg.libXdmcp
+    xorg.xcbproto
+    pcre.dev
+    libdvdread
+    libdvdnav
+    libunwind
+    libva
+    zstd.dev
+    mpv
+    gtest
+    libpulseaudio
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+  ]);
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-I${gst_all_1.gstreamer.dev}/include/gstreamer-1.0"
+    "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0"
+  ];
+
+  cmakeFlags = [
+    "-DVERSION=${version}"
+  ];
+
+  strictDeps = true;
+
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ mpv ffmpeg ffmpegthumbnailer gst_all_1.gstreamer gst_all_1.gst-plugins-base ]}"
+  ];
+
+  preFixup = ''
+    glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "Full-featured video player supporting playing local and streaming media in multiple video formats";
+    homepage = "https://github.com/linuxdeepin/deepin-movie-reborn";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-music/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-music/default.nix
new file mode 100644
index 000000000000..ecd7fde5944d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-music/default.nix
@@ -0,0 +1,95 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, udisks2-qt5
+, qtmpris
+, qtdbusextended
+, qtmultimedia
+, qttools
+, kcodecs
+, ffmpeg
+, libvlc
+, libpulseaudio
+, libcue
+, taglib
+, gsettings-qt
+, SDL2
+, gtest
+, qtbase
+, gst_all_1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-music";
+  version = "6.2.27";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0adAAQe9WG1G+JcxD4ypYyYE4MrRijfuj/VBno2WsLk=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/music-player/CMakeLists.txt \
+      --replace "/usr/include/vlc" "${libvlc}/include/vlc"
+    substituteInPlace src/music-player/data/deepin-music.desktop \
+      --replace "/usr/bin/deepin-music" "$out/bin/deepin-music"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    udisks2-qt5
+    qtmpris
+    qtdbusextended
+    qtmultimedia
+    kcodecs
+    ffmpeg
+    libvlc
+    libpulseaudio
+    libcue
+    taglib
+    gsettings-qt
+    SDL2
+    gtest
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+  ]);
+
+  cmakeFlags = [
+    "-DVERSION=${version}"
+  ];
+
+  strictDeps = true;
+
+  preFixup = ''
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "Awesome music player with brilliant and tweakful UI Deepin-UI based";
+    homepage = "https://github.com/linuxdeepin/deepin-music";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-picker/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-picker/default.nix
new file mode 100644
index 000000000000..0d710652e389
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-picker/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, qttools
+, pkg-config
+, wrapQtAppsHook
+, dtkwidget
+, qtsvg
+, xorg
+, qtbase
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-picker";
+  version = "5.0.28";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-b463PqrCpt/DQqint5Xb0cRT66iHNPavj0lsTMv801k=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qtsvg
+    xorg.libXtst
+  ];
+
+  postPatch = ''
+    substituteInPlace com.deepin.Picker.service \
+      --replace "/usr/bin/deepin-picker" "$out/bin/deepin-picker"
+  '';
+
+  qmakeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "ICONDIR=${placeholder "out"}/share/icons/hicolor/scalable/apps"
+    "APPDIR=${placeholder "out"}/share/applications"
+    "DSRDIR=${placeholder "out"}/share/deepin-picker"
+    "DOCDIR=${placeholder "out"}/share/dman/deepin-picker"
+  ];
+
+  meta = with lib; {
+    description = "Color picker application";
+    homepage = "https://github.com/linuxdeepin/deepin-picker";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/default.nix
new file mode 100644
index 000000000000..952a626b9fb7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, qtwebengine
+, karchive
+, poppler
+, libchardet
+, libspectre
+, openjpeg
+, djvulibre
+, qtbase
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-reader";
+  version = "5.10.29";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-IpgmTmnrPWc9EFZVM+S2nFxdpPjbgXqEWUnK/O9FmUg=";
+  };
+
+  patches = [ ./use-pkg-config.diff ];
+
+  postPatch = ''
+    substituteInPlace reader/{reader.pro,document/Model.cpp} htmltopdf/htmltopdf.pro 3rdparty/deepin-pdfium/src/src.pro \
+      --replace "/usr" "$out"
+  '';
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    qtwebengine
+    karchive
+    poppler
+    libchardet
+    libspectre
+    djvulibre
+    openjpeg
+  ];
+
+  qmakeFlags = [
+    "DEFINES+=VERSION=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A simple memo software with texts and voice recordings";
+    homepage = "https://github.com/linuxdeepin/deepin-reader";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/use-pkg-config.diff b/nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/use-pkg-config.diff
new file mode 100644
index 000000000000..7993cecd30ad
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-reader/use-pkg-config.diff
@@ -0,0 +1,46 @@
+diff --git a/3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium.pri b/3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium.pri
+index 3e04f340..894b0ac7 100755
+--- a/3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium.pri
++++ b/3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium.pri
+@@ -20,13 +20,8 @@ DEFINES +=  USE_SYSTEM_LIBJPEG \
+             USE_SYSTEM_LIBOPENJPEG2 \
+             USE_SYSTEM_FREETYPE
+ 
+-INCLUDEPATH += /usr/include/openjpeg-2.3 \
+-               /usr/include/openjpeg-2.4 \
+-               /usr/include/freetype2 \
+-               /usr/include/freetype2/freetype \
+-               /usr/include/freetype2/freetype/config
+-
+-LIBS += -lopenjp2 -llcms2 -lfreetype
++CONFIG += link_pkgconfig
++PKGCONFIG += libopenjp2 lcms2 freetype2
+ 
+ #QMAKE_CXXFLAGS += "-Wc++11-narrowing"  #is_clang
+ #QMAKE_CXXFLAGS += "-Wno-inconsistent-missing-override"  #is_clang Suppress no override warning for overridden functions.
+diff --git a/3rdparty/deepin-pdfium/src/src.pro b/3rdparty/deepin-pdfium/src/src.pro
+index 196b91d3..bda71ff4 100755
+--- a/3rdparty/deepin-pdfium/src/src.pro
++++ b/3rdparty/deepin-pdfium/src/src.pro
+@@ -2,7 +2,9 @@ TARGET = $$PWD/../lib/deepin-pdfium
+ 
+ TEMPLATE = lib
+ 
+-CONFIG += c++14
++CONFIG += c++14 link_pkgconfig
++
++PKGCONFIG += chardet
+ 
+ ###安全漏洞检测
+ #QMAKE_CXX += -g -fsanitize=undefined,address -O2
+@@ -28,10 +30,6 @@ include($$PWD/3rdparty/pdfium/pdfium.pri)
+ 
+ INCLUDEPATH += $$PWD/../include
+ 
+-INCLUDEPATH += /usr/include/chardet
+-
+-LIBS += -lchardet
+-
+ public_headers += \
+     $$PWD/../include/dpdfglobal.h \
+     $$PWD/../include/dpdfdoc.h \
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/default.nix
new file mode 100644
index 000000000000..1e41012dfc28
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/default.nix
@@ -0,0 +1,97 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, dde-qt-dbus-factory
+, dde-dock
+, qtbase
+, qtmultimedia
+, qtx11extras
+, image-editor
+, gsettings-qt
+, xorg
+, libusb1
+, libv4l
+, ffmpeg
+, ffmpegthumbnailer
+, portaudio
+, kwayland
+, udev
+, gst_all_1
+}:
+stdenv.mkDerivation rec {
+  pname = "deepin-screen-recorder";
+  version = "5.12.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-43jqgiBa77UAes0ekMES6IqVOPVXfzfQQjePdxFkNDM=";
+  };
+
+  patches = [ ./dont_use_libPath.diff ];
+
+  postPatch = ''
+    substituteInPlace screen_shot_recorder.pro deepin-screen-recorder.desktop \
+      src/{src.pro,pin_screenshots/pin_screenshots.pro} \
+      src/dde-dock-plugins/{shotstart/shotstart.pro,recordtime/recordtime.pro} \
+      assets/com.deepin.Screenshot.service \
+     --replace "/usr" "$out"
+  '';
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    dde-qt-dbus-factory
+    dde-dock
+    qtbase
+    qtmultimedia
+    qtx11extras
+    image-editor
+    gsettings-qt
+    xorg.libXdmcp
+    xorg.libXtst
+    xorg.libXcursor
+    libusb1
+    libv4l
+    ffmpeg
+    ffmpegthumbnailer
+    portaudio
+    kwayland
+    udev
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+  ]);
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ udev gst_all_1.gstreamer libv4l ]}"
+  ];
+
+  preFixup = ''
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "Screen recorder application for dde";
+    homepage = "https://github.com/linuxdeepin/deepin-screen-recorder";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/dont_use_libPath.diff b/nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/dont_use_libPath.diff
new file mode 100644
index 000000000000..3707ab4c67c2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-screen-recorder/dont_use_libPath.diff
@@ -0,0 +1,36 @@
+diff --git a/src/gstrecord/gstinterface.cpp b/src/gstrecord/gstinterface.cpp
+index b269b01..c075295 100644
+--- a/src/gstrecord/gstinterface.cpp
++++ b/src/gstrecord/gstinterface.cpp
+@@ -48,6 +48,7 @@ gstInterface::gstInterface()
+ }
+ QString gstInterface::libPath(const QString &sLib)
+ {
++    return sLib;
+     qInfo() << "gstreamer lib name is " << sLib;
+     QDir dir;
+     QString path  = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
+diff --git a/src/main_window.cpp b/src/main_window.cpp
+index 7bfc78e..dcbbc2f 100755
+--- a/src/main_window.cpp
++++ b/src/main_window.cpp
+@@ -585,6 +585,7 @@ void MainWindow::initDynamicLibPath()
+ }
+ QString MainWindow::libPath(const QString &strlib)
+ {
++    return strlib;
+     QDir  dir;
+     QString path  = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
+     dir.setPath(path);
+diff --git a/src/waylandrecord/avlibinterface.cpp b/src/waylandrecord/avlibinterface.cpp
+index d7942d6..c5cfdf4 100644
+--- a/src/waylandrecord/avlibinterface.cpp
++++ b/src/waylandrecord/avlibinterface.cpp
+@@ -105,6 +105,7 @@ avlibInterface::avlibInterface()
+ 
+ QString avlibInterface::libPath(const QString &sLib)
+ {
++    return sLib;
+     //qDebug() << sLib;
+     QDir dir;
+     QString path  = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-screensaver/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-screensaver/default.nix
new file mode 100644
index 000000000000..27b96a23937a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-screensaver/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, qttools
+, pkg-config
+, wrapQtAppsHook
+, qtbase
+, qtx11extras
+, qtdeclarative
+, dtkwidget
+, dde-qt-dbus-factory
+, xorg
+, xscreensaver
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-screensaver";
+  version = "5.0.16";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-d/BllaXZxRdJe8nH+hhQIEutpBvAWFnBHWbIjznUfQU=";
+  };
+
+  postPatch = ''
+    patchShebangs {src,customscreensaver/deepin-custom-screensaver}/{generate_translations.sh,update_translations.sh}
+
+    substituteInPlace src/{dbusscreensaver.cpp,com.deepin.ScreenSaver.service,src.pro} \
+      customscreensaver/deepin-custom-screensaver/deepin-custom-screensaver.pro \
+      --replace "/usr" "$out" \
+      --replace "/etc" "$out/etc"
+
+    substituteInPlace tools/preview/main.cpp \
+      --replace "/usr/lib/xscreensaver" "${xscreensaver}/libexec/xscreensaver"
+  '';
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtx11extras
+    qtdeclarative
+    dtkwidget
+    dde-qt-dbus-factory
+    xorg.libXScrnSaver
+  ];
+
+  qmakeFlags = [
+    "XSCREENSAVER_DATA_PATH=${xscreensaver}/libexec/xscreensaver"
+    "COMPILE_ON_V23=false"
+  ];
+
+  meta = with lib; {
+    description = "A screensaver service developed by deepin";
+    homepage = "https://github.com/linuxdeepin/deepin-screensaver";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
+
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-shortcut-viewer/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-shortcut-viewer/default.nix
new file mode 100644
index 000000000000..a9e1f8d7e977
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-shortcut-viewer/default.nix
@@ -0,0 +1,52 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, qmake
+, qtbase
+, qttools
+, pkg-config
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-shortcut-viewer";
+  version = "5.0.7";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-r/ZhA9yiPnJNTrBkVOvaTqfRvGO/NTod5tiQCquG5Gw=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+  ];
+
+  qmakeFlags = [
+    "VERSION=${version}"
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Deepin Shortcut Viewer";
+    homepage = "https://github.com/linuxdeepin/deepin-shortcut-viewer";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
+
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-system-monitor/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-system-monitor/default.nix
new file mode 100644
index 000000000000..c3ff184d9197
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-system-monitor/default.nix
@@ -0,0 +1,93 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, deepin-gettext-tools
+, wrapQtAppsHook
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, qtbase
+, qtsvg
+, qtx11extras
+, dde-qt-dbus-factory
+, dde-dock
+, gsettings-qt
+, procps
+, libpcap
+, libnl
+, util-linux
+, systemd
+, polkit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-system-monitor";
+  version = "5.9.33";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-X7/YwnJyA/HOLsOGARjsHWgL2qxW1eU1TvoWulvz0j4=";
+  };
+
+  postPatch = ''
+    substituteInPlace deepin-system-monitor-main/process/process_controller.cpp \
+      deepin-system-monitor-main/process/priority_controller.cpp \
+      deepin-system-monitor-main/service/service_manager.cpp \
+      deepin-system-monitor-main/translations/policy/com.deepin.pkexec.deepin-system-monitor.policy \
+        --replace "/usr/bin/kill" "${util-linux}/bin/kill" \
+        --replace "/usr/bin/renice" "${util-linux}/bin/renice" \
+        --replace '/usr/bin/systemctl' '${lib.getBin systemd}/systemctl'
+
+    substituteInPlace deepin-system-monitor-main/{service/service_manager.cpp,process/{priority_controller.cpp,process_controller.cpp}} \
+      --replace "/usr/bin/pkexec" "${lib.getBin polkit}/bin/pkexec"
+
+    for file in $(grep -rl "/usr")
+    do
+      substituteInPlace $file \
+        --replace "/usr" "$out"
+    done
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    deepin-gettext-tools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    qtbase
+    qtsvg
+    qtx11extras
+    dde-qt-dbus-factory
+    dde-dock
+    gsettings-qt
+    procps
+    libpcap
+    libnl
+  ];
+
+  cmakeFlags = [
+    "-DVERSION=${version}"
+    "-DUSE_DEEPIN_WAYLAND=OFF"
+  ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "A more user-friendly system monitor";
+    homepage = "https://github.com/linuxdeepin/deepin-system-monitor";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-terminal/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-terminal/default.nix
new file mode 100644
index 000000000000..9f27dbaab9e8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-terminal/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, cmake
+, qtbase
+, qtsvg
+, qttools
+, qtx11extras
+, pkg-config
+, wrapQtAppsHook
+, at-spi2-core
+, libsecret
+, chrpath
+, lxqt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-terminal";
+  version = "6.0.5";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-pRTdvR3hyiJVpi38Ex58X74ns+rSWuytsOXemvdW1Rk=";
+  };
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+    lxqt.lxqt-build-tools
+  ];
+
+  buildInputs = [
+    qt5integration
+    qt5platform-plugins
+    qtbase
+    qtsvg
+    dtkwidget
+    dde-qt-dbus-factory
+    qtx11extras
+    at-spi2-core
+    libsecret
+    chrpath
+  ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "Terminal emulator with workspace, multiple windows, remote management, quake mode and other features";
+    homepage = "https://github.com/linuxdeepin/deepin-terminal";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/apps/deepin-voice-note/default.nix b/nixpkgs/pkgs/desktops/deepin/apps/deepin-voice-note/default.nix
new file mode 100644
index 000000000000..599baa24e436
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/apps/deepin-voice-note/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, qtbase
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, qtmultimedia
+, qtwebengine
+, libvlc
+, gst_all_1
+, gtest
+}:
+stdenv.mkDerivation rec {
+  pname = "deepin-voice-note";
+  version = "5.11.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-JX4OuVu+5/a3IhkfnvaWVDaKl+xg/8qxlvp9hM0nHNU=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/common/audiowatcher.cpp \
+      --replace "/usr/share" "$out/share"
+    substituteInPlace assets/deepin-voice-note.desktop \
+      --replace "/usr/bin" "$out/bin"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    qtmultimedia
+    qtwebengine
+    libvlc
+    gtest
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+  ]);
+
+  strictDeps = true;
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${dde-qt-dbus-factory}/include/libdframeworkdbus-2.0";
+
+  preFixup = ''
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "Simple memo software with texts and voice recordings";
+    homepage = "https://github.com/linuxdeepin/deepin-voice-note";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/artwork/dde-account-faces/default.nix b/nixpkgs/pkgs/desktops/deepin/artwork/dde-account-faces/default.nix
new file mode 100644
index 000000000000..91438a043c0a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/artwork/dde-account-faces/default.nix
@@ -0,0 +1,26 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "dde-account-faces";
+  version = "1.0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-NWjR8qxWi2IrcP0cSF+lLxBJ/GrVpk1BfTjVH0ytinY=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}/var" ];
+
+  meta = with lib; {
+    description = "Account faces of deepin desktop environment";
+    homepage = "https://github.com/linuxdeepin/dde-account-faces";
+    license = with licenses; [ gpl3Plus cc0 ];
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/artwork/deepin-gtk-theme/default.nix b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-gtk-theme/default.nix
new file mode 100644
index 000000000000..3864989196f3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-gtk-theme/default.nix
@@ -0,0 +1,31 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, gtk-engine-murrine
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "deepin-gtk-theme";
+  version = "unstable-2022-07-26";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = "deepin-gtk-theme";
+    rev = "5ac53cbdfba4e6804451605db726876a3be9fb07";
+    sha256 = "sha256-NJ5URKYs4rVzddXxkwJK9ih40f8McVEbj3G1tPFAiMs";
+  };
+
+  propagatedUserEnvPkgs = [
+    gtk-engine-murrine
+  ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Deepin GTK Theme";
+    homepage = "https://github.com/linuxdeepin/deepin-gtk-theme";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/artwork/deepin-icon-theme/default.nix b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-icon-theme/default.nix
new file mode 100644
index 000000000000..0cda82fdfcf2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-icon-theme/default.nix
@@ -0,0 +1,46 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, gtk3
+, xcursorgen
+, papirus-icon-theme
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "deepin-icon-theme";
+  version = "2021.11.24";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-UC3PbqolcCbVrIEDqMovfJ4oeofMUGJag1A6u7X3Ml8=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  nativeBuildInputs = [
+    gtk3
+    xcursorgen
+  ];
+
+  propagatedBuildInputs = [
+    papirus-icon-theme
+  ];
+
+  dontDropIconThemeCache = true;
+
+  postFixup = ''
+    for theme in $out/share/icons/*; do
+      gtk-update-icon-cache $theme
+    done
+  '';
+
+  meta = with lib; {
+    description = "Deepin Icon Theme provides the base icon themes on Deepin";
+    homepage = "https://github.com/linuxdeepin/deepin-icon-theme";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/artwork/deepin-sound-theme/default.nix b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-sound-theme/default.nix
new file mode 100644
index 000000000000..f311339b6be0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-sound-theme/default.nix
@@ -0,0 +1,26 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "deepin-sound-theme";
+  version = "15.10.6";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-BvG/ygZfM6sDuDSzAqwCzDXGT/bbA6Srlpg3br117OU=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "The freedesktop sound theme for Deepin";
+    homepage = "https://github.com/linuxdeepin/deepin-sound-theme";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/artwork/deepin-wallpapers/default.nix b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-wallpapers/default.nix
new file mode 100644
index 000000000000..74a8786abe34
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/artwork/deepin-wallpapers/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dde-api
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-wallpapers";
+  version = "1.7.10";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-D7DXyPh74VlYn5vKUzDh/P/xoskxs8N/BEg5ZemXRwk=";
+  };
+
+  nativeBuildInputs = [ dde-api ];
+
+  postPatch = ''
+    patchShebangs blur_image.sh
+
+    substituteInPlace blur_image.sh \
+      --replace /usr/lib/deepin-api/image-blur ${dde-api}/lib/deepin-api/image-blur
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/share/wallpapers/deepin
+    cp deepin/* $out/share/wallpapers/deepin
+    mkdir -p $out/share/wallpapers/image-blur
+    cp image-blur/* $out/share/wallpapers/image-blur
+    mkdir -p $out/share/backgrounds
+    ln -s $out/share/wallpapers/deepin/desktop.jpg  $out/share/backgrounds/default_background.jpg
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "deepin-wallpapers provides wallpapers of dde";
+    homepage = "https://github.com/linuxdeepin/deepin-wallpapers";
+    license = with licenses; [ gpl3Plus cc-by-sa-30 ];
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-app-services/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-app-services/default.nix
new file mode 100644
index 000000000000..b6ab01e7c2b7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-app-services/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, cmake
+, wrapQtAppsHook
+, qtbase
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-app-services";
+  version = "0.0.20";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-M9XXNV3N4CifOXitT6+UxaGsLoVuoNGqC5SO/mF+bLw=";
+  };
+
+  postPatch = ''
+    substituteInPlace dconfig-center/dde-dconfig-daemon/services/org.desktopspec.ConfigManager.service \
+      --replace "/usr/bin/dde-dconfig-daemon" "$out/bin/dde-dconfig-daemon"
+    substituteInPlace dconfig-center/dde-dconfig/main.cpp \
+      --replace "/bin/dde-dconfig-editor" "dde-dconfig-editor"
+    substituteInPlace dconfig-center/CMakeLists.txt \
+      --replace 'add_subdirectory("example")' " " \
+      --replace 'add_subdirectory("tests")'   " "
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+  ];
+
+  cmakeFlags = [
+    "-DDVERSION=${version}"
+    "-DDSG_DATA_DIR=/run/current-system/sw/share/dsg"
+  ];
+
+  meta = with lib; {
+    description = "Provids dbus service for reading and writing DSG configuration";
+    homepage = "https://github.com/linuxdeepin/dde-app-services";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-calendar/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-calendar/default.nix
new file mode 100644
index 000000000000..f3023c7cb9f3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-calendar/default.nix
@@ -0,0 +1,85 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, cmake
+, qttools
+, pkg-config
+, wrapQtAppsHook
+, runtimeShell
+, qtbase
+, gtest
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-calendar";
+  version = "5.8.30";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-8/UXq9W3Gb1Lg/nOji6zcHJts6lgY2uDxvrBxQs3Zio=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "chore-use-GNUInstallDirs-in-CmakeLists.patch";
+      url = "https://github.com/linuxdeepin/dde-calendar/commit/b9d9555d90a36318eeee62ece49250b4bf8acd10.patch";
+      sha256 = "sha256-pvgxZPczs/lkwNjysNuVu+1AY69VZlxOn7hR9A02/3M=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace calendar-service/src/dbmanager/huanglidatabase.cpp \
+      --replace "/usr/share/dde-calendar/data/huangli.db" "$out/share/dde-calendar/data/huangli.db"
+    substituteInPlace calendar-service/src/main.cpp \
+      --replace "/usr/share/dde-calendar/translations" "$out/share/dde-calendar/translations"
+    substituteInPlace calendar-service/assets/data/com.deepin.dataserver.Calendar.service \
+      --replace "/usr/lib/deepin-daemon/dde-calendar-service" "$out/lib/deepin-daemon/dde-calendar-service"
+    substituteInPlace calendar-client/assets/dbus/com.deepin.Calendar.service \
+      --replace "/usr/bin/dde-calendar" "$out/bin/dde-calendar"
+    substituteInPlace calendar-service/{src/{csystemdtimercontrol.cpp,jobremindmanager.cpp},assets/{data/com.dde.calendarserver.calendar.service,dde-calendar-service.desktop}} \
+      --replace "/bin/bash" "${runtimeShell}"
+
+    substituteInPlace CMakeLists.txt \
+      --replace "ADD_SUBDIRECTORY(tests)" " "
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    gtest
+  ];
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  postFixup = ''
+    wrapQtApp $out/lib/deepin-daemon/dde-calendar-service
+  '';
+
+  meta = with lib; {
+    description = "Calendar for Deepin Desktop Environment";
+    homepage = "https://github.com/linuxdeepin/dde-calendar";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-clipboard/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-clipboard/default.nix
new file mode 100644
index 000000000000..47ec1c837b13
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-clipboard/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, gio-qt
+, cmake
+, qttools
+, kwayland
+, pkg-config
+, wrapQtAppsHook
+, glibmm
+, gtest
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-clipboard";
+  version = "5.4.25";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-oFATOBXf4NvGxjVMlfxwfQkBffeKut8ao+X6T9twb/I=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "/etc/xdg" "$out/etc/xdg" \
+      --replace "/lib/systemd/user" "$out/lib/systemd/user" \
+      --replace "/usr/share" "$out/share"
+
+    substituteInPlace misc/com.deepin.dde.Clipboard.service \
+      --replace "/usr/bin/qdbus" "${lib.getBin qttools}/bin/qdbus"
+
+    substituteInPlace misc/{dde-clipboard.desktop,dde-clipboard-daemon.service,com.deepin.dde.Clipboard.service} \
+      --replace "/usr" "$out"
+
+    patchShebangs translate_generation.sh generate_gtest_report.sh
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5integration
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    gio-qt
+    kwayland
+    glibmm
+    gtest
+  ];
+
+  cmakeFlags = [
+    "-DUSE_DEEPIN_WAYLAND=OFF"
+  ];
+
+  meta = with lib; {
+    description = "DDE optional clipboard manager componment";
+    homepage = "https://github.com/linuxdeepin/dde-clipboard";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-control-center/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-control-center/default.nix
new file mode 100644
index 000000000000..a8625084ba12
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-control-center/default.nix
@@ -0,0 +1,139 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, deepin-pw-check
+, udisks2-qt5
+, cmake
+, qttools
+, qtbase
+, pkg-config
+, qtx11extras
+, qtmultimedia
+, wrapQtAppsHook
+, wrapGAppsHook
+, gsettings-qt
+, wayland
+, kwayland
+, qtwayland
+, polkit-qt
+, pcre
+, xorg
+, libselinux
+, libsepol
+, libxcrypt
+, librsvg
+, networkmanager-qt
+, glib
+, runtimeShell
+, tzdata
+, dbus
+, gtest
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-control-center";
+  version = "5.6.3";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/gzS+IbopIDRpufsa9cEfFBOqehPUnF4IozvwW8UEbY=";
+  };
+
+  patches = [
+    # UserExperienceProgramLicenseAgreement comes from a non-open source component(deepin-deepinid-client)
+    # If we don't block it, only an empty page will be displayed here
+    # Remove this patch when dde-control-center is upgraded to 6.0.0
+    ./dont-show-endUserLicenseAgreement-for-deepinos.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/frame/window/{mainwindow.cpp,insertplugin.cpp} com.deepin.controlcenter.develop.policy \
+      --replace "/usr/lib/dde-control-center" "/run/current-system/sw/lib/dde-control-center"
+
+    substituteInPlace src/frame/modules/datetime/timezone_dialog/timezone.cpp \
+      --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+
+    substituteInPlace src/frame/modules/accounts/accountsworker.cpp \
+      --replace "/bin/bash" "${runtimeShell}"
+
+    substituteInPlace dde-control-center-autostart.desktop \
+      --replace "/usr" "$out"
+
+    substituteInPlace com.deepin.dde.ControlCenter.service \
+      --replace "/usr/bin/dbus-send" "${dbus}/bin/dbus-send" \
+      --replace "/usr/share" "$out/share"
+
+    substituteInPlace include/widgets/utils.h src/{reboot-reminder-dialog/main.cpp,frame/main.cpp,reset-password-dialog/main.cpp} \
+      --replace "/usr/share/dde-control-center" "$out/share/dde-control-center"
+
+    substituteInPlace dde-control-center-wapper \
+      --replace "qdbus" "${qttools.bin}/bin/qdbus" \
+      --replace "/usr/share" "$out/share"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+    wrapGAppsHook
+  ];
+  dontWrapGApps = true;
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    deepin-pw-check
+    qtbase
+    qtx11extras
+    qtmultimedia
+    gsettings-qt
+    udisks2-qt5
+    wayland
+    kwayland
+    qtwayland
+    polkit-qt
+    pcre
+    xorg.libXdmcp
+    libselinux
+    libsepol
+    libxcrypt
+    librsvg
+    networkmanager-qt
+    gtest
+  ];
+
+  cmakeFlags = [
+    "-DCVERSION=${version}"
+    "-DDISABLE_AUTHENTICATION=YES"
+    "-DDISABLE_ACTIVATOR=YES"
+    "-DDISABLE_SYS_UPDATE=YES"
+    "-DDISABLE_RECOVERY=YES"
+  ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ librsvg ]}"
+  ];
+
+  preFixup = ''
+    glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Control panel of Deepin Desktop Environment";
+    homepage = "https://github.com/linuxdeepin/dde-control-center";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-control-center/dont-show-endUserLicenseAgreement-for-deepinos.patch b/nixpkgs/pkgs/desktops/deepin/core/dde-control-center/dont-show-endUserLicenseAgreement-for-deepinos.patch
new file mode 100644
index 000000000000..491007ea2bf3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-control-center/dont-show-endUserLicenseAgreement-for-deepinos.patch
@@ -0,0 +1,29 @@
+From adcc5eb58e2dcd06810a40c237bc7984c2c5af4b Mon Sep 17 00:00:00 2001
+From: rewine <luhongxu@deepin.org>
+Date: Sun, 8 Jan 2023 13:46:17 +0800
+Subject: [PATCH] dont show endUserLicenseAgreement for deepinos
+
+---
+ src/frame/window/modules/systeminfo/systeminfowidget.cpp | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/frame/window/modules/systeminfo/systeminfowidget.cpp b/src/frame/window/modules/systeminfo/systeminfowidget.cpp
+index 8e62604fb..0f443ee20 100644
+--- a/src/frame/window/modules/systeminfo/systeminfowidget.cpp
++++ b/src/frame/window/modules/systeminfo/systeminfowidget.cpp
+@@ -78,6 +78,12 @@ void SystemInfoWidget::initData()
+                 m_listView->setRowHidden(i, true);
+             }
+         }
++
++        if (IsNotDeepinUos) {
++            if (m.gsettingsName == "endUserLicenseAgreement") {
++                m_listView->setRowHidden(i, true);
++            }
++        }
+     }
+ 
+     if (InsertPlugin::instance()->updatePluginInfo("systeminfo"))
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-dock/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-dock/default.nix
new file mode 100644
index 000000000000..32e8ca97b6d1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-dock/default.nix
@@ -0,0 +1,89 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, dde-qt-dbus-factory
+, qt5integration
+, qt5platform-plugins
+, dde-control-center
+, deepin-desktop-schemas
+, cmake
+, qttools
+, qtx11extras
+, pkg-config
+, wrapQtAppsHook
+, wrapGAppsHook
+, gsettings-qt
+, libdbusmenu
+, xorg
+, gtest
+, qtbase
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-dock";
+  version = "5.5.81";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-x8U5QPfIykaQLjwbErZiYbZC+JyPQQ+jd6MBjDQyUjs=";
+  };
+
+  postPatch = ''
+    substituteInPlace plugins/tray/system-trays/systemtrayscontroller.cpp frame/controller/dockpluginscontroller.cpp \
+      --replace "/usr/lib/dde-dock/plugins" "/run/current-system/sw/lib/dde-dock/plugins"
+
+    substituteInPlace plugins/show-desktop/showdesktopplugin.cpp frame/window/components/desktop_widget.cpp \
+      --replace "/usr/lib/deepin-daemon" "/run/current-system/sw/lib/deepin-daemon"
+
+    substituteInPlace plugins/{dcc-dock-plugin/settings_module.cpp,tray/system-trays/systemtrayscontroller.cpp} \
+      --replace "/usr" "$out"
+    '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+    wrapGAppsHook
+  ];
+  dontWrapGApps = true;
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    dde-control-center
+    deepin-desktop-schemas
+    qtx11extras
+    gsettings-qt
+    libdbusmenu
+    xorg.libXcursor
+    xorg.libXtst
+    xorg.libXdmcp
+    gtest
+  ];
+
+  outputs = [ "out" "dev" ];
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Deepin desktop-environment - dock module";
+    homepage = "https://github.com/linuxdeepin/dde-dock";
+    platforms = platforms.linux;
+    license = licenses.lgpl3Plus;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-file-manager/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-file-manager/default.nix
new file mode 100644
index 000000000000..c34e2cc4f900
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-file-manager/default.nix
@@ -0,0 +1,144 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, runtimeShell
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, docparser
+, dde-dock
+, cmake
+, qttools
+, qtx11extras
+, qtmultimedia
+, kcodecs
+, pkg-config
+, ffmpegthumbnailer
+, libsecret
+, libmediainfo
+, mediainfo
+, libzen
+, poppler
+, polkit-qt
+, polkit
+, wrapQtAppsHook
+, wrapGAppsHook
+, lucenepp
+, boost
+, taglib
+, cryptsetup
+, glib
+, qtbase
+, util-dfm
+, deepin-pdfium
+, libuuid
+, libselinux
+, glibmm
+, pcre
+, udisks2
+, libisoburn
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-file-manager";
+  version = "6.0.15";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-tG3Wl1AvwWhHmIIHgexv3mVVrmOwNrwn8k/sD4+WZzk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+    wrapGAppsHook
+  ];
+  dontWrapGApps = true;
+
+  postPatch = ''
+    patchShebangs .
+
+    substituteInPlace src/plugins/filemanager/dfmplugin-vault/utils/vaultdefine.h \
+      --replace "/usr/bin/deepin-compressor" "deepin-compressor"
+
+    substituteInPlace src/plugins/filemanager/dfmplugin-avfsbrowser/utils/avfsutils.cpp \
+      --replace "/usr/bin/mountavfs" "mountavfs" \
+      --replace "/usr/bin/umountavfs" "umountavfs"
+
+    substituteInPlace src/plugins/common/core/dfmplugin-menu/{extendmenuscene/extendmenu/dcustomactionparser.cpp,oemmenuscene/oemmenu.cpp} \
+      --replace "/usr" "$out"
+
+    substituteInPlace src/tools/upgrade/dialog/processdialog.cpp \
+      --replace "/usr/bin/dde-file-manager" "dde-file-manager" \
+      --replace "/usr/bin/dde-desktop" "dde-desktop"
+
+    substituteInPlace src/dfm-base/file/local/localfilehandler.cpp \
+      --replace "/usr/lib/deepin-daemon" "/run/current-system/sw/lib/deepin-daemon"
+
+    substituteInPlace src/plugins/desktop/ddplugin-background/backgroundservice.cpp \
+      src/plugins/desktop/ddplugin-wallpapersetting/wallpapersettings.cpp \
+      --replace "/usr/share/backgrounds" "/run/current-system/sw/share/backgrounds"
+
+    find . -type f -regex ".*\\.\\(service\\|policy\\|desktop\\)" -exec sed -i -e "s|/usr/|$out/|g" {} \;
+  '';
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    deepin-pdfium
+    util-dfm
+    dde-qt-dbus-factory
+    glibmm
+    docparser
+    dde-dock
+    qtx11extras
+    qtmultimedia
+    kcodecs
+    ffmpegthumbnailer
+    libsecret
+    libmediainfo
+    mediainfo
+    poppler
+    polkit-qt
+    polkit
+    lucenepp
+    boost
+    taglib
+    cryptsetup
+    libuuid
+    libselinux
+    pcre
+    udisks2
+    libisoburn
+  ];
+
+  cmakeFlags = [
+    "-DVERSION=${version}"
+    "-DDEEPIN_OS_VERSION=20"
+  ];
+
+  enableParallelBuilding = true;
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "File manager for deepin desktop environment";
+    homepage = "https://github.com/linuxdeepin/dde-file-manager";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
+
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-gsettings-schemas/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-gsettings-schemas/default.nix
new file mode 100644
index 000000000000..868f518e540f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-gsettings-schemas/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, runCommand
+, glib
+, gtk3
+, dtkcommon
+, dde-dock
+, startdde
+, dde-launcher
+, dde-session-shell
+, dde-session-ui
+, dde-control-center
+, dde-file-manager
+, deepin-desktop-schemas
+, deepin-movie-reborn
+, deepin-screen-recorder
+, deepin-system-monitor
+, extraGSettingsOverrides ? ""
+, extraGSettingsOverridePackages ? [ ]
+}:
+
+let
+  gsettingsOverridePackages = [
+    dtkcommon
+    dde-dock
+    startdde
+    dde-launcher
+    dde-session-shell
+    dde-session-ui
+    dde-control-center
+    dde-file-manager
+    deepin-desktop-schemas
+    deepin-movie-reborn
+    deepin-screen-recorder
+    deepin-system-monitor
+  ] ++ extraGSettingsOverridePackages;
+
+in
+with lib;
+
+# TODO: Having https://github.com/NixOS/nixpkgs/issues/54150 would supersede this
+runCommand "nixos-gsettings-desktop-schemas" { }
+  ''
+    schema_dir=$out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
+
+    mkdir -p $schema_dir
+
+    ${concatMapStrings (pkg: "cp -rvf ${glib.getSchemaPath pkg}/* $schema_dir\n") gsettingsOverridePackages}
+
+    chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
+
+    cat - > $schema_dir/nixos-defaults.gschema.override <<- EOF
+    ${extraGSettingsOverrides}
+    EOF
+
+    ${glib.dev}/bin/glib-compile-schemas $schema_dir
+  ''
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-kwin/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-kwin/default.nix
new file mode 100644
index 000000000000..bf1ca7317a40
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-kwin/default.nix
@@ -0,0 +1,92 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, extra-cmake-modules
+, deepin-gettext-tools
+, wrapQtAppsHook
+, makeWrapper
+, dtkcore
+, qtbase
+, qtx11extras
+, gsettings-qt
+, xorg
+, libepoxy
+, deepin-kwin
+, kdecoration
+, kconfig
+, kwayland
+, kwindowsystem
+, kglobalaccel
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-kwin";
+  version = "5.6.5";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = "b5c00527b86f773595c786c8015d60f8be3a681b";
+    sha256 = "sha256-qXN9AwjLnqO5BpnrX5PaSCKZ6ff874r08ubCMM272tA=";
+  };
+
+  /*
+    This is the final version of dde-kwin, upstream has been archived.
+    We should remove this package when deepin-kwin release a new version.
+  */
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "/usr/include/KWaylandServer" "${kwayland.dev}/include/KWaylandServer"
+    substituteInPlace deepin-wm-dbus/deepinwmfaker.cpp \
+      --replace "/usr/lib/deepin-daemon" "/run/current-system/sw/lib/deepin-daemon" \
+      --replace "/usr/share/backgrounds" "/run/current-system/sw/share/backgrounds" \
+      --replace "/usr/share/wallpapers" "/run/current-system/sw/share/wallpapers"
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    extra-cmake-modules
+    deepin-gettext-tools
+    wrapQtAppsHook
+    makeWrapper
+  ];
+
+  buildInputs = [
+    dtkcore
+    qtbase
+    qtx11extras
+    gsettings-qt
+    xorg.libXdmcp
+    libepoxy
+    deepin-kwin
+    kdecoration
+    kconfig
+    kwayland
+    kwindowsystem
+    kglobalaccel
+  ];
+
+  cmakeFlags = [
+    "-DPROJECT_VERSION=${version}"
+    "-DQT_INSTALL_PLUGINS=${placeholder "out"}/${qtbase.qtPluginPrefix}"
+  ];
+
+  # kwin_no_scale is a shell script
+  postFixup = ''
+    wrapProgram $out/bin/kwin_no_scale \
+      --set QT_QPA_PLATFORM_PLUGIN_PATH "${placeholder "out"}/${qtbase.qtPluginPrefix}"
+  '';
+
+  meta = with lib; {
+    description = "KWin configuration for Deepin Desktop Environment";
+    homepage = "https://github.com/linuxdeepin/dde-kwin";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-launcher/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-launcher/default.nix
new file mode 100644
index 000000000000..7d850c544d53
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-launcher/default.nix
@@ -0,0 +1,76 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, dde-qt-dbus-factory
+, qt5integration
+, qt5platform-plugins
+, cmake
+, qttools
+, qtx11extras
+, pkg-config
+, wrapQtAppsHook
+, wrapGAppsHook
+, gsettings-qt
+, gtest
+, qtbase
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-launcher";
+  version = "5.6.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Td8R91892tgJx7FLV2IZ/aPBzDb+o6EYKpk3D8On7Ag=";
+  };
+
+  postPatch = ''
+    #fix build with new dtk(https://github.com/linuxdeepin/dde-launcher/pull/369)
+    substituteInPlace src/windowedframe.h \
+      --replace "#include <dregionmonitor.h>" " "
+    substituteInPlace src/boxframe/{backgroundmanager.cpp,boxframe.cpp} \
+      --replace "/usr/share/backgrounds" "/run/current-system/sw/share/backgrounds"
+    substituteInPlace dde-launcher.desktop dde-launcher-wapper src/dbusservices/com.deepin.dde.Launcher.service \
+      --replace "/usr" "$out"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+    wrapGAppsHook
+  ];
+  dontWrapGApps = true;
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    qtx11extras
+    gsettings-qt
+    gtest
+  ];
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Deepin desktop-environment - Launcher module";
+    homepage = "https://github.com/linuxdeepin/dde-launcher";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-network-core/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-network-core/default.nix
new file mode 100644
index 000000000000..6c192471525e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-network-core/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, qttools
+, pkg-config
+, wrapQtAppsHook
+, dtkwidget
+, dde-dock
+, dde-control-center
+, dde-session-shell
+, dde-qt-dbus-factory
+, gsettings-qt
+, gio-qt
+, networkmanager-qt
+, glib
+, pcre
+, util-linux
+, libselinux
+, libsepol
+, dbus
+, gtest
+, qtbase
+}:
+stdenv.mkDerivation rec {
+  pname = "dde-network-core";
+  version = "1.1.8";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ysmdB9CT7mhN/0r8CRT4FQsK12HkhjbezGXwWiNScqg=";
+  };
+
+  postPatch = ''
+    substituteInPlace dock-network-plugin/networkplugin.cpp dcc-network-plugin/dccnetworkmodule.cpp dss-network-plugin/network_module.cpp \
+      --replace "/usr/share" "$out/share"
+    substituteInPlace dss-network-plugin/notification/bubbletool.cpp \
+      --replace "/usr/share" "/run/current-system/sw/share"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    dde-dock
+    dde-control-center
+    dde-session-shell
+    dde-qt-dbus-factory
+    gsettings-qt
+    gio-qt
+    networkmanager-qt
+    glib
+    pcre
+    util-linux
+    libselinux
+    libsepol
+    gtest
+  ];
+
+  cmakeFlags = [
+    "-DVERSION=${version}"
+  ];
+
+  meta = with lib; {
+    description = "DDE network library framework";
+    homepage = "https://github.com/linuxdeepin/dde-network-core";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-polkit-agent/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-polkit-agent/default.nix
new file mode 100644
index 000000000000..a1acab05cf1a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-polkit-agent/default.nix
@@ -0,0 +1,61 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, pkg-config
+, cmake
+, qttools
+, wrapQtAppsHook
+, polkit-qt
+, qtbase
+}:
+stdenv.mkDerivation rec {
+  pname = "dde-polkit-agent";
+  version = "5.5.22";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-4wAqMymLPxKXbfAx2PtkEGfwenphPxBZn+qCdcyqNc0=";
+  };
+
+  postPatch = ''
+    substituteInPlace AuthDialog.cpp \
+      --replace "/usr/share/dde-session-shell/dde-session-shell.conf" "/etc/dde-session-shell/dde-session-shell.conf"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    polkit-qt
+  ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  postFixup = ''
+    wrapQtApp $out/lib/polkit-1-dde/dde-polkit-agent
+  '';
+
+  meta = with lib; {
+    description = "PolicyKit agent for Deepin Desktop Environment";
+    homepage = "https://github.com/linuxdeepin/dde-polkit-agent";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-session-shell/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-session-shell/default.nix
new file mode 100644
index 000000000000..ac5f5fbc7ec0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-session-shell/default.nix
@@ -0,0 +1,112 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, linkFarm
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, dde-qt-dbus-factory
+, cmake
+, pkg-config
+, qttools
+, qtx11extras
+, wrapQtAppsHook
+, wrapGAppsHook
+, gsettings-qt
+, lightdm_qt
+, linux-pam
+, xorg
+, kwayland
+, gtest
+, xkeyboard_config
+, dbus
+, qtbase
+, dde-session-shell
+}:
+stdenv.mkDerivation rec {
+  pname = "dde-session-shell";
+  version = "5.6.4";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-mrdGu4t86d3No23IrnjypVLx1jxaySatr0xPMY9l5S4";
+  };
+
+  postPatch = ''
+    substituteInPlace src/lightdm-deepin-greeter/greeterworker.cpp \
+      --replace "/usr/include/shadow.h" "shadow.h"
+
+    substituteInPlace scripts/lightdm-deepin-greeter files/wayland/lightdm-deepin-greeter-wayland \
+      --replace "/usr/lib/deepin-daemon" "/run/current-system/sw/lib/deepin-daemon"
+
+    substituteInPlace src/session-widgets/auth_module.h \
+      --replace "/usr/lib/dde-control-center" "/run/current-system/sw/lib/dde-control-center"
+
+    substituteInPlace src/global_util/plugin_manager/modules_loader.cpp \
+      --replace "/usr/lib/dde-session-shell/modules" "/run/current-system/sw/lib/dde-session-shell/modules"
+
+    substituteInPlace src/{session-widgets/{lockcontent.cpp,userinfo.cpp},widgets/fullscreenbackground.cpp} \
+      --replace "/usr/share/backgrounds" "/run/current-system/sw/share/backgrounds"
+
+    substituteInPlace src/global_util/xkbparser.h \
+      --replace "/usr/share/X11/xkb/rules/base.xml" "${xkeyboard_config}/share/X11/xkb/rules/base.xml"
+
+    substituteInPlace files/{com.deepin.dde.shutdownFront.service,com.deepin.dde.lockFront.service} \
+      --replace "/usr/bin/dbus-send" "${dbus}/bin/dbus-send" \
+      --replace "/usr/share" "$out/share"
+
+    substituteInPlace src/global_util/{public_func.cpp,constants.h} scripts/lightdm-deepin-greeter files/{dde-lock.desktop,lightdm-deepin-greeter.desktop,wayland/lightdm-deepin-greeter-wayland.desktop} \
+      --replace "/usr" "$out"
+
+    patchShebangs files/deepin-greeter
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+    wrapGAppsHook
+  ];
+  dontWrapGApps = true;
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    dde-qt-dbus-factory
+    gsettings-qt
+    lightdm_qt
+    qtx11extras
+    linux-pam
+    kwayland
+    xorg.libXcursor
+    xorg.libXtst
+    xorg.libXrandr
+    xorg.libXdmcp
+    gtest
+  ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  passthru.xgreeters = linkFarm "deepin-greeter-xgreeters" [{
+    path = "${dde-session-shell}/share/xgreeters/lightdm-deepin-greeter.desktop";
+    name = "lightdm-deepin-greeter.desktop";
+  }];
+
+  meta = with lib; {
+    description = "Deepin desktop-environment - session-shell module";
+    homepage = "https://github.com/linuxdeepin/dde-session-shell";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dde-session-ui/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dde-session-ui/default.nix
new file mode 100644
index 000000000000..d07389c6646e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dde-session-ui/default.nix
@@ -0,0 +1,108 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qt5integration
+, qt5platform-plugins
+, pkg-config
+, cmake
+, dde-dock
+, dde-qt-dbus-factory
+, deepin-gettext-tools
+, gsettings-qt
+, lightdm_qt
+, qttools
+, qtx11extras
+, util-linux
+, xorg
+, pcre
+, libselinux
+, libsepol
+, wrapQtAppsHook
+, gtest
+, xkeyboard_config
+, qtbase
+, dbus
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-session-ui";
+  version = "5.6.2";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3lW/M07b6gXzGcvQYB+Ojqdq7TfJBaMIKfmfG7o3wWg=";
+  };
+
+  postPatch = ''
+    substituteInPlace widgets/fullscreenbackground.cpp \
+      --replace "/usr/share/backgrounds" "/run/current-system/sw/share/backgrounds" \
+      --replace "/usr/share/wallpapers" "/run/current-system/sw/share/wallpapers"
+
+    substituteInPlace global_util/xkbparser.h \
+      --replace "/usr/share/X11/xkb/rules/base.xml" "${xkeyboard_config}/share/X11/xkb/rules/base.xml"
+
+    substituteInPlace dde-warning-dialog/com.deepin.dde.WarningDialog.service dde-osd/files/dde-osd.desktop dde-welcome/com.deepin.dde.welcome.service \
+      --replace "/usr/lib/deepin-daemon" "/run/current-system/sw/lib/deepin-daemon"
+
+    substituteInPlace dde-osd/notification/bubbletool.cpp \
+      --replace "/usr/share" "/run/current-system/sw/share"
+
+    substituteInPlace dde-osd/files/{com.deepin.dde.Notification.service,com.deepin.dde.freedesktop.Notification.service,com.deepin.dde.osd.service} \
+      --replace "/usr/bin/dbus-send" "${dbus}/bin/dbus-send" \
+      --replace "/usr/share" "$out/share"
+
+     substituteInPlace dde-lowpower/main.cpp dmemory-warning-dialog/main.cpp dde-touchscreen-dialog/main.cpp dnetwork-secret-dialog/main.cpp dde-suspend-dialog/main.cpp \
+    dde-warning-dialog/main.cpp dde-bluetooth-dialog/main.cpp dde-welcome/main.cpp dde-hints-dialog/main.cpp dde-osd/main.cpp dde-wm-chooser/main.cpp \
+    dde-license-dialog/{content.cpp,main.cpp} dmemory-warning-dialog/com.deepin.dde.MemoryWarningDialog.service \
+      --replace "/usr" "$out"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    deepin-gettext-tools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qt5platform-plugins
+    dde-dock
+    dde-qt-dbus-factory
+    gsettings-qt
+    qtx11extras
+    pcre
+    xorg.libXdmcp
+    util-linux
+    libselinux
+    libsepol
+    gtest
+  ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postFixup = ''
+    for binary in $out/lib/deepin-daemon/*; do
+      wrapProgram $binary "''${qtWrapperArgs[@]}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Deepin desktop-environment - Session UI module";
+    homepage = "https://github.com/linuxdeepin/dde-session-ui";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/deepin-kwin/default.nix b/nixpkgs/pkgs/desktops/deepin/core/deepin-kwin/default.nix
new file mode 100644
index 000000000000..456f20b51906
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/deepin-kwin/default.nix
@@ -0,0 +1,120 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wayland
+, dwayland
+, qtbase
+, qttools
+, qtx11extras
+, wrapQtAppsHook
+, extra-cmake-modules
+, gsettings-qt
+, libepoxy
+, kconfig
+, kconfigwidgets
+, kcoreaddons
+, kcrash
+, kdbusaddons
+, kiconthemes
+, kglobalaccel
+, kidletime
+, knotifications
+, kpackage
+, plasma-framework
+, kcmutils
+, knewstuff
+, kdecoration
+, kscreenlocker
+, breeze-qt5
+, libinput
+, mesa
+, lcms2
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-kwin";
+  version = "5.24.3-deepin.1.9";
+
+  /*
+    There are no buildable tag in github:
+      - 5.15 tag in eagel branch is used for UOS, it's too old to compile.
+      - 5.25 tag in master branch only work on unreleased deepin v23.
+    Since deepin-kwin was not maintained on github before, we lost all
+    tags in master branch, this version is read from debian/changelog
+  */
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = "98c9085670938937e2a1ce964f6acddc5c1d6eb5";
+    sha256 = "sha256-/hgDuaDrpwAQsMIoaS8pGBJwWfJSrq6Yjic3a60ITtM=";
+  };
+
+  # Avoid using absolute path to distinguish applications
+  postPatch = ''
+    substituteInPlace src/effects/screenshot/screenshotdbusinterface1.cpp \
+      --replace 'file.readAll().startsWith(DEFINE_DDE_DOCK_PATH"dde-dock")' 'file.readAll().contains("dde-dock")'
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    extra-cmake-modules
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qttools
+    qtx11extras
+    wayland
+    dwayland
+    libepoxy
+    gsettings-qt
+
+    kconfig
+    kconfigwidgets
+    kcoreaddons
+    kcrash
+    kdbusaddons
+    kiconthemes
+
+    kglobalaccel
+    kidletime
+    knotifications
+    kpackage
+    plasma-framework
+    kcmutils
+    knewstuff
+    kdecoration
+    kscreenlocker
+
+    breeze-qt5
+    libinput
+    mesa
+    lcms2
+
+    xorg.libxcb
+    xorg.libXdmcp
+    xorg.libXcursor
+    xorg.xcbutilcursor
+    xorg.libXtst
+  ];
+
+  cmakeFlags = [
+    "-DKWIN_BUILD_RUNNERS=OFF"
+  ];
+
+  outputs = [ "out" "dev" ];
+
+  meta = with lib; {
+    description = "Fork of kwin, an easy to use, but flexible, composited Window Manager";
+    homepage = "https://github.com/linuxdeepin/deepin-kwin";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix b/nixpkgs/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix
new file mode 100644
index 000000000000..f9b4e7592fb8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/core/dpa-ext-gnomekeyring/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, dtkwidget
+, dde-polkit-agent
+, libsecret
+, libgnome-keyring
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dpa-ext-gnomekeyring";
+  version = "5.0.11";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-mXaGwbtEwaqfOT0izK64zX4s3VFmsRpUGOVm6oSEhn8=";
+  };
+
+  postPatch = ''
+    substituteInPlace gnomekeyringextention.cpp \
+      --replace "/usr/share/dpa-ext-gnomekeyring" "$out/share/dpa-ext-gnomekeyring"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    dde-polkit-agent
+    libgnome-keyring
+    libsecret
+  ];
+
+  meta = with lib; {
+    description = "GNOME keyring extension for dde-polkit-agent";
+    homepage = "https://github.com/linuxdeepin/dpa-ext-gnomekeyring";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/default.nix b/nixpkgs/pkgs/desktops/deepin/default.nix
new file mode 100644
index 000000000000..524e4ee0f1f0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/default.nix
@@ -0,0 +1,88 @@
+{ lib, pkgs, libsForQt5 }:
+let
+  packages = self:
+  let
+    inherit (self) callPackage;
+  in {
+    #### LIBRARIES
+    dtkcommon = callPackage ./library/dtkcommon { };
+    dtkcore = callPackage ./library/dtkcore { };
+    dtkgui = callPackage ./library/dtkgui { };
+    dtkwidget = callPackage ./library/dtkwidget { };
+    deepin-pdfium = callPackage ./library/deepin-pdfium { };
+    qt5platform-plugins = callPackage ./library/qt5platform-plugins { };
+    qt5integration = callPackage ./library/qt5integration { };
+    deepin-wayland-protocols = callPackage ./library/deepin-wayland-protocols { };
+    dwayland = callPackage ./library/dwayland { };
+    dde-qt-dbus-factory = callPackage ./library/dde-qt-dbus-factory { };
+    disomaster = callPackage ./library/disomaster { };
+    docparser = callPackage ./library/docparser { };
+    gio-qt = callPackage ./library/gio-qt { };
+    image-editor = callPackage ./library/image-editor { };
+    udisks2-qt5 = callPackage ./library/udisks2-qt5 { };
+    util-dfm = callPackage ./library/util-dfm { };
+
+    #### CORE
+    dde-kwin = callPackage ./core/dde-kwin { };
+    deepin-kwin = callPackage ./core/deepin-kwin { };
+    dde-app-services = callPackage ./core/dde-app-services { };
+    dde-control-center = callPackage ./core/dde-control-center { };
+    dde-calendar = callPackage ./core/dde-calendar { };
+    dde-clipboard = callPackage ./core/dde-clipboard { };
+    dde-dock = callPackage ./core/dde-dock { };
+    dde-file-manager = callPackage ./core/dde-file-manager { };
+    dde-launcher = callPackage ./core/dde-launcher { };
+    dde-network-core = callPackage ./core/dde-network-core { };
+    dde-session-shell = callPackage ./core/dde-session-shell { };
+    dde-session-ui = callPackage ./core/dde-session-ui { };
+    dde-polkit-agent = callPackage ./core/dde-polkit-agent { };
+    dpa-ext-gnomekeyring = callPackage ./core/dpa-ext-gnomekeyring { };
+    dde-gsettings-schemas = callPackage ./core/dde-gsettings-schemas { };
+
+    #### Dtk Application
+    deepin-album = callPackage ./apps/deepin-album { };
+    deepin-calculator = callPackage ./apps/deepin-calculator { };
+    deepin-camera = callPackage ./apps/deepin-camera { };
+    deepin-compressor = callPackage ./apps/deepin-compressor { };
+    deepin-clone = callPackage ./apps/deepin-clone { };
+    deepin-draw = callPackage ./apps/deepin-draw { };
+    deepin-editor = callPackage ./apps/deepin-editor { };
+    deepin-image-viewer = callPackage ./apps/deepin-image-viewer { };
+    deepin-movie-reborn = callPackage ./apps/deepin-movie-reborn { };
+    deepin-music = callPackage ./apps/deepin-music { };
+    deepin-picker = callPackage ./apps/deepin-picker { };
+    deepin-screen-recorder = callPackage ./apps/deepin-screen-recorder { };
+    deepin-shortcut-viewer = callPackage ./apps/deepin-shortcut-viewer { };
+    deepin-system-monitor = callPackage ./apps/deepin-system-monitor { };
+    deepin-terminal = callPackage ./apps/deepin-terminal { };
+    deepin-reader = callPackage ./apps/deepin-reader { };
+    deepin-voice-note = callPackage ./apps/deepin-voice-note { };
+    deepin-screensaver = callPackage ./apps/deepin-screensaver { };
+
+    #### Go Packages
+    go-lib = callPackage ./go-package/go-lib { };
+    go-gir-generator = callPackage ./go-package/go-gir-generator { };
+    go-dbus-factory = callPackage ./go-package/go-dbus-factory { };
+    dde-api = callPackage ./go-package/dde-api { };
+    dde-daemon = callPackage ./go-package/dde-daemon { };
+    deepin-pw-check = callPackage ./go-package/deepin-pw-check { };
+    deepin-desktop-schemas = callPackage ./go-package/deepin-desktop-schemas { };
+    startdde = callPackage ./go-package/startdde { };
+
+    #### TOOLS
+    dde-device-formatter = callPackage ./tools/dde-device-formatter { };
+    deepin-gettext-tools = callPackage ./tools/deepin-gettext-tools { };
+
+    #### ARTWORK
+    dde-account-faces = callPackage ./artwork/dde-account-faces { };
+    deepin-icon-theme = callPackage ./artwork/deepin-icon-theme { };
+    deepin-wallpapers = callPackage ./artwork/deepin-wallpapers { };
+    deepin-gtk-theme = callPackage ./artwork/deepin-gtk-theme { };
+    deepin-sound-theme = callPackage ./artwork/deepin-sound-theme { };
+
+    #### MISC
+    deepin-desktop-base = callPackage ./misc/deepin-desktop-base { };
+    deepin-turbo = callPackage ./misc/deepin-turbo { };
+  };
+in
+lib.makeScope libsForQt5.newScope packages
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/0001-dont-set-PATH.patch b/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/0001-dont-set-PATH.patch
new file mode 100644
index 000000000000..679c343604d7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/0001-dont-set-PATH.patch
@@ -0,0 +1,54 @@
+From 47952eb3dfeea945a070496ef6f77e8446d42f86 Mon Sep 17 00:00:00 2001
+From: rewine <lhongxu@outlook.com>
+Date: Tue, 21 Mar 2023 10:36:20 +0800
+Subject: [PATCH] chore: dont set PATH env
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Log: dbus 环境缺失环境变量应该由 dbus-update-activation-environment 处理 ,不应该由 dde-api 设置 PATH
+---
+ device/main.go        | 2 --
+ locale-helper/main.go | 2 --
+ 2 files changed, 4 deletions(-)
+
+diff --git a/device/main.go b/device/main.go
+index 6c5404c..261f109 100644
+--- a/device/main.go
++++ b/device/main.go
+@@ -5,7 +5,6 @@
+ package main
+ 
+ import (
+-	"os"
+ 	"time"
+ 
+ 	"github.com/linuxdeepin/go-lib/dbusutil"
+@@ -15,7 +14,6 @@ import (
+ var logger = log.NewLogger(dbusServiceName)
+ 
+ func main() {
+-	os.Setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
+ 	service, err := dbusutil.NewSystemService()
+ 	if err != nil {
+ 		logger.Fatal("failed to new system service:", err)
+diff --git a/locale-helper/main.go b/locale-helper/main.go
+index 92e1ddb..5e3a2ff 100644
+--- a/locale-helper/main.go
++++ b/locale-helper/main.go
+@@ -5,7 +5,6 @@
+ package main
+ 
+ import (
+-	"os"
+ 	"os/exec"
+ 	"sync"
+ 	"time"
+@@ -45,7 +44,6 @@ var (
+ )
+ 
+ func main() {
+-	os.Setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
+ 	logger.BeginTracing()
+ 	defer logger.EndTracing()
+ 
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/default.nix
new file mode 100644
index 000000000000..87038ae5e49b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/default.nix
@@ -0,0 +1,121 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, buildGoPackage
+, wrapQtAppsHook
+, wrapGAppsHook
+, gtk3
+, pkg-config
+, deepin-gettext-tools
+, alsa-lib
+, go-dbus-factory
+, go-gir-generator
+, go-lib
+, libcanberra
+, libgudev
+, librsvg
+, poppler
+, pulseaudio
+, gdk-pixbuf-xlib
+, dbus
+, coreutils
+, deepin-desktop-base
+}:
+
+buildGoPackage rec {
+  pname = "dde-api";
+  version = "5.5.32";
+
+  goPackagePath = "github.com/linuxdeepin/dde-api";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-F+vEOSpysqVtjs8de5mCmeANuCbYUQ860ZHl5rwNYac=";
+  };
+
+  patches = [ ./0001-dont-set-PATH.patch ];
+
+  postPatch = ''
+    substituteInPlace lang_info/lang_info.go \
+      --replace "/usr/share/i18n/language_info.json" "${deepin-desktop-base}/share/i18n/language_info.json"
+
+    substituteInPlace misc/systemd/system/deepin-shutdown-sound.service \
+      --replace "/usr/bin/true" "${coreutils}/bin/true"
+
+    substituteInPlace sound-theme-player/main.go \
+      --replace "/usr/sbin/alsactl" "alsactl"
+
+    substituteInPlace misc/scripts/deepin-boot-sound.sh \
+     --replace "/usr/bin/dbus-send" "${dbus}/bin/dbus-send"
+
+    substituteInPlace lunar-calendar/huangli.go adjust-grub-theme/main.go \
+      --replace "/usr/share/dde-api" "$out/share/dde-api"
+
+    substituteInPlace themes/{theme.go,settings.go} \
+      --replace "/usr/share" "/run/current-system/sw/share"
+
+    for file in $(grep "/usr/lib/deepin-api" * -nR |awk -F: '{print $1}')
+    do
+      sed -i 's|/usr/lib/deepin-api|/run/current-system/sw/lib/deepin-api|g' $file
+    done
+  '';
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [
+    pkg-config
+    deepin-gettext-tools
+    wrapQtAppsHook
+    wrapGAppsHook
+  ];
+  dontWrapGApps = true;
+
+  buildInputs = [
+    go-dbus-factory
+    go-gir-generator
+    go-lib
+    gtk3
+    alsa-lib
+    libcanberra
+    libgudev
+    librsvg
+    poppler
+    pulseaudio
+    gdk-pixbuf-xlib
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    addToSearchPath GOPATH "${go-dbus-factory}/share/gocode"
+    addToSearchPath GOPATH "${go-gir-generator}/share/gocode"
+    addToSearchPath GOPATH "${go-lib}/share/gocode"
+    make -C go/src/${goPackagePath}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    make install DESTDIR="$out" PREFIX="/" -C go/src/${goPackagePath}
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postFixup = ''
+    for binary in $out/lib/deepin-api/*; do
+      wrapProgram $binary "''${qtWrapperArgs[@]}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Dbus interfaces used for screen zone detecting, thumbnail generating, sound playing, etc";
+    homepage = "https://github.com/linuxdeepin/dde-api";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/deps.nix b/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/deps.nix
new file mode 100644
index 000000000000..52ee3d963cf9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-api/deps.nix
@@ -0,0 +1,210 @@
+[
+  {
+    goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/alecthomas/kingpin.v2";
+      rev = "v2.2.6";
+      sha256 = "sha256-uViE2kPj7tMrGYVjjdLOl2jFDmmu+3P7GvnZBse2zVY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/disintegration/imaging";
+    fetch = {
+      type = "git";
+      url = "https://github.com/disintegration/imaging";
+      rev = "v1.6.2";
+      sha256 = "sha256-pSeMTPvSkxlthh65LjNYYhPLvCZDkBgVgAGYWW0Aguo=";
+    };
+  }
+  {
+    goPackagePath = "github.com/linuxdeepin/go-x11-client";
+    fetch = {
+      type = "git";
+      url = "https://github.com/linuxdeepin/go-x11-client";
+      rev = "0.6.9";
+      sha256 = "sha256-xXNaXpFFHJN1fCFLoVrQFCXQ4ya+Kga55QWcJL/InkA=";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-sqlites";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev = "v1.14.12";
+      sha256 = "sha256-SLW1FyyfJGPUid1epgmJHZGJebI77Wg5WMAPiz1GcYs=";
+    };
+  }
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "v5.1.0";
+      sha256 = "sha256-JSPtmkGEStBEVrKGszeLCb7P38SzQKgMiDC3eDppXs0=";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "v1.5.1";
+      sha256 = "sha256-B8kZ8yiWgallT7R2j1kSRJcJkSGFVf9ise+TpXa+7XY=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sys";
+      rev = "289d7a0edf712062d9f1484b07bdf2383f48802f";
+      sha256 = "sha256-AzS/J3OocI7mA0xsIfQzyskNKVija7F2yvuts+EFJBs=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.7.1";
+      sha256 = "sha256-disUVIHiIDSj/go3APtJH8awSl8QwKRRFLKI7LRnl0w=";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI=";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "5d4384ee4fb2527b0a1256a821ebfc92f91efefc";
+      sha256 = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.3.0";
+      sha256 = "sha256-T753/EiD5Cpk6H2JFhd+s1gFvpNptG2XlEHxZF6dQaw=";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev = "496545a6307b2a7d7a710fd516e5e16e8ab62dbc";
+      sha256 = "sha256-j8yDji+vqsitpRZirpb4w/Em8nstgf28wpwkcrOlxBk=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/image";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/image";
+      rev = "a8550c1d254a56cf1762a2993881d2b23c0c83dd";
+      sha256 = "sha256-gtRGCsCe8tKLsZWhKLL8c5whz9rCMoCHfH13rcSW/OM=";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev = "b94a6e3cc13755c0a75fffecbb089eb346fc4289";
+      sha256 = "sha256-uriYmwxT69xbmWKO/5OAyeMa2lFBOJDrU2KtQh/+ZjY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev = "fb15b899a75114aa79cc930e33c46b577cc664b1";
+      sha256 = "sha256-RsS4qxdRQ3q+GejA8D9Iu31A/mZNms4LbJ7518jWiu4=";
+    };
+  }
+  {
+    goPackagePath = "github.com/cryptix/wav";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cryptix/wav";
+      rev = "8bdace674401f0bd3b63c65479b6a6ff1f9d5e44";
+      sha256 = "sha256-psUCHRFGEOpN3obFbCvSfW0AGEFSI29d0q4MFsHG3qI=";
+    };
+  }
+  {
+    goPackagePath = "github.com/fogleman/gg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fogleman/gg";
+      rev = "v1.3.0";
+      sha256 = "sha256-Fs2JI0FmF4N5EzXJzGAPZMxZxo6wKyebkN/iBZ9sdNo=";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/freetype";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/freetype";
+      rev = "e2365dfdc4a05e4b8299a783240d4a7d5a65d4e4";
+      sha256 = "sha256-rOOsv1sNLbYEKnwXZtUlB2CXVkFANyzZy2E7w2QbnKQ=";
+    };
+  }
+  {
+    goPackagePath = "github.com/gosexy/gettext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gosexy/gettext";
+      rev = "74466a0a0c4a62fea38f44aa161d4bbfbe79dd6b";
+      sha256 = "sha256-8U2oSi446U13c3uqcbg/14okypxKmckRuvWfZlGHVys=";
+    };
+  }
+  {
+    goPackagePath = "github.com/nfnt/resize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nfnt/resize";
+      rev = "83c6a9932646f83e3267f353373d47347b6036b2";
+      sha256 = "sha256-yvPV+HlDOyJsiwAcVHQkmtw8DHSXyw+cXHkigXm8rAA=";
+    };
+  }
+  {
+    goPackagePath = "github.com/youpy/go-wav";
+    fetch = {
+      type = "git";
+      url = "https://github.com/youpy/go-wav";
+      rev = "v0.3.2";
+      sha256 = "sha256-jNqXW3F3fcgjT47+d2MVXauWkA7+1KfYVu3ZZpRCTkM=";
+    };
+  }
+  {
+    goPackagePath = "github.com/zaf/g711";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zaf/g711";
+      rev = "v1.2";
+      sha256 = "sha256-G+0cgGw/fcOUFVn32AeqUE0YjyOS82Z5MTcn6IANhCY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/youpy/go-riff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/youpy/go-riff";
+      rev = "v0.1.0";
+      sha256 = "sha256-d/3rkxDeRTPveZblArKc61gB4LJVV08n7g0THieuhx8=";
+    };
+  }
+]
+
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0001-fix-wrapped-name-for-verifyExe.patch b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0001-fix-wrapped-name-for-verifyExe.patch
new file mode 100644
index 000000000000..6eb7ad2c362f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0001-fix-wrapped-name-for-verifyExe.patch
@@ -0,0 +1,33 @@
+From ad18742c699a08cd82f8926a31da9a19b2aef329 Mon Sep 17 00:00:00 2001
+From: rewine <lhongxu@outlook.com>
+Date: Wed, 5 Apr 2023 23:37:24 +0800
+Subject: [PATCH 1/4] fix-wrapped-name-for-verifyExe
+
+---
+ dock/process_info.go | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/dock/process_info.go b/dock/process_info.go
+index 83c61d58..e2970f3a 100644
+--- a/dock/process_info.go
++++ b/dock/process_info.go
+@@ -119,6 +119,16 @@ func verifyExe(exe, cwd, firstArg string) bool {
+ 		return false
+ 	}
+ 	logger.Debugf("firstArgPath: %q", firstArgPath)
++	if exe == firstArgPath {
++		return true
++	}
++	if strings.HasSuffix(exe, "-wrapped") {
++		exeBase := filepath.Base(exe)
++		if (len(exeBase) <= 9) {
++			return false
++		}
++		exe = exe[0:len(exe)-len(exeBase)] + exeBase[1:len(exeBase)-8]
++	}
+ 	return exe == firstArgPath
+ }
+ 
+-- 
+2.39.2
+
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0002-dont-set-PATH.patch b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0002-dont-set-PATH.patch
new file mode 100644
index 000000000000..cf69496105c5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0002-dont-set-PATH.patch
@@ -0,0 +1,40 @@
+From 7fe41aac7c31f6143b5f5887dbefa41fdf4c252b Mon Sep 17 00:00:00 2001
+From: rewine <lhongxu@outlook.com>
+Date: Wed, 5 Apr 2023 23:37:49 +0800
+Subject: [PATCH 2/4] dont-set-PATH
+
+---
+ bin/dde-system-daemon/main.go | 4 ----
+ grub2/modify_manger.go        | 1 -
+ 2 files changed, 5 deletions(-)
+
+diff --git a/bin/dde-system-daemon/main.go b/bin/dde-system-daemon/main.go
+index 03d2a415..cf92f065 100644
+--- a/bin/dde-system-daemon/main.go
++++ b/bin/dde-system-daemon/main.go
+@@ -77,10 +77,6 @@ func main() {
+ 	// fix no PATH when was launched by dbus
+ 	if os.Getenv("PATH") == "" {
+ 		logger.Warning("No PATH found, manual special")
+-		err = os.Setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
+-		if err != nil {
+-			logger.Warning(err)
+-		}
+ 	}
+ 
+ 	// 系统级服务,无需设置LANG和LANGUAGE,保证翻译不受到影响
+diff --git a/grub2/modify_manger.go b/grub2/modify_manger.go
+index a811770b..30e9561e 100644
+--- a/grub2/modify_manger.go
++++ b/grub2/modify_manger.go
+@@ -21,7 +21,6 @@ const (
+ )
+ 
+ func init() {
+-	_ = os.Setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
+ }
+ 
+ type modifyManager struct {
+-- 
+2.39.2
+
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0003-search-in-XDG-directories.patch b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0003-search-in-XDG-directories.patch
new file mode 100644
index 000000000000..c0a8a02558c5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0003-search-in-XDG-directories.patch
@@ -0,0 +1,254 @@
+From a0667a7e82b3176e64122f4d68c43de4fa350780 Mon Sep 17 00:00:00 2001
+From: rewine <luhongxu@deepin.org>
+Date: Tue, 18 Apr 2023 17:04:36 +0800
+Subject: [PATCH 3/4] search-in-XDG-directories
+
+---
+ accounts/manager.go                     |  5 ++++-
+ accounts/user.go                        |  8 +++++++-
+ appearance/fsnotify.go                  | 21 +++++++++++++++++----
+ appearance/ifc.go                       |  3 ++-
+ apps/utils.go                           |  3 ++-
+ gesture/config.go                       |  4 ++--
+ keybinding/shortcuts/system_shortcut.go |  4 +++-
+ mime/app_info.go                        |  7 ++++++-
+ system/gesture/config.go                |  4 +++-
+ 9 files changed, 46 insertions(+), 13 deletions(-)
+
+diff --git a/accounts/manager.go b/accounts/manager.go
+index 22c26ce7..009d9dd9 100644
+--- a/accounts/manager.go
++++ b/accounts/manager.go
+@@ -15,6 +15,7 @@ import (
+ 	"sync"
+ 	"syscall"
+ 
++	"github.com/adrg/xdg"
+ 	dbus "github.com/godbus/dbus"
+ 	"github.com/linuxdeepin/dde-daemon/accounts/users"
+ 	"github.com/linuxdeepin/dde-daemon/common/sessionmsg"
+@@ -35,8 +36,10 @@ const (
+ 	actConfigFile       = actConfigDir + "/accounts.ini"
+ 	actConfigGroupGroup = "Accounts"
+ 	actConfigKeyGuest   = "AllowGuest"
++)
+ 
+-	interfacesFile = "/usr/share/dde-daemon/accounts/dbus-udcp.json"
++var (
++	interfacesFile, _ = xdg.SearchDataFile("dde-daemon/accounts/dbus-udcp.json")
+ )
+ 
+ type InterfaceConfig struct {
+diff --git a/accounts/user.go b/accounts/user.go
+index 900033c6..f8827fb2 100644
+--- a/accounts/user.go
++++ b/accounts/user.go
+@@ -15,6 +15,7 @@ import (
+ 	"strings"
+ 	"sync"
+ 
++	"github.com/adrg/xdg"
+ 	dbus "github.com/godbus/dbus"
+ 	"github.com/linuxdeepin/dde-daemon/accounts/users"
+ 	authenticate "github.com/linuxdeepin/go-dbus-factory/com.deepin.daemon.authenticate"
+@@ -649,7 +650,12 @@ func getUserSession(homeDir string) string {
+ }
+ 
+ func getSessionList() []string {
+-	fileInfoList, err := ioutil.ReadDir("/usr/share/xsessions")
++	xsessionPath, err := xdg.SearchDataFile("xsessions")
++	if err != nil {
++		return nil;
++	}
++
++	fileInfoList, err := ioutil.ReadDir(xsessionPath)
+ 	if err != nil {
+ 		return nil
+ 	}
+diff --git a/appearance/fsnotify.go b/appearance/fsnotify.go
+index a409d0ba..ff674600 100644
+--- a/appearance/fsnotify.go
++++ b/appearance/fsnotify.go
+@@ -5,12 +5,15 @@
+ package appearance
+ 
+ import (
++	"errors"
++	"io/fs"
+ 	"os"
+ 	"path"
+ 	"path/filepath"
+ 	"strings"
+ 	"time"
+ 
++	"github.com/adrg/xdg"
+ 	"github.com/fsnotify/fsnotify"
+ 	"github.com/linuxdeepin/dde-daemon/appearance/background"
+ 	"github.com/linuxdeepin/dde-daemon/appearance/subthemes"
+@@ -100,9 +103,14 @@ func (m *Manager) watchGtkDirs() {
+ 	gtkDirs = []string{
+ 		path.Join(home, ".local/share/themes"),
+ 		path.Join(home, ".themes"),
+-		"/usr/local/share/themes",
+-		"/usr/share/themes",
+ 	}
++	for _, dataPath := range xdg.DataDirs {
++                gtkPath := filepath.Join(dataPath, "themes");
++                if _, err := os.Stat(gtkPath); err != nil && errors.Is(err, fs.ErrNotExist) {
++                        continue
++                }
++                gtkDirs = append(gtkDirs, gtkPath);
++        }
+ 
+ 	m.watchDirs(gtkDirs)
+ }
+@@ -112,9 +120,14 @@ func (m *Manager) watchIconDirs() {
+ 	iconDirs = []string{
+ 		path.Join(home, ".local/share/icons"),
+ 		path.Join(home, ".icons"),
+-		"/usr/local/share/icons",
+-		"/usr/share/icons",
+ 	}
++	for _, dataPath := range xdg.DataDirs {
++                iconPath := filepath.Join(dataPath, "icons");
++                if _, err := os.Stat(iconPath); err != nil && errors.Is(err, fs.ErrNotExist) {
++                        continue
++                }
++                iconDirs = append(iconDirs, iconPath);
++        }
+ 
+ 	m.watchDirs(iconDirs)
+ }
+diff --git a/appearance/ifc.go b/appearance/ifc.go
+index f0bf32a3..6d60ffe4 100644
+--- a/appearance/ifc.go
++++ b/appearance/ifc.go
+@@ -10,6 +10,7 @@ import (
+ 	"strconv"
+ 	"strings"
+ 
++	"github.com/adrg/xdg"
+ 	"github.com/godbus/dbus"
+ 	"github.com/linuxdeepin/dde-daemon/appearance/fonts"
+ 	"github.com/linuxdeepin/dde-daemon/appearance/subthemes"
+@@ -265,7 +266,7 @@ func (m *Manager) thumbnail(ty, name string) (string, error) {
+ 	case TypeGtkTheme:
+ 		fName, ok := gtkThumbnailMap[name]
+ 		if ok {
+-			return filepath.Join("/usr/share/dde-daemon/appearance", fName+".svg"), nil
++			return xdg.SearchDataFile(filepath.Join("dde-daemon/appearance", fName+".svg"))
+ 		}
+ 		return subthemes.GetGtkThumbnail(name)
+ 	case TypeIconTheme:
+diff --git a/apps/utils.go b/apps/utils.go
+index 8863d6c2..dd6f8e16 100644
+--- a/apps/utils.go
++++ b/apps/utils.go
+@@ -11,6 +11,7 @@ import (
+ 	"strconv"
+ 	"strings"
+ 	"syscall"
++	"github.com/adrg/xdg"
+ )
+ 
+ func intSliceContains(slice []int, a int) bool {
+@@ -96,7 +97,7 @@ func removeDesktopExt(name string) string {
+ }
+ 
+ func getSystemDataDirs() []string {
+-	return []string{"/usr/share", "/usr/local/share"}
++	return xdg.DataDirs
+ }
+ 
+ // get user home
+diff --git a/gesture/config.go b/gesture/config.go
+index bfbd4db7..4ce9d641 100644
+--- a/gesture/config.go
++++ b/gesture/config.go
+@@ -10,6 +10,7 @@ import (
+ 	"io/ioutil"
+ 	"path/filepath"
+ 
++	"github.com/adrg/xdg"
+ 	"github.com/linuxdeepin/go-lib/xdg/basedir"
+ )
+ 
+@@ -21,11 +22,10 @@ const (
+ 
+ var (
+ 	configUserPath = filepath.Join(basedir.GetUserConfigDir(), "deepin/dde-daemon/gesture.json")
++	configSystemPath, _ = xdg.SearchDataFile("dde-daemon/gesture.json")
+ )
+ 
+ const (
+-	configSystemPath = "/usr/share/dde-daemon/gesture.json"
+-
+ 	gestureSchemaId         = "com.deepin.dde.gesture"
+ 	gsKeyTouchPadEnabled    = "touch-pad-enabled"
+ 	gsKeyTouchScreenEnabled = "touch-screen-enabled"
+diff --git a/keybinding/shortcuts/system_shortcut.go b/keybinding/shortcuts/system_shortcut.go
+index eaec22b5..95e1b222 100644
+--- a/keybinding/shortcuts/system_shortcut.go
++++ b/keybinding/shortcuts/system_shortcut.go
+@@ -10,6 +10,7 @@ import (
+ 	"path"
+ 	"sync"
+ 
++	"github.com/adrg/xdg"
+ 	dutils "github.com/linuxdeepin/go-lib/utils"
+ )
+ 
+@@ -152,5 +153,6 @@ func getSystemActionsFile() string {
+ 		return file
+ 	}
+ 
+-	return ""
++	filepath, _ := xdg.SearchDataFile(systemActionsFile)
++	return filepath;
+ }
+diff --git a/mime/app_info.go b/mime/app_info.go
+index 63fcdcc0..18436164 100644
+--- a/mime/app_info.go
++++ b/mime/app_info.go
+@@ -9,6 +9,7 @@ import (
+ 	"os"
+ 	"path"
+ 
++	"github.com/adrg/xdg"
+ 	"github.com/linuxdeepin/go-lib/appinfo/desktopappinfo"
+ 	"github.com/linuxdeepin/go-lib/mime"
+ 	dutils "github.com/linuxdeepin/go-lib/utils"
+@@ -162,5 +163,9 @@ func findFilePath(file string) string {
+ 		return data
+ 	}
+ 
+-	return path.Join("/usr/share", file)
++	filepath, err := xdg.SearchDataFile(file)
++	if err != nil {
++		return path.Join("/usr/share", file)
++	}
++	return filepath;
+ }
+diff --git a/system/gesture/config.go b/system/gesture/config.go
+index d4aebaac..f3fc92c3 100644
+--- a/system/gesture/config.go
++++ b/system/gesture/config.go
+@@ -8,6 +8,7 @@ import (
+ 	"encoding/json"
+ 	"io/ioutil"
+ 
++	"github.com/adrg/xdg"
+ 	"github.com/linuxdeepin/go-lib/utils"
+ )
+ 
+@@ -35,5 +36,6 @@ func getConfigPath() string {
+ 	if utils.IsFileExist(filename) {
+ 		return filename
+ 	}
+-	return "/usr/share/" + suffix
++	filepath, _ := xdg.SearchDataFile(suffix)
++	return filepath;
+ }
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0004-aviod-use-hardcode-path.patch b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0004-aviod-use-hardcode-path.patch
new file mode 100644
index 000000000000..f47bed99b293
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0004-aviod-use-hardcode-path.patch
@@ -0,0 +1,323 @@
+From 12a5ccce245f82c334e78d48354e55311c15fb0c Mon Sep 17 00:00:00 2001
+From: rewine <lhongxu@outlook.com>
+Date: Wed, 5 Apr 2023 23:51:58 +0800
+Subject: [PATCH 4/4] aviod-use-hardcode-path
+
+---
+ accounts/user.go                              |  2 +-
+ accounts/user_chpwd_union_id.go               |  9 ++++-----
+ bin/backlight_helper/ddcci/ddcci.go           | 20 +++++--------------
+ bin/dde-authority/fprint_transaction.go       |  2 +-
+ inputdevices/keyboard.go                      |  5 +++--
+ keybinding/shortcuts/system_shortcut.go       |  6 +++---
+ keybinding/special_keycode.go                 |  2 +-
+ keybinding/utils.go                           |  2 +-
+ launcher/manager_ifc.go                       |  2 +-
+ .../dde-daemon/keybinding/system_actions.json |  4 ++--
+ misc/etc/acpi/powerbtn.sh                     |  2 +-
+ misc/udev-rules/80-deepin-fprintd.rules       |  2 +-
+ system/display/displaycfg.go                  |  2 +-
+ system/power/manager_lmt.go                   |  3 ++-
+ system/power_manager/utils.go                 |  2 +-
+ system/systeminfo/manager.go                  |  2 +-
+ systeminfo/utils.go                           |  2 +-
+ 17 files changed, 30 insertions(+), 39 deletions(-)
+
+diff --git a/accounts/user.go b/accounts/user.go
+index f8827fb2..ff604f38 100644
+--- a/accounts/user.go
++++ b/accounts/user.go
+@@ -450,7 +450,7 @@ func (u *User) checkIsControlCenter(sender dbus.Sender) bool {
+ 		return false
+ 	}
+ 
+-	if exe == controlCenterPath {
++	if strings.Contains(exe, "dde-control-center") {
+ 		return true
+ 	}
+ 
+diff --git a/accounts/user_chpwd_union_id.go b/accounts/user_chpwd_union_id.go
+index b0ba9cb9..e8aa1a1e 100644
+--- a/accounts/user_chpwd_union_id.go
++++ b/accounts/user_chpwd_union_id.go
+@@ -107,14 +107,13 @@ func newCaller(service *dbusutil.Service, sender dbus.Sender) (ret *caller, err
+ 
+ 	// 只允许来自控制中心, 锁屏和 greetter 的调用
+ 	var app string
+-	switch exe {
+-	case "/usr/bin/dde-control-center":
++	if (strings.Contains(exe, "dde-control-center")) {
+ 		app = "control-center"
+-	case "/usr/bin/dde-lock":
++	} else if (strings.Contains(exe, "dde-lock")) {
+ 		app = "lock"
+-	case "/usr/bin/lightdm-deepin-greeter":
++	} else if (strings.Contains(exe, "lightdm-deepin-greeter")) {
+ 		app = "greeter"
+-	default:
++	} else {
+ 		err = fmt.Errorf("set password with Union ID called by %s, which is not allow", exe)
+ 		return
+ 	}
+diff --git a/bin/backlight_helper/ddcci/ddcci.go b/bin/backlight_helper/ddcci/ddcci.go
+index 21653459..01a67e91 100644
+--- a/bin/backlight_helper/ddcci/ddcci.go
++++ b/bin/backlight_helper/ddcci/ddcci.go
+@@ -15,10 +15,7 @@ import (
+ 	"bytes"
+ 	"encoding/base64"
+ 	"fmt"
+-	"os/exec"
+-	"path/filepath"
+ 	"reflect"
+-	"strings"
+ 	"sync"
+ 	"unsafe"
+ 
+@@ -113,18 +110,11 @@ func newDDCCI() (*ddcci, error) {
+ 		return nil, err
+ 	}
+ 
+-	content, err := exec.Command("/usr/bin/dpkg-architecture", "-qDEB_HOST_MULTIARCH").Output() // TODO: arch和rpm打包需要通过patch修改获取路径的方式
+-	if err != nil {
+-		logger.Warning(err)
+-	} else {
+-		path := filepath.Join("/usr/lib", strings.TrimSpace(string(content)), "libddcutil.so.0")
+-		logger.Debug("so path:", path)
+-		cStr := C.CString(path)
+-		defer C.free(unsafe.Pointer(cStr))
+-		ret := C.InitDDCCISo(cStr)
+-		if ret == -2 {
+-			logger.Debug("failed to initialize ddca_free_all_displays sym")
+-		}
++	cStr := C.CString("libddcutil.so.0")
++	defer C.free(unsafe.Pointer(cStr))
++	ret := C.InitDDCCISo(cStr)
++	if ret == -2 {
++		logger.Debug("failed to initialize ddca_free_all_displays sym")
+ 	}
+ 
+ 	return ddc, nil
+diff --git a/bin/dde-authority/fprint_transaction.go b/bin/dde-authority/fprint_transaction.go
+index 0e460ec3..b803d1c9 100644
+--- a/bin/dde-authority/fprint_transaction.go
++++ b/bin/dde-authority/fprint_transaction.go
+@@ -461,7 +461,7 @@ func (tx *FPrintTransaction) End(sender dbus.Sender) *dbus.Error {
+ 
+ func killFPrintDaemon() {
+ 	logger.Debug("kill fprintd")
+-	err := exec.Command("pkill", "-f", "/usr/lib/fprintd/fprintd").Run()
++	err := exec.Command("pkill", "fprintd").Run()
+ 	if err != nil {
+ 		logger.Warning("failed to kill fprintd:", err)
+ 	}
+diff --git a/inputdevices/keyboard.go b/inputdevices/keyboard.go
+index 6d05f662..ca29cecc 100644
+--- a/inputdevices/keyboard.go
++++ b/inputdevices/keyboard.go
+@@ -10,6 +10,7 @@ import (
+ 	"fmt"
+ 	"os"
+ 	"os/user"
++	"os/exec"
+ 	"path"
+ 	"regexp"
+ 	"strings"
+@@ -51,7 +52,7 @@ const (
+ 	kbdSystemConfig = "/etc/default/keyboard"
+ 	qtDefaultConfig = ".config/Trolltech.conf"
+ 
+-	cmdSetKbd = "/usr/bin/setxkbmap"
++	cmdSetKbd = "setxkbmap"
+ )
+ 
+ type Keyboard struct {
+@@ -704,7 +705,7 @@ func (kbd *Keyboard) handlePropertyNotifyEvent(ev *x.PropertyNotifyEvent) {
+ }
+ 
+ func (kbd *Keyboard) shouldUseDDEKwin() bool {
+-	_, err := os.Stat("/usr/bin/kwin_no_scale")
++	_, err := exec.LookPath("kwin_no_scale")
+ 	return err == nil
+ }
+ 
+diff --git a/keybinding/shortcuts/system_shortcut.go b/keybinding/shortcuts/system_shortcut.go
+index 95e1b222..95d82db7 100644
+--- a/keybinding/shortcuts/system_shortcut.go
++++ b/keybinding/shortcuts/system_shortcut.go
+@@ -83,10 +83,10 @@ var defaultSysActionCmdMap = map[string]string{
+ 	"launcher":               "dbus-send --print-reply --dest=com.deepin.dde.Launcher /com/deepin/dde/Launcher com.deepin.dde.Launcher.Toggle",
+ 	"terminal":               "/usr/lib/deepin-daemon/default-terminal",
+ 	"terminal-quake":         "deepin-terminal --quake-mode",
+-	"lock-screen":            "originmap=$(setxkbmap -query | grep option | awk -F ' ' '{print $2}');/usr/bin/setxkbmap -option grab:break_actions&&/usr/bin/xdotool key XF86Ungrab&&dbus-send --print-reply --dest=com.deepin.dde.lockFront /com/deepin/dde/lockFront com.deepin.dde.lockFront.Show&&/usr/bin/setxkbmap -option; setxkbmap -option $originmap",
++	"lock-screen":            "originmap=$(setxkbmap -query | grep option | awk -F ' ' '{print $2}');setxkbmap -option grab:break_actions&&xdotool key XF86Ungrab&&dbus-send --print-reply --dest=com.deepin.dde.lockFront /com/deepin/dde/lockFront com.deepin.dde.lockFront.Show&&/usr/bin/setxkbmap -option; setxkbmap -option $originmap",
+ 	"logout":                 "dbus-send --print-reply --dest=com.deepin.dde.shutdownFront /com/deepin/dde/shutdownFront com.deepin.dde.shutdownFront.Show",
+ 	"deepin-screen-recorder": "dbus-send --print-reply --dest=com.deepin.ScreenRecorder /com/deepin/ScreenRecorder com.deepin.ScreenRecorder.stopRecord",
+-	"system-monitor":         "/usr/bin/deepin-system-monitor",
++	"system-monitor":         "deepin-system-monitor",
+ 	"color-picker":           "dbus-send --print-reply --dest=com.deepin.Picker /com/deepin/Picker com.deepin.Picker.Show",
+ 	// screenshot actions:
+ 	"screenshot":             screenshotCmdPrefix + "StartScreenshot",
+@@ -104,7 +104,7 @@ var defaultSysActionCmdMap = map[string]string{
+ 	"global-search":          "/usr/libexec/dde-daemon/keybinding/shortcut-dde-grand-search.sh",
+ 	"switch-next-kbd-layout": "dbus-send --print-reply --dest=com.deepin.daemon.Keybinding /com/deepin/daemon/InputDevice/Keyboard com.deepin.daemon.InputDevice.Keyboard.ToggleNextLayout",
+ 	// cmd
+-	"calculator": "/usr/bin/deepin-calculator",
++	"calculator": "deepin-calculator",
+ 	"search":     "/usr/libexec/dde-daemon/keybinding/shortcut-dde-grand-search.sh",
+ }
+ 
+diff --git a/keybinding/special_keycode.go b/keybinding/special_keycode.go
+index d18c9a66..9704b241 100644
+--- a/keybinding/special_keycode.go
++++ b/keybinding/special_keycode.go
+@@ -276,7 +276,7 @@ func (m *Manager) handlePower() {
+ 		}
+ 		m.systemTurnOffScreen()
+ 	case powerActionShowUI:
+-		cmd := "originmap=$(setxkbmap -query | grep option | awk -F ' ' '{print $2}');/usr/bin/setxkbmap -option grab:break_actions&&/usr/bin/xdotool key XF86Ungrab&&dbus-send --print-reply --dest=com.deepin.dde.lockFront /com/deepin/dde/shutdownFront com.deepin.dde.shutdownFront.Show&&/usr/bin/setxkbmap -option; setxkbmap -option $originmap"
++		cmd := "originmap=$(setxkbmap -query | grep option | awk -F ' ' '{print $2}');setxkbmap -option grab:break_actions&&xdotool key XF86Ungrab&&dbus-send --print-reply --dest=com.deepin.dde.lockFront /com/deepin/dde/shutdownFront com.deepin.dde.shutdownFront.Show&&setxkbmap -option; setxkbmap -option $originmap"
+ 		go func() {
+ 			locked, err := m.sessionManager.Locked().Get(0)
+ 			if err != nil {
+diff --git a/keybinding/utils.go b/keybinding/utils.go
+index 8e531369..261c88e8 100644
+--- a/keybinding/utils.go
++++ b/keybinding/utils.go
+@@ -311,7 +311,7 @@ func readTinyFile(file string) ([]byte, error) {
+ }
+ 
+ func shouldUseDDEKwin() bool {
+-	_, err := os.Stat("/usr/bin/kwin_no_scale")
++	_, err := exec.LookPath("kwin_no_scale")
+ 	return err == nil
+ }
+ 
+diff --git a/launcher/manager_ifc.go b/launcher/manager_ifc.go
+index 440aa8e5..ad74f99f 100644
+--- a/launcher/manager_ifc.go
++++ b/launcher/manager_ifc.go
+@@ -24,7 +24,7 @@ const (
+ 	dbusObjPath        = "/com/deepin/dde/daemon/Launcher"
+ 	dbusInterface      = dbusServiceName
+ 	desktopMainSection = "Desktop Entry"
+-	launcherExecPath   = "/usr/bin/dde-launcher"
++	launcherExecPath   = "dde-launcher"
+ )
+ 
+ var errorInvalidID = errors.New("invalid ID")
+diff --git a/misc/dde-daemon/keybinding/system_actions.json b/misc/dde-daemon/keybinding/system_actions.json
+index 8de3f111..8048048e 100644
+--- a/misc/dde-daemon/keybinding/system_actions.json
++++ b/misc/dde-daemon/keybinding/system_actions.json
+@@ -13,7 +13,7 @@
+             "Action": "dbus-send --print-reply --dest=com.deepin.ScreenRecorder /com/deepin/ScreenRecorder com.deepin.ScreenRecorder.stopRecord"
+         },
+         {
+-            "Action": "/usr/bin/deepin-system-monitor",
++            "Action": "deepin-system-monitor",
+             "Key": "system-monitor"
+         },
+         {
+@@ -21,7 +21,7 @@
+             "Action": "dbus-send --print-reply --dest=com.deepin.Picker /com/deepin/Picker com.deepin.Picker.Show"
+         },
+         {
+-            "Action": "originmap=$(setxkbmap -query | grep option | awk -F ' ' '{print $2}');/usr/bin/setxkbmap -option grab:break_actions&&/usr/bin/xdotool key XF86Ungrab&&dbus-send --print-reply --dest=com.deepin.dde.lockFront /com/deepin/dde/lockFront com.deepin.dde.lockFront.Show&&/usr/bin/setxkbmap -option; setxkbmap -option $originmap",
++            "Action": "originmap=$(setxkbmap -query | grep option | awk -F ' ' '{print $2}');setxkbmap -option grab:break_actions&&xdotool key XF86Ungrab&&dbus-send --print-reply --dest=com.deepin.dde.lockFront /com/deepin/dde/lockFront com.deepin.dde.lockFront.Show&&setxkbmap -option; setxkbmap -option $originmap",
+             "Key": "lock-screen"
+         },
+         {
+diff --git a/misc/etc/acpi/powerbtn.sh b/misc/etc/acpi/powerbtn.sh
+index 5c536b9e..39c28987 100755
+--- a/misc/etc/acpi/powerbtn.sh
++++ b/misc/etc/acpi/powerbtn.sh
+@@ -58,4 +58,4 @@ elif test "$XUSER" != "" && test -x /usr/bin/qdbus; then
+ fi
+ 
+ # If all else failed, just initiate a plain shutdown.
+-/sbin/shutdown -h now "Power button pressed"
++shutdown -h now "Power button pressed"
+diff --git a/misc/udev-rules/80-deepin-fprintd.rules b/misc/udev-rules/80-deepin-fprintd.rules
+index d3d3554a..9163b91c 100644
+--- a/misc/udev-rules/80-deepin-fprintd.rules
++++ b/misc/udev-rules/80-deepin-fprintd.rules
+@@ -1 +1 @@
+-SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ACTION=="add|remove", ENV{LIBFPRINT_DRIVER}!="" RUN+="/usr/bin/dbus-send --system --dest=com.deepin.daemon.Fprintd --print-reply /com/deepin/daemon/Fprintd com.deepin.daemon.Fprintd.TriggerUDevEvent"
++SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ACTION=="add|remove", ENV{LIBFPRINT_DRIVER}!="" RUN+="@dbus@/bin/dbus-send --system --dest=com.deepin.daemon.Fprintd --print-reply /com/deepin/daemon/Fprintd com.deepin.daemon.Fprintd.TriggerUDevEvent"
+diff --git a/system/display/displaycfg.go b/system/display/displaycfg.go
+index 57b5871a..5b7757b4 100644
+--- a/system/display/displaycfg.go
++++ b/system/display/displaycfg.go
+@@ -255,7 +255,7 @@ func (d *Display) doDetectSupportWayland(sender dbus.Sender) (bool, error) {
+ 			return false, err
+ 		}
+ 		var cmd *exec.Cmd
+-		if execPath == "/usr/bin/lightdm-deepin-greeter" {
++		if strings.Contains(execPath, "lightdm-deepin-greeter") {
+ 			cmd = exec.Command("runuser", "-u", "lightdm", "glxinfo") // runuser -u lightdm glxinfo
+ 		} else {
+ 			cmd = exec.Command("glxinfo")
+diff --git a/system/power/manager_lmt.go b/system/power/manager_lmt.go
+index e2bdb2af..baf32fbd 100644
+--- a/system/power/manager_lmt.go
++++ b/system/power/manager_lmt.go
+@@ -8,6 +8,7 @@ import (
+ 	"bufio"
+ 	"io/ioutil"
+ 	"os"
++	"os/exec"
+ 	"path/filepath"
+ 	"strings"
+ 
+@@ -28,7 +29,7 @@ const (
+ const lowBatteryThreshold = 20.0
+ 
+ func isLaptopModeBinOk() bool {
+-	_, err := os.Stat(laptopModeBin)
++	_, err := exec.LookPath("laptop_mode")
+ 	return err == nil
+ }
+ 
+diff --git a/system/power_manager/utils.go b/system/power_manager/utils.go
+index 93f433c2..ef603c96 100644
+--- a/system/power_manager/utils.go
++++ b/system/power_manager/utils.go
+@@ -33,7 +33,7 @@ func canSuspend() bool {
+ }
+ 
+ func detectVirtualMachine() (string, error) {
+-	out, err := exec.Command("/usr/bin/systemd-detect-virt").Output()
++	out, err := exec.Command("systemd-detect-virt").Output()
+ 	if err != nil {
+ 		return "", err
+ 	}
+diff --git a/system/systeminfo/manager.go b/system/systeminfo/manager.go
+index 5525ae36..daab2c44 100644
+--- a/system/systeminfo/manager.go
++++ b/system/systeminfo/manager.go
+@@ -205,7 +205,7 @@ func filterUnNumber(value string) string {
+ 
+ //执行命令:/usr/bin/getconf LONG_BIT 获取系统位数
+ func (m *Manager) systemBit() string {
+-	output, err := exec.Command("/usr/bin/getconf", "LONG_BIT").Output()
++	output, err := exec.Command("getconf", "LONG_BIT").Output()
+ 	if err != nil {
+ 		return "64"
+ 	}
+diff --git a/systeminfo/utils.go b/systeminfo/utils.go
+index ed17aeb8..e919fb53 100644
+--- a/systeminfo/utils.go
++++ b/systeminfo/utils.go
+@@ -39,7 +39,7 @@ func getMemoryFromFile(file string) (uint64, error) {
+ 
+ //执行命令:/usr/bin/getconf LONG_BIT 获取系统位数
+ func systemBit() string {
+-	output, err := exec.Command("/usr/bin/getconf", "LONG_BIT").Output()
++	output, err := exec.Command("getconf", "LONG_BIT").Output()
+ 	if err != nil {
+ 		return "64"
+ 	}
+-- 
+2.39.2
+
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0005-fix-custom-wallpapers-path.diff b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0005-fix-custom-wallpapers-path.diff
new file mode 100644
index 000000000000..0dcd7366e0df
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/0005-fix-custom-wallpapers-path.diff
@@ -0,0 +1,22 @@
+diff --git a/bin/dde-system-daemon/wallpaper.go b/bin/dde-system-daemon/wallpaper.go
+index d4af13da..1ff36f84 100644
+--- a/bin/dde-system-daemon/wallpaper.go
++++ b/bin/dde-system-daemon/wallpaper.go
+@@ -24,7 +24,7 @@ import (
+ 
+ const maxCount = 5
+ const maxSize = 32 * 1024 * 1024
+-const wallPaperDir = "/usr/share/wallpapers/custom-wallpapers/"
++const wallPaperDir = "/var/lib/dde-daemon/wallpapers/custom-wallpapers/"
+ 
+ func GetUserDir(username string) (string, error) {
+ 	dir := filepath.Join(wallPaperDir, username)
+@@ -136,7 +136,7 @@ func (d *Daemon) SaveCustomWallPaper(sender dbus.Sender, username string, file s
+ 		"-u",
+ 		username,
+ 		"--",
+-		"head",
++		"@coreutils@/bin/head",
+ 		"-c",
+ 		"0",
+ 		file,
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/default.nix
new file mode 100644
index 000000000000..b9a1da5ca2e8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/default.nix
@@ -0,0 +1,170 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, substituteAll
+, buildGoPackage
+, pkg-config
+, deepin-gettext-tools
+, gettext
+, python3
+, wrapGAppsHook
+, go-dbus-factory
+, go-gir-generator
+, go-lib
+, dde-api
+, ddcutil
+, alsa-lib
+, glib
+, gtk3
+, libgudev
+, libinput
+, libnl
+, librsvg
+, linux-pam
+, libxcrypt
+, networkmanager
+, pulseaudio
+, gdk-pixbuf-xlib
+, tzdata
+, xkeyboard_config
+, runtimeShell
+, xorg
+, xdotool
+, getconf
+, dbus
+, coreutils
+, util-linux
+, dde-session-ui
+}:
+
+buildGoPackage rec {
+  pname = "dde-daemon";
+  version = "5.14.122";
+
+  goPackagePath = "github.com/linuxdeepin/dde-daemon";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-KoYMv4z4IGBH0O422PuFHrIgDBEkU08Vepax+00nrGE=";
+  };
+
+  patches = [
+    ./0001-fix-wrapped-name-for-verifyExe.patch
+    ./0002-dont-set-PATH.patch
+    ./0003-search-in-XDG-directories.patch
+    (substituteAll {
+      src = ./0004-aviod-use-hardcode-path.patch;
+      inherit dbus;
+    })
+    (substituteAll {
+      src = ./0005-fix-custom-wallpapers-path.diff;
+      inherit coreutils;
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace dock/desktop_file_path.go \
+      --replace "/usr/share" "/run/current-system/sw/share"
+
+    substituteInPlace session/eventlog/{app_event.go,login_event.go} accounts/users/users_test.go \
+      --replace "/bin/bash" "${runtimeShell}"
+
+    substituteInPlace inputdevices/layout_list.go \
+      --replace "/usr/share/X11/xkb" "${xkeyboard_config}/share/X11/xkb"
+
+    substituteInPlace system/uadp/crypto.go \
+      --replace "/usr/share/uadp" "/var/lib/dde-daemon/uadp"
+
+    substituteInPlace appearance/background/{background.go,custom_wallpapers.go} accounts/user.go \
+     --replace "/usr/share/wallpapers" "/run/current-system/sw/share/wallpapers"
+
+    substituteInPlace appearance/manager.go timedate/zoneinfo/zone.go \
+     --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+
+    substituteInPlace accounts/image_blur.go grub2/modify_manger.go \
+      --replace "/usr/lib/deepin-api" "/run/current-system/sw/lib/deepin-api"
+
+    substituteInPlace accounts/user_chpwd_union_id.go \
+      --replace "/usr/lib/dde-control-center" "/run/current-system/sw/lib/dde-control-center"
+
+    for file in $(grep "/usr/lib/deepin-daemon" * -nR |awk -F: '{print $1}')
+    do
+      sed -i 's|/usr/lib/deepin-daemon|/run/current-system/sw/lib/deepin-daemon|g' $file
+    done
+
+    patchShebangs .
+  '';
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [
+    pkg-config
+    deepin-gettext-tools
+    gettext
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    go-dbus-factory
+    go-gir-generator
+    go-lib
+    dde-api
+    ddcutil
+    linux-pam
+    libxcrypt
+    alsa-lib
+    glib
+    libgudev
+    gtk3
+    gdk-pixbuf-xlib
+    networkmanager
+    libinput
+    libnl
+    librsvg
+    pulseaudio
+    tzdata
+    xkeyboard_config
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    addToSearchPath GOPATH "${go-dbus-factory}/share/gocode"
+    addToSearchPath GOPATH "${go-gir-generator}/share/gocode"
+    addToSearchPath GOPATH "${go-lib}/share/gocode"
+    addToSearchPath GOPATH "${dde-api}/share/gocode"
+    make -C go/src/${goPackagePath}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    make install DESTDIR="$out" PREFIX="/" -C go/src/${goPackagePath}
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${lib.makeBinPath [ util-linux dde-session-ui ]}"
+    )
+  '';
+
+  postFixup = ''
+    for f in "$out"/lib/deepin-daemon/*; do
+      echo "Wrapping $f"
+      wrapGApp "$f"
+    done
+    mv $out/run/current-system/sw/lib/deepin-daemon/service-trigger $out/lib/deepin-daemon/
+    rm -r $out/run
+  '';
+
+  meta = with lib; {
+    description = "Daemon for handling the deepin session settings";
+    homepage = "https://github.com/linuxdeepin/dde-daemon";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/deps.nix b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/deps.nix
new file mode 100644
index 000000000000..16eaa254c2ff
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/dde-daemon/deps.nix
@@ -0,0 +1,290 @@
+[
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "v1.5.1";
+      sha256 = "sha256-B8kZ8yiWgallT7R2j1kSRJcJkSGFVf9ise+TpXa+7XY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "v5.1.0";
+      sha256 = "sha256-JSPtmkGEStBEVrKGszeLCb7P38SzQKgMiDC3eDppXs0=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.7.1";
+      sha256 = "sha256-disUVIHiIDSj/go3APtJH8awSl8QwKRRFLKI7LRnl0w=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sys";
+      rev = "289d7a0edf712062d9f1484b07bdf2383f48802f";
+      sha256 = "sha256-AzS/J3OocI7mA0xsIfQzyskNKVija7F2yvuts+EFJBs=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/xerrors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/xerrors";
+      rev = "2f41105eb62f341cfe208d06de4ee3bdd3a083da";
+      sha256 = "sha256-yZNeG+jcarcw/aOFhrhxWWE20r0P+/VJF4i/0JQfv1c=";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev = "496545a6307b2a7d7a710fd516e5e16e8ab62dbc";
+      sha256 = "sha256-j8yDji+vqsitpRZirpb4w/Em8nstgf28wpwkcrOlxBk=";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.3.0";
+      sha256 = "sha256-T753/EiD5Cpk6H2JFhd+s1gFvpNptG2XlEHxZF6dQaw=";
+    };
+  }
+  {
+    goPackagePath = "github.com/linuxdeepin/go-x11-client";
+    fetch = {
+      type = "git";
+      url = "https://github.com/linuxdeepin/go-x11-client";
+      rev = "0.6.9";
+      sha256 = "sha256-xXNaXpFFHJN1fCFLoVrQFCXQ4ya+Kga55QWcJL/InkA=";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "5d4384ee4fb2527b0a1256a821ebfc92f91efefc";
+      sha256 = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90=";
+    };
+  }
+  {
+    goPackagePath = "github.com/axgle/mahonia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/axgle/mahonia";
+      rev = "3358181d7394e26beccfae0ffde05193ef3be33a";
+      sha256 = "0b8wsrxmv8a0cqbnsg55lpf29pxy2zw8azvgh3ck664lqpcfybhq";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/text";
+      rev = "v0.3.7";
+      sha256 = "sha256-XpIbgE6MxWwDQQcPXr2NIsE2cev2+CIabi566TYGfHY=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/image";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/image";
+      rev = "70e8d0d3baa9a699c3865c753cbfa8ae65bd86ce";
+      sha256 = "sha256-oMbDIke/qQ6cp7JLNsMusf7EIUfuj0WavFVfI0lxTDs=";
+    };
+  }
+  {
+    goPackagePath = "github.com/nfnt/resize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nfnt/resize";
+      rev = "83c6a9932646f83e3267f353373d47347b6036b2";
+      sha256 = "005cpiwq28krbjf0zjwpfh63rp4s4is58700idn24fs3g7wdbwya";
+    };
+  }
+  {
+    goPackagePath = "github.com/Lofanmi/pinyin-golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Lofanmi/pinyin-golang";
+      rev = "1db892057f20c56a3286cc1517e0642dacbff54c";
+      sha256 = "sha256-nhO6AYZ3vc7nwgmmfTlE6m33caY9gGZoKiSYvFLqHQc=";
+    };
+  }
+  {
+    goPackagePath = "github.com/mozillazg/go-pinyin";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mozillazg/go-pinyin";
+      rev = "8930bc1fcb5693689dc35d98ad2a4153662e34b1";
+      sha256 = "sha256-kuMNiWpPeqsIsFgYIOsffxUfwcLPaMZWdZRBJAMDVvA=";
+    };
+  }
+  {
+    goPackagePath = "github.com/kelvins/sunrisesunset";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kelvins/sunrisesunset";
+      rev = "39fa1bd816d52927b4cfcab0a1535b17eafe0a3d";
+      sha256 = "sha256-awklKAW1YM3sWM21irbyu2sUMIo3kCOj12lzyVzDefw=";
+    };
+  }
+  {
+    goPackagePath = "github.com/cryptix/wav";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cryptix/wav";
+      rev = "8bdace674401f0bd3b63c65479b6a6ff1f9d5e44";
+      sha256 = "18nyqv0ic35fs9fny8sj84c00vbxs8mnric6vr6yl42624fh5id6";
+    };
+  }
+  {
+    goPackagePath = "github.com/rickb777/date";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rickb777/date";
+      rev = "v1.18";
+      sha256 = "sha256-8r8eFOF5dKtowE3dnjpSMIXJ/yX2IjiR7nZ/EApUZbA=";
+    };
+  }
+  {
+    goPackagePath = "github.com/rickb777/plural";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rickb777/plural";
+      rev = "v1.4.1";
+      sha256 = "sha256-nhN+ApdfUie45L+M2OZAPtSoiIZ1pZ2UpDX/DePS6Yw=";
+    };
+  }
+  {
+    goPackagePath = "github.com/gosexy/gettext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gosexy/gettext";
+      rev = "v0.9";
+      sha256 = "0asphx8nd7zmp88wk6aakk5292np7yw73akvfdvlvs9q5r5ahkgi";
+    };
+  }
+  {
+    goPackagePath = "github.com/msteinert/pam";
+    fetch = {
+      type = "git";
+      url = "https://github.com/msteinert/pam";
+      rev = "v1.0.0";
+      sha256 = "sha256-Ji13ckPyZUBAovhK2hRHgf2LB1ieglX/XrIJBxVcsXc=";
+    };
+  }
+  {
+    goPackagePath = "github.com/youpy/go-wav";
+    fetch = {
+      type = "git";
+      url = "https://github.com/youpy/go-wav";
+      rev = "v0.3.2";
+      sha256 = "sha256-jNqXW3F3fcgjT47+d2MVXauWkA7+1KfYVu3ZZpRCTkM=";
+    };
+  }
+  {
+    goPackagePath = "github.com/zaf/g711";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zaf/g711";
+      rev = "v1.2";
+      sha256 = "sha256-G+0cgGw/fcOUFVn32AeqUE0YjyOS82Z5MTcn6IANhCY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/youpy/go-riff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/youpy/go-riff";
+      rev = "v0.1.0";
+      sha256 = "sha256-d/3rkxDeRTPveZblArKc61gB4LJVV08n7g0THieuhx8=";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/protocolbuffers/protobuf-go";
+      rev = "v1.28.1";
+      sha256 = "sha256-7Cg7fByLR9jX3OSCqJfLw5PAHDQi/gopkjtkbobnyWM";
+    };
+  }
+  {
+    goPackagePath = "github.com/mdlayher/netlink";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mdlayher/netlink";
+      rev = "v1.6.0";
+      sha256 = "sha256-3pVOXscdUVerFlRW9aGz7/5YL2OWFkvm8AJGSxygkEs=";
+    };
+  }
+  {
+    goPackagePath = "github.com/josharian/native";
+    fetch = {
+      type = "git";
+      url = "https://github.com/josharian/native";
+      rev = "a938fb150d47536d63d6bb2f0c4433091cb8c223";
+      sha256 = "sha256-KYeAFKKzRt+e7Zy0sp4VW65HQL90hF/wjXP3R5dXaww=";
+    };
+  }
+  {
+    goPackagePath = "github.com/mdlayher/socket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mdlayher/socket";
+      rev = "v0.2.3";
+      sha256 = "sha256-EDaSQ621SJ2OK2WycMtybuJ2KpaH86JHknqsiduuCtQ=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/net";
+      rev = "83b083e8dc8b4507e702ce59208711115b23ec25";
+      sha256 = "sha256-50A1EeE7HxKbnLBy1vdxtrbH+7d6/mnZA0cOwHJr5XA=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sync";
+      rev = "7fc1605a5dde7535a0fc1770ca44238629ff29ac";
+      sha256 = "sha256-5EOxO8FRdaLW9v/DhwBmWiT2G34A2ofxSCaC7ovvpb0=";
+    };
+  }
+  {
+    goPackagePath = "github.com/adrg/xdg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/adrg/xdg";
+      rev = "v0.4.0";
+      sha256 = "sha256-zGjkdUQmrVqD6rMO9oDY+TeJCpuqnHyvkPCaXDlac/U=";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/deepin-desktop-schemas/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/deepin-desktop-schemas/default.nix
new file mode 100644
index 000000000000..274c81bfce96
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/deepin-desktop-schemas/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, buildGoPackage
+, go-lib
+, glib
+}:
+buildGoPackage rec {
+  pname = "deepin-desktop-schemas";
+  version = "5.10.11";
+
+  goPackagePath = "github.com/linuxdeepin/deepin-desktop-schemas";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-MboNj0zC3azavDUsmeNNafCcUa0GeoySl610+WOtNww=";
+  };
+
+  nativeBuildInputs = [ glib ];
+  buildInputs = [ go-lib ];
+
+  postPatch = ''
+    # Relocate files path for backgrounds and wallpapers
+    for file in $(grep -rl "/usr/share")
+    do
+      substituteInPlace $file \
+        --replace "/usr/share" "/run/current-system/sw/share"
+    done
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    addToSearchPath GOPATH "${go-lib}/share/gocode"
+    make ARCH=${stdenv.targetPlatform.linuxArch} -C go/src/${goPackagePath}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    make install DESTDIR="$out" PREFIX="/" -C go/src/${goPackagePath}
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+  '';
+
+  meta = with lib; {
+    description = "GSettings deepin desktop-wide schemas";
+    homepage = "https://github.com/linuxdeepin/deepin-desktop-schemas";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/default.nix
new file mode 100644
index 000000000000..99a0d8eb6c2a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/default.nix
@@ -0,0 +1,84 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, buildGoPackage
+, pkg-config
+, deepin-gettext-tools
+, go-dbus-factory
+, go-gir-generator
+, go-lib
+, gtk3
+, glib
+, libxcrypt
+, gettext
+, iniparser
+, cracklib
+, linux-pam
+}:
+
+buildGoPackage rec {
+  pname = "deepin-pw-check";
+  version = "5.1.18";
+
+  goPackagePath = "github.com/linuxdeepin/deepin-pw-check";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-v1Z4ArkrejjOCO1vD+BhfEl9pTfuvKgLM6Ont0IUCQk=";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    deepin-gettext-tools
+  ];
+
+  buildInputs = [
+    go-dbus-factory
+    go-gir-generator
+    go-lib
+    glib
+    libxcrypt
+    gtk3
+    iniparser
+    cracklib
+    linux-pam
+  ];
+
+  postPatch = ''
+    sed -i 's|iniparser/||' */*.c
+    substituteInPlace misc/pkgconfig/libdeepin_pw_check.pc \
+      --replace "/usr" "$out"
+    substituteInPlace misc/system-services/com.deepin.daemon.PasswdConf.service \
+      --replace "/usr/lib/deepin-pw-check/deepin-pw-check" "$out/lib/deepin-pw-check/deepin-pw-check"
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    addToSearchPath GOPATH "${go-dbus-factory}/share/gocode"
+    addToSearchPath GOPATH "${go-gir-generator}/share/gocode"
+    addToSearchPath GOPATH "${go-lib}/share/gocode"
+    make -C go/src/${goPackagePath}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    make install PREFIX="$out" PKG_FILE_DIR=$out/lib/pkg-config PAM_MODULE_DIR=$out/etc/pam.d -C go/src/${goPackagePath}
+    # https://github.com/linuxdeepin/deepin-pw-check/blob/d5597482678a489077a506a87f06d2b6c4e7e4ed/debian/rules#L21
+    ln -s $out/lib/libdeepin_pw_check.so $out/lib/libdeepin_pw_check.so.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to verify the validity of the password";
+    homepage = "https://github.com/linuxdeepin/deepin-pw-check";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/deps.nix b/nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/deps.nix
new file mode 100644
index 000000000000..509940b6d570
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/deepin-pw-check/deps.nix
@@ -0,0 +1,75 @@
+[
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "v1.5.1";
+      sha256 = "sha256-B8kZ8yiWgallT7R2j1kSRJcJkSGFVf9ise+TpXa+7XY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "v5.1.0";
+      sha256 = "sha256-JSPtmkGEStBEVrKGszeLCb7P38SzQKgMiDC3eDppXs0=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.7.1";
+      sha256 = "sha256-disUVIHiIDSj/go3APtJH8awSl8QwKRRFLKI7LRnl0w=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sys";
+      rev = "289d7a0edf712062d9f1484b07bdf2383f48802f";
+      sha256 = "sha256-AzS/J3OocI7mA0xsIfQzyskNKVija7F2yvuts+EFJBs=";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev = "496545a6307b2a7d7a710fd516e5e16e8ab62dbc";
+      sha256 = "sha256-j8yDji+vqsitpRZirpb4w/Em8nstgf28wpwkcrOlxBk=";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.3.0";
+      sha256 = "sha256-T753/EiD5Cpk6H2JFhd+s1gFvpNptG2XlEHxZF6dQaw=";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "5d4384ee4fb2527b0a1256a821ebfc92f91efefc";
+      sha256 = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90=";
+    };
+  }
+]
+
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/go-dbus-factory/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/go-dbus-factory/default.nix
new file mode 100644
index 000000000000..4c12dce491d7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/go-dbus-factory/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "go-dbus-factory";
+  version = "1.10.23";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-6u9Bpoa80j/K1MipncfM378/qmSSMZAlx88jE4hHYBk=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Generate go binding of D-Bus interfaces";
+    homepage = "https://github.com/linuxdeepin/go-dbus-factory";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/go-gir-generator/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/go-gir-generator/default.nix
new file mode 100644
index 000000000000..7f377d2a6e74
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/go-gir-generator/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, go
+, pkg-config
+, libgudev
+, gobject-introspection
+}:
+
+stdenv.mkDerivation rec {
+  pname = "go-gir-generator";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-lFseui/M3+TyfYoa+rnS0cGhN6gdLrgpzgOwqzYcyPk=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    go
+  ];
+
+  buildInputs = [
+    libgudev
+    gobject-introspection
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "GOCACHE=$(TMPDIR)/go-cache"
+  ];
+
+  meta = with lib; {
+    description = "Generate static golang bindings for GObject";
+    homepage = "https://github.com/linuxdeepin/go-gir-generator";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/go-lib/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/go-lib/default.nix
new file mode 100644
index 000000000000..751cba56ce35
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/go-lib/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, runtimeShell
+}:
+
+stdenv.mkDerivation rec {
+  pname = "go-lib";
+  version = "5.8.27";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ZV5zWu7UvNKVcVo79/iKMhF4H09rGyDCvEL61H05lZc=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix_IsDir_for_symlink.patch";
+      url = "https://github.com/linuxdeepin/go-lib/commit/79239904679dc70a11e1ac8e65670afcfdd7c122.patch";
+      sha256 = "sha256-RsN9hK26i/W6P/+e1l1spCLdlgIEWTehhIW6POBOvW4=";
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/share/gocode/src/github.com/linuxdeepin/go-lib
+    cp -a * $out/share/gocode/src/github.com/linuxdeepin/go-lib
+    rm -r $out/share/gocode/src/github.com/linuxdeepin/go-lib/debian
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Library containing many useful go routines for things such as glib, gettext, archive, graphic, etc";
+    homepage = "https://github.com/linuxdeepin/go-lib";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/startdde/0001-avoid-use-hardcode-path.patch b/nixpkgs/pkgs/desktops/deepin/go-package/startdde/0001-avoid-use-hardcode-path.patch
new file mode 100644
index 000000000000..2dac0993d590
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/startdde/0001-avoid-use-hardcode-path.patch
@@ -0,0 +1,153 @@
+From 47a700c64329f76ab91ac01d83a93f43bebe638b Mon Sep 17 00:00:00 2001
+From: rewine <lhongxu@outlook.com>
+Date: Sun, 9 Apr 2023 17:14:00 +0800
+Subject: [PATCH] avoid use hardcode path
+
+---
+ display/wayland.go            |  4 ++--
+ main.go                       | 10 +++++-----
+ misc/auto_launch/chinese.json |  4 ++--
+ session.go                    | 15 +++++++++------
+ 4 files changed, 18 insertions(+), 15 deletions(-)
+
+diff --git a/display/wayland.go b/display/wayland.go
+index b980425..e44342a 100644
+--- a/display/wayland.go
++++ b/display/wayland.go
+@@ -556,7 +556,7 @@ func (mm *kMonitorManager) applyByWLOutput(monitorMap map[uint32]*Monitor) error
+ 	
+ 	if len(args_enable) > 0 {
+ 		ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
+-		cmdline := exec.CommandContext(ctx, "/usr/bin/dde_wloutput", "set")
++		cmdline := exec.CommandContext(ctx, "dde_wloutput", "set")
+ 		cmdline.Args = append(cmdline.Args, args_enable...)
+ 		logger.Info("cmd line args_enable:", cmdline.Args)
+ 
+@@ -572,7 +572,7 @@ func (mm *kMonitorManager) applyByWLOutput(monitorMap map[uint32]*Monitor) error
+ 	}
+ 	if len(args_disable) > 0 {
+ 		ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
+-		cmdline := exec.CommandContext(ctx, "/usr/bin/dde_wloutput", "set")
++		cmdline := exec.CommandContext(ctx, "dde_wloutput", "set")
+ 		cmdline.Args = append(cmdline.Args, args_disable...)
+ 		logger.Info("cmd line args_disable:", cmdline.Args)
+ 
+diff --git a/main.go b/main.go
+index 77b4e78..30aa3fd 100644
+--- a/main.go
++++ b/main.go
+@@ -96,17 +96,17 @@ func shouldUseDDEKWin() bool {
+ 	}
+ 
+ end:
+-	_, err = os.Stat("/usr/bin/kwin_no_scale")
++        _, err = exec.LookPath("kwin_no_scale")
+ 	return err == nil
+ }
+ 
+ const (
+-	cmdKWin                = "/usr/bin/kwin_no_scale"
++	cmdKWin                = "kwin_no_scale"
+ 	cmdDdeSessionDaemon    = "/usr/lib/deepin-daemon/dde-session-daemon"
+-	cmdDdeDock             = "/usr/bin/dde-dock"
+-	cmdDdeDesktop          = "/usr/bin/dde-desktop"
++	cmdDdeDock             = "dde-dock"
++	cmdDdeDesktop          = "dde-desktop"
+ 	cmdLoginReminderHelper = "/usr/libexec/deepin/login-reminder-helper"
+-	cmdDdeHintsDialog      = "/usr/bin/dde-hints-dialog"
++	cmdDdeHintsDialog      = "dde-hints-dialog"
+ 
+ 	loginReminderTimeout    = 5 * time.Second
+ 	loginReminderTimeFormat = "2006-01-02 15:04:05"
+diff --git a/misc/auto_launch/chinese.json b/misc/auto_launch/chinese.json
+index 079a521..1856ab1 100644
+--- a/misc/auto_launch/chinese.json
++++ b/misc/auto_launch/chinese.json
+@@ -13,7 +13,7 @@
+     "Priority": 9,
+     "Group": [
+       {
+-        "Command": "/usr/bin/dde-file-manager",
++        "Command": "dde-file-manager",
+         "Wait": false,
+         "Args": [
+           "-d"
+@@ -39,7 +39,7 @@
+     "Priority": 7,
+     "Group": [
+       {
+-        "Command": "/usr/bin/dde-shutdown",
++        "Command": "dde-shutdown",
+         "Wait": false,
+         "Args": [
+           "-d"
+diff --git a/session.go b/session.go
+index 26f89ef..f412ca4 100644
+--- a/session.go
++++ b/session.go
+@@ -18,6 +18,7 @@ import (
+ 	"syscall"
+ 	"time"
+ 
++	"github.com/adrg/xdg"
+ 	"github.com/godbus/dbus"
+ 	"github.com/linuxdeepin/dde-api/soundutils"
+ 	daemon "github.com/linuxdeepin/go-dbus-factory/com.deepin.daemon.daemon"
+@@ -53,8 +54,10 @@ const (
+ 
+ 	xsKeyQtFontName     = "Qt/FontName"
+ 	xsKeyQtMonoFontName = "Qt/MonoFontName"
++)
+ 
+-	ddeLockDesktopFile = "/usr/share/applications/dde-lock.desktop"
++var (
++	ddeLockDesktopFile, _ = xdg.SearchDataFile("applications/dde-lock.desktop");
+ )
+ 
+ type SessionManager struct {
+@@ -90,7 +93,7 @@ type SessionManager struct {
+ }
+ 
+ const (
+-	cmdShutdown      = "/usr/bin/dde-shutdown"
++	cmdShutdown      = "dde-shutdown"
+ 	lockFrontDest    = "com.deepin.dde.lockFront"
+ 	lockFrontIfc     = lockFrontDest
+ 	lockFrontObjPath = "/com/deepin/dde/lockFront"
+@@ -471,7 +474,7 @@ func (m *SessionManager) SetLocked(sender dbus.Sender, value bool) *dbus.Error {
+ 		return dbusutil.ToError(err)
+ 	}
+ 
+-	if exe == "/usr/bin/dde-lock" {
++	if strings.Contains(exe, "dde-lock") {
+ 		m.setLocked(value)
+ 		return nil
+ 	}
+@@ -491,7 +494,7 @@ func (m *SessionManager) SetLocked(sender dbus.Sender, value bool) *dbus.Error {
+ 		return dbusutil.ToError(fmt.Errorf("desktop file %q is invalid", desktopFile))
+ 	}
+ 	exe = info.GetExecutable()
+-	if exe != "/usr/bin/dde-lock" {
++	if strings.Contains(exe, "dde-lock") {
+ 		return dbusutil.ToError(fmt.Errorf("exe %q of desktop file %q is invalid", exe, desktopFile))
+ 	}
+ 
+@@ -798,7 +801,7 @@ func setupEnvironments2() {
+ 	// man gnome-keyring-daemon:
+ 	// The daemon will print out various environment variables which should be set
+ 	// in the user's environment, in order to interact with the daemon.
+-	gnomeKeyringOutput, err := exec.Command("/usr/bin/gnome-keyring-daemon", "--start",
++	gnomeKeyringOutput, err := exec.Command("gnome-keyring-daemon", "--start",
+ 		"--components=secrets,pkcs11,ssh").Output()
+ 	if err == nil {
+ 		lines := bytes.Split(gnomeKeyringOutput, []byte{'\n'})
+@@ -1389,4 +1392,4 @@ func initXEventMonitor() {
+ 			setDPMSMode(true)
+ 		}
+ 	})
+-}
+\ No newline at end of file
++}
+-- 
+2.39.2
+
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/startdde/default.nix b/nixpkgs/pkgs/desktops/deepin/go-package/startdde/default.nix
new file mode 100644
index 000000000000..e0502deaf9cf
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/startdde/default.nix
@@ -0,0 +1,102 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, buildGoPackage
+, pkg-config
+, go-dbus-factory
+, go-gir-generator
+, go-lib
+, gettext
+, dde-api
+, libgnome-keyring
+, gtk3
+, alsa-lib
+, libpulseaudio
+, libgudev
+, libsecret
+, jq
+, wrapGAppsHook
+, runtimeShell
+, dde-polkit-agent
+}:
+
+buildGoPackage rec {
+  pname = "startdde";
+  version = "5.10.1";
+
+  goPackagePath = "github.com/linuxdeepin/startdde";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-dbTcYS7dEvT0eP45jKE8WiG9Pm4LU6jvR8hjMQv/yxU=";
+  };
+
+  patches = [
+    ./0001-avoid-use-hardcode-path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace display/manager.go session.go \
+      --replace "/bin/bash" "${runtimeShell}"
+    substituteInPlace display/manager.go main.go utils.go session.go \
+      --replace "/usr/lib/deepin-daemon" "/run/current-system/sw/lib/deepin-daemon"
+    substituteInPlace misc/xsessions/deepin.desktop.in --subst-var-by PREFIX $out
+    substituteInPlace watchdog/dde_polkit_agent.go misc/auto_launch/{default.json,chinese.json} \
+      --replace "/usr/lib/polkit-1-dde/dde-polkit-agent" "${dde-polkit-agent}/lib/polkit-1-dde/dde-polkit-agent"
+    substituteInPlace startmanager.go launch_group.go memchecker/config.go \
+      --replace "/usr/share/startdde" "$out/share/startdde"
+    substituteInPlace misc/lightdm.conf --replace "/usr" "$out"
+  '';
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [
+    gettext
+    pkg-config
+    jq
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    go-dbus-factory
+    go-gir-generator
+    go-lib
+    dde-api
+    libgnome-keyring
+    gtk3
+    alsa-lib
+    libpulseaudio
+    libgudev
+    libsecret
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    addToSearchPath GOPATH "${go-dbus-factory}/share/gocode"
+    addToSearchPath GOPATH "${go-gir-generator}/share/gocode"
+    addToSearchPath GOPATH "${go-lib}/share/gocode"
+    addToSearchPath GOPATH "${dde-api}/share/gocode"
+    make -C go/src/${goPackagePath}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    make install DESTDIR="$out" PREFIX="/" -C go/src/${goPackagePath}
+  '';
+
+  passthru.providedSessions = [ "deepin" ];
+
+  meta = with lib; {
+    description = "Starter of deepin desktop environment";
+    longDescription = ''
+      Startdde is used for launching DDE components and invoking user's
+      custom applications which compliant with xdg autostart specification
+    '';
+    homepage = "https://github.com/linuxdeepin/startdde";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-package/startdde/deps.nix b/nixpkgs/pkgs/desktops/deepin/go-package/startdde/deps.nix
new file mode 100644
index 000000000000..0a0b403ea44e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-package/startdde/deps.nix
@@ -0,0 +1,236 @@
+[
+  {
+    goPackagePath = "github.com/cryptix/wav";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cryptix/wav";
+      rev = "8bdace674401f0bd3b63c65479b6a6ff1f9d5e44";
+      sha256 = "18nyqv0ic35fs9fny8sj84c00vbxs8mnric6vr6yl42624fh5id6";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI=";
+    };
+  }
+  {
+    goPackagePath = "github.com/linuxdeepin/go-x11-client";
+    fetch = {
+      type = "git";
+      url = "https://github.com/linuxdeepin/go-x11-client";
+      rev = "0.6.9";
+      sha256 = "sha256-xXNaXpFFHJN1fCFLoVrQFCXQ4ya+Kga55QWcJL/InkA=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/xerrors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/xerrors";
+      rev = "2f41105eb62f341cfe208d06de4ee3bdd3a083da";
+      sha256 = "sha256-yZNeG+jcarcw/aOFhrhxWWE20r0P+/VJF4i/0JQfv1c=";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "v1.5.1";
+      sha256 = "sha256-B8kZ8yiWgallT7R2j1kSRJcJkSGFVf9ise+TpXa+7XY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "v5.1.0";
+      sha256 = "sha256-JSPtmkGEStBEVrKGszeLCb7P38SzQKgMiDC3eDppXs0=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.7.1";
+      sha256 = "sha256-disUVIHiIDSj/go3APtJH8awSl8QwKRRFLKI7LRnl0w=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sys";
+      rev = "289d7a0edf712062d9f1484b07bdf2383f48802f";
+      sha256 = "sha256-AzS/J3OocI7mA0xsIfQzyskNKVija7F2yvuts+EFJBs=";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev = "496545a6307b2a7d7a710fd516e5e16e8ab62dbc";
+      sha256 = "sha256-j8yDji+vqsitpRZirpb4w/Em8nstgf28wpwkcrOlxBk=";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.3.0";
+      sha256 = "sha256-T753/EiD5Cpk6H2JFhd+s1gFvpNptG2XlEHxZF6dQaw=";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "5d4384ee4fb2527b0a1256a821ebfc92f91efefc";
+      sha256 = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90=";
+    };
+  }
+  {
+    goPackagePath = "github.com/axgle/mahonia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/axgle/mahonia";
+      rev = "3358181d7394e26beccfae0ffde05193ef3be33a";
+      sha256 = "0b8wsrxmv8a0cqbnsg55lpf29pxy2zw8azvgh3ck664lqpcfybhq";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/text";
+      rev = "v0.3.7";
+      sha256 = "sha256-XpIbgE6MxWwDQQcPXr2NIsE2cev2+CIabi566TYGfHY=";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/image";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/image";
+      rev = "70e8d0d3baa9a699c3865c753cbfa8ae65bd86ce";
+      sha256 = "sha256-oMbDIke/qQ6cp7JLNsMusf7EIUfuj0WavFVfI0lxTDs=";
+    };
+  }
+  {
+    goPackagePath = "github.com/nfnt/resize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nfnt/resize";
+      rev = "83c6a9932646f83e3267f353373d47347b6036b2";
+      sha256 = "005cpiwq28krbjf0zjwpfh63rp4s4is58700idn24fs3g7wdbwya";
+    };
+  }
+  {
+    goPackagePath = "github.com/Lofanmi/pinyin-golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Lofanmi/pinyin-golang";
+      rev = "1db892057f20c56a3286cc1517e0642dacbff54c";
+      sha256 = "sha256-nhO6AYZ3vc7nwgmmfTlE6m33caY9gGZoKiSYvFLqHQc=";
+    };
+  }
+  {
+    goPackagePath = "github.com/mozillazg/go-pinyin";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mozillazg/go-pinyin";
+      rev = "8930bc1fcb5693689dc35d98ad2a4153662e34b1";
+      sha256 = "sha256-kuMNiWpPeqsIsFgYIOsffxUfwcLPaMZWdZRBJAMDVvA=";
+    };
+  }
+  {
+    goPackagePath = "github.com/kelvins/sunrisesunset";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kelvins/sunrisesunset";
+      rev = "39fa1bd816d52927b4cfcab0a1535b17eafe0a3d";
+      sha256 = "sha256-awklKAW1YM3sWM21irbyu2sUMIo3kCOj12lzyVzDefw=";
+    };
+  }
+  {
+    goPackagePath = "github.com/rickb777/date";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rickb777/date";
+      rev = "v1.18";
+      sha256 = "sha256-8r8eFOF5dKtowE3dnjpSMIXJ/yX2IjiR7nZ/EApUZbA=";
+    };
+  }
+  {
+    goPackagePath = "github.com/rickb777/plural";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rickb777/plural";
+      rev = "v1.4.1";
+      sha256 = "sha256-nhN+ApdfUie45L+M2OZAPtSoiIZ1pZ2UpDX/DePS6Yw=";
+    };
+  }
+  {
+    goPackagePath = "github.com/gosexy/gettext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gosexy/gettext";
+      rev = "v0.9";
+      sha256 = "0asphx8nd7zmp88wk6aakk5292np7yw73akvfdvlvs9q5r5ahkgi";
+    };
+  }
+  {
+    goPackagePath = "github.com/msteinert/pam";
+    fetch = {
+      type = "git";
+      url = "https://github.com/msteinert/pam";
+      rev = "v1.0.0";
+      sha256 = "sha256-Ji13ckPyZUBAovhK2hRHgf2LB1ieglX/XrIJBxVcsXc=";
+    };
+  }
+  {
+    goPackagePath = "github.com/youpy/go-wav";
+    fetch = {
+      type = "git";
+      url = "https://github.com/youpy/go-wav";
+      rev = "v0.3.2";
+      sha256 = "sha256-jNqXW3F3fcgjT47+d2MVXauWkA7+1KfYVu3ZZpRCTkM=";
+    };
+  }
+  {
+    goPackagePath = "github.com/zaf/g711";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zaf/g711";
+      rev = "v1.2";
+      sha256 = "sha256-G+0cgGw/fcOUFVn32AeqUE0YjyOS82Z5MTcn6IANhCY=";
+    };
+  }
+  {
+    goPackagePath = "github.com/youpy/go-riff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/youpy/go-riff";
+      rev = "v0.1.0";
+      sha256 = "sha256-d/3rkxDeRTPveZblArKc61gB4LJVV08n7g0THieuhx8=";
+    };
+  }
+  {
+    goPackagePath = "github.com/adrg/xdg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/adrg/xdg";
+      rev = "v0.4.0";
+      sha256 = "sha256-zGjkdUQmrVqD6rMO9oDY+TeJCpuqnHyvkPCaXDlac/U=";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/desktops/deepin/library/dde-qt-dbus-factory/default.nix b/nixpkgs/pkgs/desktops/deepin/library/dde-qt-dbus-factory/default.nix
new file mode 100644
index 000000000000..ef302c5b7222
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/dde-qt-dbus-factory/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, qtbase
+, wrapQtAppsHook
+, python3
+, dtkcore
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-qt-dbus-factory";
+  version = "5.5.22";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-jqk04S+i3py3rVJcHmkPKHsU+eNEN1yoUBBlfXBbcwM=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    wrapQtAppsHook
+    python3
+  ];
+
+  buildInputs = [
+    qtbase
+    dtkcore
+  ];
+
+  qmakeFlags = [
+    "INSTALL_ROOT=${placeholder "out"}"
+    "LIB_INSTALL_DIR=${placeholder "out"}/lib"
+  ];
+
+  postPatch = ''
+    substituteInPlace libdframeworkdbus/libdframeworkdbus.pro \
+     --replace "/usr" ""
+
+    substituteInPlace libdframeworkdbus/DFrameworkdbusConfig.in \
+      --replace "/usr/include" "$out/include"
+  '';
+
+  meta = with lib; {
+    description = "Repo of auto-generated D-Bus source code which DDE used";
+    homepage = "https://github.com/linuxdeepin/dde-qt-dbus-factory";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/deepin-pdfium/default.nix b/nixpkgs/pkgs/desktops/deepin/library/deepin-pdfium/default.nix
new file mode 100644
index 000000000000..ef496931bea2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/deepin-pdfium/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, pkg-config
+, libchardet
+, lcms2
+, openjpeg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-pdfium";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-gUIQ+fZ7VaYaIj1hbzER10ceoJZbvhJlnDTFIShMrKw=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+  ];
+
+  dontWrapQtApps = true;
+
+  buildInputs = [
+    libchardet
+    lcms2
+    openjpeg
+  ];
+
+  meta = with lib; {
+    description = "development library for pdf on deepin";
+    homepage = "https://github.com/linuxdeepin/deepin-pdfium";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/deepin-wayland-protocols/default.nix b/nixpkgs/pkgs/desktops/deepin/library/deepin-wayland-protocols/default.nix
new file mode 100644
index 000000000000..ad3dce815c91
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/deepin-wayland-protocols/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-wayland-protocols";
+  version = "1.6.0-deepin.1.2";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-8Im3CueC8sYA5mwRU/Z7z8HA4mPQvVSqcTD813QCYxo=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  meta = with lib; {
+    description = "XML files of the non-standard wayland protocols use in deepin";
+    homepage = "https://github.com/linuxdeepin/deepin-wayland-protocols";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/disomaster/default.nix b/nixpkgs/pkgs/desktops/deepin/library/disomaster/default.nix
new file mode 100644
index 000000000000..3f65505e0af5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/disomaster/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, qmake
+, qttools
+, wrapQtAppsHook
+, libisoburn
+}:
+
+stdenv.mkDerivation rec {
+  pname = "disomaster";
+  version = "5.0.8";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-wN8mhddqqzYXkT6rRWsHVCWzaG2uRcF2iiFHlZx2LfY=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [ libisoburn ];
+
+  qmakeFlags = [ "VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A libisoburn wrapper class for Qt";
+    homepage = "https://github.com/linuxdeepin/disomaster";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/docparser/default.nix b/nixpkgs/pkgs/desktops/deepin/library/docparser/default.nix
new file mode 100644
index 000000000000..8605a0d214b7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/docparser/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, qmake
+, qttools
+, wrapQtAppsHook
+, poppler
+}:
+
+stdenv.mkDerivation rec {
+  pname = "docparser";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-iWRWSu8fALTTLLWdQGbpunN/1tpvKxuN/ZWJg34x0mU=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [ poppler ];
+
+  qmakeFlags = [ "VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A document parser library ported from document2html";
+    homepage = "https://github.com/linuxdeepin/docparser";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/dtkcommon/default.nix b/nixpkgs/pkgs/desktops/deepin/library/dtkcommon/default.nix
new file mode 100644
index 000000000000..a0845277355e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/dtkcommon/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, cmake
+, qtbase
+, qttools
+, wrapQtAppsHook
+, glib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dtkcommon";
+  version = "5.6.9";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-FHXwgFTevCGTNUPlb/oeltE2//Sjwz7YVvko7QPOsRo=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [ qtbase ];
+
+  qmakeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  preFixup = ''
+    glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+  '';
+
+  meta = with lib; {
+    description = "A public project for building DTK Library";
+    homepage = "https://github.com/linuxdeepin/dtkcommon";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/dtkcore/default.nix b/nixpkgs/pkgs/desktops/deepin/library/dtkcore/default.nix
new file mode 100644
index 000000000000..3ca5622d197c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/dtkcore/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, doxygen
+, wrapQtAppsHook
+, qtbase
+, gsettings-qt
+, lshw
+, libuchardet
+, dtkcommon
+, systemd
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dtkcore";
+  version = "5.6.10";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ge8DiJMSaZo7GeQEgnDbi5SLsLxtOQ/P5/9aBgaG7Ds=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/dsysinfo.cpp \
+      --replace "/usr/share/deepin/distribution.info" "/etc/distribution.info" \
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    doxygen
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    gsettings-qt
+    lshw
+    libuchardet
+  ]
+  ++ lib.optional withSystemd systemd;
+
+  propagatedBuildInputs = [ dtkcommon ];
+
+  cmakeFlags = [
+    "-DDVERSION=${version}"
+    "-DBUILD_EXAMPLES=OFF"
+    "-DBUILD_DOCS=ON"
+    "-DQCH_INSTALL_DESTINATION=${qtbase.qtDocPrefix}"
+    "-DDSG_PREFIX_PATH='/run/current-system/sw'"
+    "-DMKSPECS_INSTALL_DIR=${placeholder "out"}/mkspecs/modules"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DCMAKE_INSTALL_INCLUDEDIR=include"
+    "-DD_DSG_APP_DATA_FALLBACK=/var/dsg/appdata"
+    "-DBUILD_WITH_SYSTEMD=${if withSystemd then "ON" else "OFF"}"
+  ];
+
+  preConfigure = ''
+    # qt.qpa.plugin: Could not find the Qt platform plugin "minimal"
+    # A workaround is to set QT_PLUGIN_PATH explicitly
+    export QT_PLUGIN_PATH=${qtbase.bin}/${qtbase.qtPluginPrefix}
+  '';
+
+  meta = with lib; {
+    description = "Deepin tool kit core library";
+    homepage = "https://github.com/linuxdeepin/dtkcore";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/dtkgui/default.nix b/nixpkgs/pkgs/desktops/deepin/library/dtkgui/default.nix
new file mode 100644
index 000000000000..5112feffd9ec
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/dtkgui/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, cmake
+, qttools
+, doxygen
+, wrapQtAppsHook
+, qtbase
+, dtkcore
+, qtimageformats
+, lxqt
+, librsvg
+, freeimage
+, libraw
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dtkgui";
+  version = "5.6.10";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-4NHt/hLtt99LhWvBX9e5ueB5G86SXx553G6fyHZBXcE=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    doxygen
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    lxqt.libqtxdg
+    librsvg
+    freeimage
+    libraw
+  ];
+
+  propagatedBuildInputs = [
+    dtkcore
+    qtimageformats
+  ];
+
+  cmakeFlags = [
+    "-DDVERSION=${version}"
+    "-DBUILD_DOCS=ON"
+    "-DQCH_INSTALL_DESTINATION=${qtbase.qtDocPrefix}"
+    "-DMKSPECS_INSTALL_DIR=${placeholder "out"}/mkspecs/modules"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DCMAKE_INSTALL_INCLUDEDIR=include"
+  ];
+
+  preConfigure = ''
+    # qt.qpa.plugin: Could not find the Qt platform plugin "minimal"
+    # A workaround is to set QT_PLUGIN_PATH explicitly
+    export QT_PLUGIN_PATH=${qtbase.bin}/${qtbase.qtPluginPrefix}
+  '';
+
+  meta = with lib; {
+    description = "Deepin Toolkit, gui module for DDE look and feel";
+    homepage = "https://github.com/linuxdeepin/dtkgui";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/dtkwidget/default.nix b/nixpkgs/pkgs/desktops/deepin/library/dtkwidget/default.nix
new file mode 100644
index 000000000000..65c556d77b74
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/dtkwidget/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qttools
+, doxygen
+, wrapQtAppsHook
+, dtkgui
+, qtbase
+, qtmultimedia
+, qtsvg
+, qtx11extras
+, cups
+, gsettings-qt
+, libstartup_notification
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dtkwidget";
+  version = "5.6.10";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-PhVK/lUFrDW1bn9lUhLuKWLAVj7E7+/YC5USShrg3ds=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/widgets/dapplication.cpp \
+      --replace "auto dataDirs = DStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);" \
+                "auto dataDirs = DStandardPaths::standardLocations(QStandardPaths::GenericDataLocation) << \"$out/share\";"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    doxygen
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    qtsvg
+    qtx11extras
+    cups
+    gsettings-qt
+    libstartup_notification
+    xorg.libXdmcp
+  ];
+
+  propagatedBuildInputs = [ dtkgui ];
+
+  cmakeFlags = [
+    "-DDVERSION=${version}"
+    "-DBUILD_DOCS=ON"
+    "-DQCH_INSTALL_DESTINATION=${qtbase.qtDocPrefix}"
+    "-DMKSPECS_INSTALL_DIR=${placeholder "out"}/mkspecs/modules"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DCMAKE_INSTALL_INCLUDEDIR=include"
+  ];
+
+  preConfigure = ''
+    # qt.qpa.plugin: Could not find the Qt platform plugin "minimal"
+    # A workaround is to set QT_PLUGIN_PATH explicitly
+    export QT_PLUGIN_PATH=${qtbase.bin}/${qtbase.qtPluginPrefix}
+  '';
+
+  meta = with lib; {
+    description = "Deepin graphical user interface library";
+    homepage = "https://github.com/linuxdeepin/dtkwidget";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/dwayland/default.nix b/nixpkgs/pkgs/desktops/deepin/library/dwayland/default.nix
new file mode 100644
index 000000000000..a1797344a0b0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/dwayland/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, qtbase
+, qtwayland
+, wayland
+, wayland-protocols
+, extra-cmake-modules
+, deepin-wayland-protocols
+, qttools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dwayland";
+  version = "5.24.3-deepin.1.4";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/aWS4uvhxi9azxJWjRE+Bw+veURFO+mC8l9yypseclU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    qttools
+  ];
+
+  buildInputs = [
+    qtbase
+    qtwayland
+    wayland
+    wayland-protocols
+    deepin-wayland-protocols
+  ];
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "Qt-style API to interact with the wayland-client and wayland-server";
+    homepage = "https://github.com/linuxdeepin/dwayland";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/gio-qt/default.nix b/nixpkgs/pkgs/desktops/deepin/library/gio-qt/default.nix
new file mode 100644
index 000000000000..c2ee51aaade5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/gio-qt/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, glibmm
+, doxygen
+, qttools
+, qtbase
+, buildDocs ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gio-qt";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/wLaVR31T+EcT6D5Cw0QIjZasioPWC74KNmt1tckwXk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+  ] ++ lib.optionals buildDocs [ doxygen qttools.dev ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DPROJECT_VERSION=${version}"
+  ] ++ lib.optionals (!buildDocs) [ "-DBUILD_DOCS=OFF" ];
+
+  propagatedBuildInputs = [ glibmm ];
+
+  preConfigure = ''
+    # qt.qpa.plugin: Could not find the Qt platform plugin "minimal"
+    # A workaround is to set QT_PLUGIN_PATH explicitly
+    export QT_PLUGIN_PATH=${qtbase.bin}/${qtbase.qtPluginPrefix}
+  '';
+
+  meta = with lib; {
+    description = "Gio wrapper for Qt applications";
+    homepage = "https://github.com/linuxdeepin/gio-qt";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/image-editor/default.nix b/nixpkgs/pkgs/desktops/deepin/library/image-editor/default.nix
new file mode 100644
index 000000000000..6133d38aff22
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/image-editor/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, dtkwidget
+, cmake
+, qttools
+, pkg-config
+, wrapQtAppsHook
+, opencv
+, freeimage
+, libmediainfo
+, ffmpegthumbnailer
+, pcre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "image-editor";
+  version = "1.0.24";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0p/aicuBfaEyvfZomnz49IJLospWIdl23ZreDe+Bzqc=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "feat_check_PREFIX_value_before_set.patch";
+      url = "https://github.com/linuxdeepin/image-editor/commit/dae86e848cf53ba0ece879d81e8d5335d61a7473.patch";
+      sha256 = "sha256-lxmR+nIrMWVyhl1jpA17x2yqJ40h5vnpqKKcjd8j9RY=";
+    })
+    (fetchpatch {
+      name = "feat_use_FULL_install_path.patch";
+      url = "https://github.com/linuxdeepin/image-editor/commit/855ae53a0444ac628aa0fe893932df6263b82e2e.patch";
+      sha256 = "sha256-3Dynlwl/l/b6k6hOHjTdoDQ/VGBDfyRz9b8QY8FEsCc=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace libimageviewer/service/ffmpegvideothumbnailer.cpp \
+        --replace 'libPath("libffmpegthumbnailer.so")'  'QString("${ffmpegthumbnailer.out}/lib/libffmpegthumbnailer.so")'
+
+    substituteInPlace libimageviewer/CMakeLists.txt --replace '/usr' '$out'
+    substituteInPlace libimagevisualresult/CMakeLists.txt --replace '/usr' '$out'
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config qttools wrapQtAppsHook ];
+
+  buildInputs = [
+    dtkwidget
+    opencv
+    freeimage
+    libmediainfo
+    ffmpegthumbnailer
+    pcre
+  ];
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  meta = with lib; {
+    description = "Image editor lib for dtk";
+    homepage = "https://github.com/linuxdeepin/image-editor";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/qt5integration/default.nix b/nixpkgs/pkgs/desktops/deepin/library/qt5integration/default.nix
new file mode 100644
index 000000000000..426cb091a32c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/qt5integration/default.nix
@@ -0,0 +1,59 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, dtkwidget
+, qmake
+, qtbase
+, qtsvg
+, pkg-config
+, wrapQtAppsHook
+, qtx11extras
+, qt5platform-plugins
+, lxqt
+, mtdev
+, xorg
+, gtest
+}:
+
+stdenv.mkDerivation rec {
+  pname = "qt5integration";
+  version = "5.6.6";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-7b18ydyy/TIEGDkFAoium1LSx3Qs4I4pYpMfehOBZbY=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+    qtx11extras
+    qt5platform-plugins
+    mtdev
+    lxqt.libqtxdg
+    xorg.xcbutilrenderutil
+    gtest
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/${qtbase.qtPluginPrefix}
+    cp -r bin/plugins/* $out/${qtbase.qtPluginPrefix}/
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Qt platform theme integration plugins for DDE";
+    homepage = "https://github.com/linuxdeepin/qt5integration";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/qt5platform-plugins/default.nix b/nixpkgs/pkgs/desktops/deepin/library/qt5platform-plugins/default.nix
new file mode 100644
index 000000000000..1255bdb1534a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/qt5platform-plugins/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, pkg-config
+, qtbase
+, qtx11extras
+, wrapQtAppsHook
+, mtdev
+, cairo
+, xorg
+, waylandSupport ? true
+, wayland
+}:
+
+stdenv.mkDerivation rec {
+  pname = "qt5platform-plugins";
+  version = "5.6.9";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-EG5M4rcMK62DX4ywm2IH0lGHC510BnMqcefMlF9pyr8=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    mtdev
+    cairo
+    qtbase
+    qtx11extras
+    xorg.libSM
+  ]
+  ++ lib.optionals waylandSupport [
+    wayland
+  ];
+
+  qmakeFlags = [
+    "INSTALL_PATH=${placeholder "out"}/${qtbase.qtPluginPrefix}/platforms"
+    "QT_XCB_PRIVATE_INCLUDE=${qtbase.src}/src/plugins/platforms/xcb"
+  ]
+  ++ lib.optionals (!waylandSupport) [ "CONFIG+=DISABLE_WAYLAND" ];
+
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString waylandSupport "-I${wayland.dev}/include";
+
+  meta = with lib; {
+    description = "Qt platform plugins for DDE";
+    homepage = "https://github.com/linuxdeepin/qt5platform-plugins";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/udisks2-qt5/default.nix b/nixpkgs/pkgs/desktops/deepin/library/udisks2-qt5/default.nix
new file mode 100644
index 000000000000..84321809ebeb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/udisks2-qt5/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qmake
+, pkg-config
+, wrapQtAppsHook
+, udisks
+}:
+
+stdenv.mkDerivation rec {
+  pname = "udisks2-qt5";
+  version = "5.0.6";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-WS4fmqEYXi5dkn8RvyJBzy3+r+UgFcGDFFpQlbblLu4=";
+  };
+
+  nativeBuildInputs = [ qmake pkg-config wrapQtAppsHook ];
+
+  buildInputs = [ udisks ];
+
+  qmakeFlags = [ "VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "UDisks2 D-Bus interfaces binding for Qt5";
+    homepage = "https://github.com/linuxdeepin/udisks2-qt5";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/library/util-dfm/default.nix b/nixpkgs/pkgs/desktops/deepin/library/util-dfm/default.nix
new file mode 100644
index 000000000000..37a492ccc009
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/library/util-dfm/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qtbase
+, libmediainfo
+, libsecret
+, libisoburn
+, libuuid
+, udisks
+}:
+
+stdenv.mkDerivation rec {
+  pname = "util-dfm";
+  version = "1.2.8";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Mc3x0nTnEyMnruZotiT1J4BGOeNAQlCXGbO0yVJtqYM=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  dontWrapQtApps = true;
+
+  buildInputs = [
+    qtbase
+    libmediainfo
+    libsecret
+    libuuid
+    libisoburn
+    udisks
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DPROJECT_VERSION=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A Toolkits of libdfm-io,libdfm-mount and libdfm-burn";
+    homepage = "https://github.com/linuxdeepin/util-dfm";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/default.nix b/nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/default.nix
new file mode 100644
index 000000000000..d82d758adf3b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/default.nix
@@ -0,0 +1,36 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+}:
+stdenvNoCC.mkDerivation rec {
+  pname = "deepin-desktop-base";
+  version = "2022.11.15-deepin";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-GTgIHWz+x1Pl3F4zKA9V8o2oq6c53OK94q95WoMG+Qo=";
+  };
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  # distribution_logo_transparent.svg come form nixos-artwork(https://github.com/NixOS/nixos-artwork)/logo/nixos-white.svg under CC-BY license, used for dde-lock
+  postInstall = ''
+    rm -r $out/etc
+    rm -r $out/usr/share/python-apt
+    rm -r $out/usr/share/plymouth
+    rm -r $out/usr/share/distro-info
+    mv $out/usr/* $out/
+    rm -r $out/usr
+    install -D ${./distribution_logo_transparent.svg} $out/share/pixmaps/distribution_logo_transparent.svg
+  '';
+
+  meta = with lib; {
+    description = "Base assets and definitions for Deepin Desktop Environment";
+    homepage = "https://github.com/linuxdeepin/deepin-desktop-base";
+    license = with licenses; [ gpl3Plus cc-by-40 ];
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/distribution_logo_transparent.svg b/nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/distribution_logo_transparent.svg
new file mode 100644
index 000000000000..18f8d4055c39
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/misc/deepin-desktop-base/distribution_logo_transparent.svg
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="156px"
+   height="46px"
+   viewBox="0 0 156 46"
+   version="1.1"
+   id="SVGRoot"
+   sodipodi:docname="distribution_logo_transparent.svg"
+   inkscape:version="1.1 (c4e8f9e, 2021-05-24)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview12158"
+     pagecolor="#ffffff"
+     bordercolor="#ffffff"
+     borderopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:document-units="px"
+     showgrid="false"
+     inkscape:zoom="0.67972082"
+     inkscape:cx="397.22191"
+     inkscape:cy="90.478323"
+     inkscape:window-width="1920"
+     inkscape:window-height="960"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs12153" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g12416"
+       transform="matrix(0.10297744,0,0,0.10574712,-2.4660846,-2.6161481)">
+      <g
+         id="layer7"
+         inkscape:label="bg"
+         style="display:none">
+        <rect
+           transform="translate(-132.5822,958.04022)"
+           style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+           id="rect5389"
+           width="1543.4287"
+           height="483.7439"
+           x="132.5822"
+           y="-957.77832" />
+        <rect
+           style="fill:#000000;fill-opacity:1;stroke-width:0.529749"
+           id="rect6896"
+           width="1543.4287"
+           height="483.74393"
+           x="-9.0332054e-07"
+           y="0.26189968" />
+      </g>
+      <g
+         id="layer5"
+         inkscape:label="guide"
+         style="display:none;opacity:0.516"
+         transform="translate(-132.5822,958.04022)">
+        <rect
+           y="-957.77832"
+           x="132.5822"
+           height="483.7439"
+           width="1543.4283"
+           id="rect5350"
+           style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d4d4d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+        <rect
+           style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#9b9b9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+           id="rect5346"
+           width="1496.443"
+           height="435.68069"
+           x="155.77646"
+           y="-933.38721"
+           inkscape:export-xdpi="17.971878"
+           inkscape:export-ydpi="17.971878" />
+        <rect
+           y="-851.65918"
+           x="159.02695"
+           height="272.58423"
+           width="1492.5731"
+           id="rect5348"
+           style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#848484;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+      </g>
+      <g
+         id="layer6"
+         inkscape:label="logo-guide"
+         style="display:none"
+         transform="translate(-132.5822,958.04022)">
+        <rect
+           y="-958.02759"
+           x="132.65129"
+           height="484.30399"
+           width="550.41602"
+           id="rect5379"
+           style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+           inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nix-wiki.png"
+           inkscape:export-xdpi="22.07"
+           inkscape:export-ydpi="22.07" />
+        <rect
+           style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+           id="rect5372"
+           width="501.94415"
+           height="434.30405"
+           x="156.12303"
+           y="-933.02759"
+           inkscape:export-filename="/home/tim/dev/nix/homepage/logo/nixos-logo-only-hires-print.png"
+           inkscape:export-xdpi="212.2"
+           inkscape:export-ydpi="212.2" />
+        <rect
+           style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+           id="rect5381"
+           width="24.939611"
+           height="24.939611"
+           x="658.02826"
+           y="-958.04022" />
+      </g>
+      <g
+         style="display:inline"
+         inkscape:label="text-vegur"
+         id="g5329"
+         transform="translate(-132.5822,958.04022)">
+        <g
+           aria-label="Nix"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:395.097px;line-height:125%;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="text5407">
+          <path
+             d="m 969.15319,-847.11833 h -30.81755 v 139.86428 c 0,19.75484 0.79019,50.96749 1.97548,85.73601 h -1.18529 c -15.40877,-28.84207 -32.79303,-56.49884 -45.04104,-75.46349 l -96.79872,-150.1368 h -42.27536 v 267.87565 h 30.81755 v -139.86427 c 0,-19.75485 -0.79019,-56.89395 -1.97548,-91.26737 h 1.18529 c 22.91561,39.90478 36.34891,62.0302 48.99201,80.99485 l 96.79872,150.13679 h 38.32439 z"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Vegur;-inkscape-font-specification:Vegur;fill:#ffffff"
+             id="path4683" />
+          <path
+             d="m 1027.8251,-579.24268 h 33.1881 v -191.22686 h -33.1881 z m 16.594,-219.27874 c 11.4578,0 20.5451,-9.08722 20.5451,-20.54503 0,-11.45781 -9.0873,-20.54504 -20.5451,-20.54504 -11.4578,0 -20.545,9.08723 -20.545,20.54504 0,11.45781 9.0872,20.54503 20.545,20.54503 z"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Vegur;-inkscape-font-specification:Vegur;fill:#ffffff"
+             id="path4685" />
+          <path
+             d="m 1267.7785,-770.46954 h -37.9293 l -46.6214,70.32723 h -1.1853 l -45.0411,-70.32723 h -41.09 l 68.3517,93.24285 v 1.18529 l -70.7223,96.79872 h 37.9293 l 49.7822,-75.85859 h 1.1853 l 49.7822,75.85859 h 41.09 l -72.3027,-98.37911 v -1.18529 z"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Vegur;-inkscape-font-specification:Vegur;fill:#ffffff"
+             id="path4687" />
+        </g>
+        <g
+           aria-label="O"
+           transform="scale(0.95067318,1.0518862)"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:367.487px;line-height:125%;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="text5356">
+          <path
+             d="m 1468.5915,-800.79725 c -66.1477,0 -120.5358,48.14083 -120.5358,128.25306 0,80.11223 54.3881,128.25306 120.5358,128.25306 66.1477,0 120.5359,-48.14083 120.5359,-128.25306 0,-80.11223 -54.3882,-128.25306 -120.5359,-128.25306 z m 0,24.98914 c 49.2433,0 86.727,36.74872 86.727,103.26392 0,66.5152 -37.4837,103.26392 -86.727,103.26392 -49.2433,0 -86.727,-36.74872 -86.727,-103.26392 0,-66.5152 37.4837,-103.26392 86.727,-103.26392 z"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Vegur;-inkscape-font-specification:Vegur;fill:#ffffff"
+             id="path4680" />
+        </g>
+        <g
+           aria-label="S"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:386.555px;line-height:125%;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="text5364">
+          <path
+             d="m 1523.761,-773.88643 c 0,37.10927 19.3277,57.21012 64.1681,75.37819 34.4034,13.91598 48.3193,26.28573 48.3193,51.79835 0,30.92438 -25.126,46.38657 -58.3697,46.38657 -17.395,0 -37.1093,-2.70588 -58.7564,-10.05042 l -3.479,26.67228 c 18.9412,6.95799 39.8152,9.66387 60.6891,9.66387 51.7984,0 95.0925,-26.28573 95.0925,-79.24374 0,-36.7227 -22.4202,-54.50422 -67.6471,-72.6723 -30.1512,-11.9832 -44.8403,-24.73951 -44.8403,-51.41179 0,-25.89917 22.4202,-40.2017 50.6387,-40.2017 16.6218,0 34.7899,4.2521 47.5462,9.27732 l 3.479,-26.28573 c -14.6891,-6.18488 -32.8572,-9.27732 -52.958,-9.27732 -47.5463,0 -83.8824,27.4454 -83.8824,69.96642 z"
+             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Vegur;-inkscape-font-specification:Vegur;fill:#ffffff"
+             id="path4677" />
+        </g>
+      </g>
+      <g
+         id="layer4"
+         inkscape:label="white-logo"
+         style="display:inline">
+        <g
+           style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:11.0512"
+           transform="matrix(0.09048806,0,0,0.09048806,9.7879003,109.19458)"
+           id="g955">
+          <g
+             transform="matrix(11.047619,0,0,11.047619,-1572.2888,9377.7107)"
+             id="g869"
+             style="fill:#ffffff;fill-opacity:1">
+            <g
+               transform="rotate(-60,226.35754,-449.37199)"
+               id="g932"
+               style="fill:#ffffff;fill-opacity:1;stroke-width:11.0512">
+              <path
+                 sodipodi:nodetypes="cccccccccc"
+                 inkscape:connector-curvature="0"
+                 id="path3336-6-3"
+                 d="m 449.71876,-420.51322 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
+                 style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+            </g>
+            <path
+               sodipodi:nodetypes="cccccccccc"
+               inkscape:connector-curvature="0"
+               id="path4260-0-6"
+               d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
+               style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+            <use
+               x="0"
+               y="0"
+               xlink:href="#path3336-6-3"
+               inkscape:transform-center-x="124.43045"
+               inkscape:transform-center-y="151.59082"
+               id="use3439-6-7"
+               transform="rotate(60,728.23563,-692.24036)"
+               width="100%"
+               height="100%"
+               style="fill:#ffffff;fill-opacity:1;stroke-width:11.0512" />
+            <use
+               x="0"
+               y="0"
+               xlink:href="#path3336-6-3"
+               inkscape:transform-center-x="59.669705"
+               inkscape:transform-center-y="-139.94592"
+               id="use3449-5-5"
+               transform="rotate(180,477.5036,-570.81898)"
+               width="100%"
+               height="100%"
+               style="fill:#ffffff;fill-opacity:1;stroke-width:11.0512" />
+            <use
+               style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:11.0512"
+               x="0"
+               y="0"
+               xlink:href="#path4260-0-6"
+               id="use4354-5-3"
+               transform="rotate(120,407.33916,-716.08356)"
+               width="100%"
+               height="100%" />
+            <use
+               style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:11.0512"
+               x="0"
+               y="0"
+               xlink:href="#path4260-0-6"
+               id="use4362-2-5"
+               transform="rotate(-120,407.28823,-715.86995)"
+               width="100%"
+               height="100%" />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/nixpkgs/pkgs/desktops/deepin/misc/deepin-turbo/default.nix b/nixpkgs/pkgs/desktops/deepin/misc/deepin-turbo/default.nix
new file mode 100644
index 000000000000..7eaca5768607
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/misc/deepin-turbo/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, dtkwidget
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-turbo";
+  version = "0.0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-t6/Ws/Q8DO0zBzrUr/liD61VkxbOv4W4x6VgMWr+Ozk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    dtkwidget
+  ];
+
+  postPatch = ''
+    substituteInPlace src/{booster-dtkwidget/CMakeLists.txt,booster-desktop/{CMakeLists.txt,desktop.conf},booster-generic/CMakeLists.txt} --replace "/usr" "$out"
+  '';
+
+  meta = with lib; {
+    description = "A daemon that helps to launch dtk applications faster";
+    homepage = "https://github.com/linuxdeepin/deepin-turbo";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/tools/dde-device-formatter/default.nix b/nixpkgs/pkgs/desktops/deepin/tools/dde-device-formatter/default.nix
new file mode 100644
index 000000000000..66137f4d50f2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/tools/dde-device-formatter/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, dtkwidget
+, deepin-gettext-tools
+, qt5integration
+, qmake
+, qtbase
+, qttools
+, qtx11extras
+, pkg-config
+, wrapQtAppsHook
+, udisks2-qt5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dde-device-formatter";
+  version = "unstable-2022-09-05";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = "9b8489cb2bb7c85bd62557d16a5eabc94100512e";
+    sha256 = "sha256-Mi48dSDCoKhr8CGt9z64/9d7+r9QSrPPICv+R5VDuaU=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "chore-do-not-use-hardcode-path.patch";
+      url = "https://github.com/linuxdeepin/dde-device-formatter/commit/b836a498b8e783e0dff3820302957f15ee8416eb.patch";
+      sha256 = "sha256-i/VqJ6EmCyhE6weHKUB66bW6b51gLyssIAzb5li4aJM=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace dde-device-formatter.pro --replace "/usr" "$out"
+    patchShebangs *.sh
+  '';
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    pkg-config
+    wrapQtAppsHook
+    deepin-gettext-tools
+  ];
+
+  buildInputs = [
+    dtkwidget
+    udisks2-qt5
+    qtx11extras
+  ];
+
+  cmakeFlags = [ "-DVERSION=${version}" ];
+
+  # qt5integration must be placed before qtsvg in QT_PLUGIN_PATH
+  qtWrapperArgs = [
+    "--prefix QT_PLUGIN_PATH : ${qt5integration}/${qtbase.qtPluginPrefix}"
+  ];
+
+  meta = with lib; {
+    description = "A simple graphical interface for creating file system in a block device";
+    homepage = "https://github.com/linuxdeepin/dde-device-formatter";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/tools/deepin-gettext-tools/default.nix b/nixpkgs/pkgs/desktops/deepin/tools/deepin-gettext-tools/default.nix
new file mode 100644
index 000000000000..d219e6d73b16
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/tools/deepin-gettext-tools/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, gettext
+, python3Packages
+, perlPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "deepin-gettext-tools";
+  version = "1.0.10";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-5Dd2QU6JYwuktusssNDfA7IHa6HbFcWo9sZf5PS7NtI=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/generate_mo.py --replace "sudo cp" "cp"
+  '';
+
+  nativeBuildInputs = [ python3Packages.wrapPython ];
+
+  buildInputs = [
+    gettext
+    perlPackages.perl
+    perlPackages.ConfigTiny
+    perlPackages.XMLLibXML
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  postFixup = ''
+    wrapPythonPrograms
+    wrapPythonProgramsIn "$out/lib/${pname}"
+    wrapProgram $out/bin/deepin-desktop-ts-convert --set PERL5LIB $PERL5LIB
+  '';
+
+  meta = with lib; {
+    description = "Translation file processing utils for DDE development";
+    homepage = "https://github.com/linuxdeepin/deepin-gettext-tools";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = teams.deepin.members;
+  };
+}