about summary refs log tree commit diff
path: root/nixpkgs/pkgs/kde/frameworks
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/kde/frameworks')
-rw-r--r--nixpkgs/pkgs/kde/frameworks/attica/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/baloo/default.nix10
-rw-r--r--nixpkgs/pkgs/kde/frameworks/bluez-qt/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/breeze-icons/default.nix16
-rw-r--r--nixpkgs/pkgs/kde/frameworks/default.nix74
-rw-r--r--nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/default.nix8
-rw-r--r--nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/ecm-hook.sh128
-rw-r--r--nixpkgs/pkgs/kde/frameworks/frameworkintegration/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kapidox/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/karchive/default.nix12
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kauth/default.nix13
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kauth/fix-paths.patch17
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kbookmarks/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcalendarcore/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcmutils/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcodecs/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcolorscheme/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcompletion/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kconfig/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kconfigwidgets/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcontacts/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcoreaddons/default.nix12
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kcrash/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kdav/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kdbusaddons/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kdeclarative/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kded/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kdesu/default.nix7
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kdesu/kdesu-search-for-wrapped-daemon-first.patch38
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kdnssd/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kdoctools/default.nix18
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kfilemetadata/cmake-install-paths.patch14
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kfilemetadata/default.nix21
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kglobalaccel/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kguiaddons/default.nix12
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kholidays/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/ki18n/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kiconthemes/default.nix15
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kidletime/default.nix13
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kimageformats/default.nix16
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kio/0001-Remove-impure-smbd-search-path.patch25
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kio/default.nix18
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kirigami/default.nix14
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kitemmodels/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kitemviews/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kjobwidgets/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/knewstuff/default.nix16
-rw-r--r--nixpkgs/pkgs/kde/frameworks/knewstuff/delay-resolving-knsrcdir.patch14
-rw-r--r--nixpkgs/pkgs/kde/frameworks/knotifications/default.nix12
-rw-r--r--nixpkgs/pkgs/kde/frameworks/knotifyconfig/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kpackage/default.nix8
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kpackage/follow-symlinks.patch13
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kparts/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kpeople/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kplotting/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kpty/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kquickcharts/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/krunner/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kservice/default.nix10
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kservice/qdiriterator-follow-symlinks.patch13
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kstatusnotifieritem/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/ksvg/default.nix10
-rw-r--r--nixpkgs/pkgs/kde/frameworks/ktexteditor/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/ktexttemplate/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/ktextwidgets/default.nix13
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kunitconversion/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kuserfeedback/default.nix12
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kwallet/default.nix10
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kwidgetsaddons/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kwindowsystem/default.nix14
-rw-r--r--nixpkgs/pkgs/kde/frameworks/kxmlgui/default.nix9
-rw-r--r--nixpkgs/pkgs/kde/frameworks/modemmanager-qt/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/networkmanager-qt/default.nix13
-rw-r--r--nixpkgs/pkgs/kde/frameworks/prison/default.nix12
-rw-r--r--nixpkgs/pkgs/kde/frameworks/purpose/default.nix13
-rw-r--r--nixpkgs/pkgs/kde/frameworks/qqc2-desktop-style/default.nix11
-rw-r--r--nixpkgs/pkgs/kde/frameworks/solid/default.nix16
-rw-r--r--nixpkgs/pkgs/kde/frameworks/solid/fix-search-path.patch17
-rw-r--r--nixpkgs/pkgs/kde/frameworks/sonnet/default.nix14
-rw-r--r--nixpkgs/pkgs/kde/frameworks/syndication/default.nix4
-rw-r--r--nixpkgs/pkgs/kde/frameworks/syntax-highlighting/default.nix12
-rw-r--r--nixpkgs/pkgs/kde/frameworks/threadweaver/default.nix4
82 files changed, 1079 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/kde/frameworks/attica/default.nix b/nixpkgs/pkgs/kde/frameworks/attica/default.nix
new file mode 100644
index 000000000000..05b5c1e59be9
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/attica/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "attica";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/baloo/default.nix b/nixpkgs/pkgs/kde/frameworks/baloo/default.nix
new file mode 100644
index 000000000000..517e5285a4e0
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/baloo/default.nix
@@ -0,0 +1,10 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  lmdb,
+}:
+mkKdeDerivation {
+  pname = "baloo";
+
+  extraBuildInputs = [qtdeclarative lmdb];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/bluez-qt/default.nix b/nixpkgs/pkgs/kde/frameworks/bluez-qt/default.nix
new file mode 100644
index 000000000000..3bccb4309af7
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/bluez-qt/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "bluez-qt";
+
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/breeze-icons/default.nix b/nixpkgs/pkgs/kde/frameworks/breeze-icons/default.nix
new file mode 100644
index 000000000000..103903c04cb4
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/breeze-icons/default.nix
@@ -0,0 +1,16 @@
+{
+  mkKdeDerivation,
+  python3,
+  libxml2,
+}:
+mkKdeDerivation {
+  pname = "breeze-icons";
+
+  extraNativeBuildInputs = [
+    (python3.withPackages (ps: [ps.lxml]))
+    libxml2
+  ];
+
+  # lots of icons, takes forever, does absolutely nothing
+  dontStrip = true;
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/default.nix b/nixpkgs/pkgs/kde/frameworks/default.nix
new file mode 100644
index 000000000000..302be8ad3eba
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/default.nix
@@ -0,0 +1,74 @@
+{callPackage}: {
+  attica = callPackage ./attica {};
+  baloo = callPackage ./baloo {};
+  bluez-qt = callPackage ./bluez-qt {};
+  breeze-icons = callPackage ./breeze-icons {};
+  extra-cmake-modules = callPackage ./extra-cmake-modules {};
+  frameworkintegration = callPackage ./frameworkintegration {};
+  kapidox = callPackage ./kapidox {};
+  karchive = callPackage ./karchive {};
+  kauth = callPackage ./kauth {};
+  kbookmarks = callPackage ./kbookmarks {};
+  kcalendarcore = callPackage ./kcalendarcore {};
+  kcmutils = callPackage ./kcmutils {};
+  kcodecs = callPackage ./kcodecs {};
+  kcolorscheme = callPackage ./kcolorscheme {};
+  kcompletion = callPackage ./kcompletion {};
+  kconfig = callPackage ./kconfig {};
+  kconfigwidgets = callPackage ./kconfigwidgets {};
+  kcontacts = callPackage ./kcontacts {};
+  kcoreaddons = callPackage ./kcoreaddons {};
+  kcrash = callPackage ./kcrash {};
+  kdav = callPackage ./kdav {};
+  kdbusaddons = callPackage ./kdbusaddons {};
+  kdeclarative = callPackage ./kdeclarative {};
+  kded = callPackage ./kded {};
+  kdesu = callPackage ./kdesu {};
+  kdnssd = callPackage ./kdnssd {};
+  kdoctools = callPackage ./kdoctools {};
+  kfilemetadata = callPackage ./kfilemetadata {};
+  kglobalaccel = callPackage ./kglobalaccel {};
+  kguiaddons = callPackage ./kguiaddons {};
+  kholidays = callPackage ./kholidays {};
+  ki18n = callPackage ./ki18n {};
+  kiconthemes = callPackage ./kiconthemes {};
+  kidletime = callPackage ./kidletime {};
+  kimageformats = callPackage ./kimageformats {};
+  kio = callPackage ./kio {};
+  kirigami = callPackage ./kirigami {};
+  kitemmodels = callPackage ./kitemmodels {};
+  kitemviews = callPackage ./kitemviews {};
+  kjobwidgets = callPackage ./kjobwidgets {};
+  knewstuff = callPackage ./knewstuff {};
+  knotifications = callPackage ./knotifications {};
+  knotifyconfig = callPackage ./knotifyconfig {};
+  kpackage = callPackage ./kpackage {};
+  kparts = callPackage ./kparts {};
+  kpeople = callPackage ./kpeople {};
+  kplotting = callPackage ./kplotting {};
+  kpty = callPackage ./kpty {};
+  kquickcharts = callPackage ./kquickcharts {};
+  krunner = callPackage ./krunner {};
+  kservice = callPackage ./kservice {};
+  kstatusnotifieritem = callPackage ./kstatusnotifieritem {};
+  ksvg = callPackage ./ksvg {};
+  ktexteditor = callPackage ./ktexteditor {};
+  ktexttemplate = callPackage ./ktexttemplate {};
+  ktextwidgets = callPackage ./ktextwidgets {};
+  kunitconversion = callPackage ./kunitconversion {};
+  kuserfeedback = callPackage ./kuserfeedback {};
+  kwallet = callPackage ./kwallet {};
+  kwidgetsaddons = callPackage ./kwidgetsaddons {};
+  kwindowsystem = callPackage ./kwindowsystem {};
+  kxmlgui = callPackage ./kxmlgui {};
+  modemmanager-qt = callPackage ./modemmanager-qt {};
+  networkmanager-qt = callPackage ./networkmanager-qt {};
+  prison = callPackage ./prison {};
+  purpose = callPackage ./purpose {};
+  qqc2-desktop-style = callPackage ./qqc2-desktop-style {};
+  solid = callPackage ./solid {};
+  sonnet = callPackage ./sonnet {};
+  syndication = callPackage ./syndication {};
+  syntax-highlighting = callPackage ./syntax-highlighting {};
+  threadweaver = callPackage ./threadweaver {};
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/default.nix b/nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/default.nix
new file mode 100644
index 000000000000..0a06cf4a8772
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/default.nix
@@ -0,0 +1,8 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "extra-cmake-modules";
+
+  outputs = ["out"];
+
+  setupHook = ./ecm-hook.sh;
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/ecm-hook.sh b/nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/ecm-hook.sh
new file mode 100644
index 000000000000..b6c50059868f
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/extra-cmake-modules/ecm-hook.sh
@@ -0,0 +1,128 @@
+# shellcheck shell=bash
+# Variables we use here are set by the stdenv, no use complaining about them
+# shellcheck disable=SC2164
+
+ecmEnvHook() {
+    addToSearchPath XDG_DATA_DIRS "$1/share"
+    addToSearchPath XDG_CONFIG_DIRS "$1/etc/xdg"
+}
+addEnvHooks "$targetOffset" ecmEnvHook
+
+ecmPostHook() {
+    # Because we need to use absolute paths here, we must set *all* the paths.
+    # Keep this in sync with https://github.com/KDE/extra-cmake-modules/blob/master/kde-modules/KDEInstallDirs6.cmake
+    if [ "$(uname)" = "Darwin" ]; then
+        cmakeFlags+=" -DKDE_INSTALL_BUNDLEDIR=${!outputBin}/Applications/KDE"
+    fi
+
+    cmakeFlags+=" -DKDE_INSTALL_EXECROOTDIR=${!outputBin}"
+    cmakeFlags+=" -DKDE_INSTALL_BINDIR=${!outputBin}/bin"
+    cmakeFlags+=" -DKDE_INSTALL_SBINDIR=${!outputBin}/sbin"
+    cmakeFlags+=" -DKDE_INSTALL_LIBDIR=${!outputLib}/lib"
+    cmakeFlags+=" -DKDE_INSTALL_LIBEXECDIR=${!outputLib}/libexec"
+    cmakeFlags+=" -DKDE_INSTALL_CMAKEPACKAGEDIR=${!outputDev}/lib/cmake"
+
+    if [ -n "${qtPluginPrefix-}" ]; then
+        cmakeFlags+=" -DKDE_INSTALL_QTPLUGINDIR=${!outputBin}/$qtPluginPrefix"
+        cmakeFlags+=" -DKDE_INSTALL_PLUGINDIR=${!outputBin}/$qtPluginPrefix"
+    fi
+
+    if [ -n "${qtQmlPrefix-}" ]; then
+        cmakeFlags+=" -DKDE_INSTALL_QMLDIR=${!outputBin}/$qtQmlPrefix"
+    fi
+
+    cmakeFlags+=" -DKDE_INSTALL_INCLUDEDIR=${!outputInclude}/include"
+    cmakeFlags+=" -DKDE_INSTALL_LOCALSTATEDIR=/var"
+    cmakeFlags+=" -DKDE_INSTALL_SHAREDSTATEDIR=/com"  # ???
+    cmakeFlags+=" -DKDE_INSTALL_DATAROOTDIR=${!outputBin}/share"
+    cmakeFlags+=" -DKDE_INSTALL_DATADIR=${!outputBin}/share"
+    cmakeFlags+=" -DKDE_INSTALL_DOCBUNDLEDIR=${!outputBin}/share/doc/HTML"
+    cmakeFlags+=" -DKDE_INSTALL_KCFGDIR=${!outputBin}/share/config.kcfg"
+    cmakeFlags+=" -DKDE_INSTALL_KCONFUPDATEDIR=${!outputBin}/share/kconf_update"
+    cmakeFlags+=" -DKDE_INSTALL_KAPPTEMPLATESDIR=${!outputDev}/share/kdevappwizard/templates"
+    cmakeFlags+=" -DKDE_INSTALL_KFILETEMPLATESDIR=${!outputDev}/share/kdevfiletemplates/templates"
+    cmakeFlags+=" -DKDE_INSTALL_KXMLGUIDIR=${!outputBin}/share/kxmlgui6"
+    cmakeFlags+=" -DKDE_INSTALL_KNOTIFYRCDIR=${!outputBin}/share/knotifications6"
+    cmakeFlags+=" -DKDE_INSTALL_ICONDIR=${!outputBin}/share/icons"
+    cmakeFlags+=" -DKDE_INSTALL_LOCALEDIR=${!outputLib}/share/locale"
+    cmakeFlags+=" -DKDE_INSTALL_SOUNDDIR=${!outputBin}/share/sounds"
+    cmakeFlags+=" -DKDE_INSTALL_TEMPLATEDIR=${!outputBin}/share/templates"
+    cmakeFlags+=" -DKDE_INSTALL_WALLPAPERDIR=${!outputBin}/share/wallpapers"
+    cmakeFlags+=" -DKDE_INSTALL_APPDIR=${!outputBin}/share/applications"
+    cmakeFlags+=" -DKDE_INSTALL_DESKTOPDIR=${!outputBin}/share/desktop-directories"
+    cmakeFlags+=" -DKDE_INSTALL_MIMEDIR=${!outputBin}/share/mime/packages"
+    cmakeFlags+=" -DKDE_INSTALL_METAINFODIR=${!outputBin}/share/appdata"
+    cmakeFlags+=" -DKDE_INSTALL_QTQCHDIR=${!outputLib}/share/doc/qch"
+    cmakeFlags+=" -DKDE_INSTALL_QCHDIR=${!outputLib}/share/doc/qch"
+    cmakeFlags+=" -DKDE_INSTALL_MANDIR=${!outputBin}/share/man"
+    cmakeFlags+=" -DKDE_INSTALL_INFODIR=${!outputBin}/share/info"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSDIR=${!outputBin}/share/dbus-1"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSINTERFACEDIR=${!outputBin}/share/dbus-1/interfaces"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSSERVICEDIR=${!outputBin}/share/dbus-1/services"
+    cmakeFlags+=" -DKDE_INSTALL_DBUSSYSTEMSERVICEDIR=${!outputBin}/share/dbus-1/system-services"
+    cmakeFlags+=" -DKDE_INSTALL_SYSCONFDIR=${!outputBin}/etc"
+    cmakeFlags+=" -DKDE_INSTALL_CONFDIR=${!outputBin}/etc/xdg"
+    cmakeFlags+=" -DKDE_INSTALL_AUTOSTARTDIR=${!outputBin}/etc/xdg/autostart"
+    cmakeFlags+=" -DKDE_INSTALL_LOGGINGCATEGORIESDIR=${!outputLib}/share/qlogging-categories6"
+    cmakeFlags+=" -DKDE_INSTALL_SYSTEMDUNITDIR=${!outputBin}/lib/systemd"
+    cmakeFlags+=" -DKDE_INSTALL_SYSTEMDUSERUNITDIR=${!outputBin}/share/systemd/user"
+}
+postHooks+=(ecmPostHook)
+
+xdgDataSubdirs=( \
+    "config.kcfg" "kconf_update" "knotifications6" "icons" "locale" "sounds" "templates" \
+    "wallpapers" "applications" "desktop-directories" "mime" "appdata" "dbus-1" \
+)
+
+# ecmHostPathsSeen is an associative array of the paths that have already been
+# seen by ecmHostPathHook.
+declare -gA ecmHostPathsSeen
+
+ecmHostPathIsNotSeen() {
+    if [[ -n "${ecmHostPathsSeen["$1"]:-}" ]]; then
+        # The path has been seen before.
+        return 1
+    else
+        # The path has not been seen before.
+        # Now it is seen, so record it.
+        ecmHostPathsSeen["$1"]=1
+        return 0
+    fi
+}
+
+ecmHostPathHook() {
+    ecmHostPathIsNotSeen "$1" || return 0
+
+    local xdgConfigDir="$1/etc/xdg"
+    if [ -d "$xdgConfigDir" ]
+    then
+        qtWrapperArgs+=(--prefix XDG_CONFIG_DIRS : "$xdgConfigDir")
+    fi
+
+    for xdgDataSubdir in "${xdgDataSubdirs[@]}"
+    do
+        if [ -d "$1/share/$xdgDataSubdir" ]
+        then
+            qtWrapperArgs+=(--prefix XDG_DATA_DIRS : "$1/share")
+            break
+        fi
+    done
+
+    local manDir="$1/man"
+    if [ -d "$manDir" ]
+    then
+        qtWrapperArgs+=(--prefix MANPATH : "$manDir")
+    fi
+
+    local infoDir="$1/info"
+    if [ -d "$infoDir" ]
+    then
+        qtWrapperArgs+=(--prefix INFOPATH : "$infoDir")
+    fi
+
+    if [ -d "$1/dbus-1" ]
+    then
+        propagatedUserEnvPkgs+=" $1"
+    fi
+}
+addEnvHooks "$targetOffset" ecmHostPathHook
diff --git a/nixpkgs/pkgs/kde/frameworks/frameworkintegration/default.nix b/nixpkgs/pkgs/kde/frameworks/frameworkintegration/default.nix
new file mode 100644
index 000000000000..3607c115c301
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/frameworkintegration/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  pkg-config,
+  packagekit-qt,
+}:
+mkKdeDerivation {
+  pname = "frameworkintegration";
+
+  extraNativeBuildInputs = [pkg-config];
+  extraBuildInputs = [packagekit-qt];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kapidox/default.nix b/nixpkgs/pkgs/kde/frameworks/kapidox/default.nix
new file mode 100644
index 000000000000..2544e7921f87
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kapidox/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kapidox";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/karchive/default.nix b/nixpkgs/pkgs/kde/frameworks/karchive/default.nix
new file mode 100644
index 000000000000..fe124e1187d1
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/karchive/default.nix
@@ -0,0 +1,12 @@
+{
+  mkKdeDerivation,
+  qttools,
+  pkg-config,
+  xz,
+}:
+mkKdeDerivation {
+  pname = "karchive";
+
+  extraNativeBuildInputs = [qttools pkg-config];
+  extraBuildInputs = [xz];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kauth/default.nix b/nixpkgs/pkgs/kde/frameworks/kauth/default.nix
new file mode 100644
index 000000000000..df033770a303
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kauth/default.nix
@@ -0,0 +1,13 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kauth";
+
+  # Late resolve paths so things end up in their own prefix
+  # FIXME(later): discuss with upstream
+  patches = [./fix-paths.patch];
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kauth/fix-paths.patch b/nixpkgs/pkgs/kde/frameworks/kauth/fix-paths.patch
new file mode 100644
index 000000000000..6444a7610c47
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kauth/fix-paths.patch
@@ -0,0 +1,17 @@
+diff --git a/KF6AuthConfig.cmake.in b/KF6AuthConfig.cmake.in
+index 4ee3f92..65a40d5 100644
+--- a/KF6AuthConfig.cmake.in
++++ b/KF6AuthConfig.cmake.in
+@@ -4,9 +4,9 @@ set(KAUTH_STUB_FILES_DIR "@PACKAGE_KDE_INSTALL_DATADIR_KF@/kauth/")
+ 
+ set(KAUTH_BACKEND_NAME "@KAUTH_BACKEND_NAME@")
+ set(KAUTH_HELPER_BACKEND_NAME "@KAUTH_HELPER_BACKEND_NAME@")
+-set(KAUTH_POLICY_FILES_INSTALL_DIR "@KAUTH_POLICY_FILES_INSTALL_DIR@")
+-set(KAUTH_HELPER_INSTALL_DIR "@KAUTH_HELPER_INSTALL_DIR@")
+-set(KAUTH_HELPER_INSTALL_ABSOLUTE_DIR "@KAUTH_HELPER_INSTALL_ABSOLUTE_DIR@")
++set(KAUTH_POLICY_FILES_INSTALL_DIR "${KDE_INSTALL_DATADIR}/polkit-1/actions")
++set(KAUTH_HELPER_INSTALL_DIR "${KDE_INSTALL_LIBEXECDIR}")
++set(KAUTH_HELPER_INSTALL_ABSOLUTE_DIR "${KDE_INSTALL_LIBEXECDIR}")
+ 
+ include(CMakeFindDependencyMacro)
+ 
diff --git a/nixpkgs/pkgs/kde/frameworks/kbookmarks/default.nix b/nixpkgs/pkgs/kde/frameworks/kbookmarks/default.nix
new file mode 100644
index 000000000000..ac9255e6f83d
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kbookmarks/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kbookmarks";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcalendarcore/default.nix b/nixpkgs/pkgs/kde/frameworks/kcalendarcore/default.nix
new file mode 100644
index 000000000000..c80117749e11
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcalendarcore/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  libical,
+}:
+mkKdeDerivation {
+  pname = "kcalendarcore";
+
+  extraBuildInputs = [libical];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcmutils/default.nix b/nixpkgs/pkgs/kde/frameworks/kcmutils/default.nix
new file mode 100644
index 000000000000..bb6ecb110ee0
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcmutils/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "kcmutils";
+
+  extraPropagatedBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcodecs/default.nix b/nixpkgs/pkgs/kde/frameworks/kcodecs/default.nix
new file mode 100644
index 000000000000..409666658ddf
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcodecs/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  qttools,
+  gperf,
+}:
+mkKdeDerivation {
+  pname = "kcodecs";
+
+  extraNativeBuildInputs = [qttools];
+  extraBuildInputs = [gperf];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcolorscheme/default.nix b/nixpkgs/pkgs/kde/frameworks/kcolorscheme/default.nix
new file mode 100644
index 000000000000..05f32ce574f3
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcolorscheme/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kcolorscheme";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcompletion/default.nix b/nixpkgs/pkgs/kde/frameworks/kcompletion/default.nix
new file mode 100644
index 000000000000..c07f274e08ee
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcompletion/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kcompletion";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kconfig/default.nix b/nixpkgs/pkgs/kde/frameworks/kconfig/default.nix
new file mode 100644
index 000000000000..b29a081524c7
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kconfig/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  qttools,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "kconfig";
+
+  extraNativeBuildInputs = [qttools];
+  extraPropagatedBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kconfigwidgets/default.nix b/nixpkgs/pkgs/kde/frameworks/kconfigwidgets/default.nix
new file mode 100644
index 000000000000..354972d005ae
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kconfigwidgets/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kconfigwidgets";
+
+  extraBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcontacts/default.nix b/nixpkgs/pkgs/kde/frameworks/kcontacts/default.nix
new file mode 100644
index 000000000000..57e35a90a9ae
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcontacts/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kcontacts";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcoreaddons/default.nix b/nixpkgs/pkgs/kde/frameworks/kcoreaddons/default.nix
new file mode 100644
index 000000000000..12c6ae5d770b
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcoreaddons/default.nix
@@ -0,0 +1,12 @@
+{
+  mkKdeDerivation,
+  qttools,
+  shared-mime-info,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "kcoreaddons";
+
+  extraNativeBuildInputs = [qttools shared-mime-info];
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kcrash/default.nix b/nixpkgs/pkgs/kde/frameworks/kcrash/default.nix
new file mode 100644
index 000000000000..b3ade8fd6763
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kcrash/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kcrash";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kdav/default.nix b/nixpkgs/pkgs/kde/frameworks/kdav/default.nix
new file mode 100644
index 000000000000..d53562fc9038
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kdav/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kdav";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kdbusaddons/default.nix b/nixpkgs/pkgs/kde/frameworks/kdbusaddons/default.nix
new file mode 100644
index 000000000000..f7d80a5746f3
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kdbusaddons/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kdbusaddons";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kdeclarative/default.nix b/nixpkgs/pkgs/kde/frameworks/kdeclarative/default.nix
new file mode 100644
index 000000000000..8b05ec66b0f4
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kdeclarative/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  spirv-tools,
+}:
+mkKdeDerivation {
+  pname = "kdeclarative";
+
+  extraNativeBuildInputs = [spirv-tools];
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kded/default.nix b/nixpkgs/pkgs/kde/frameworks/kded/default.nix
new file mode 100644
index 000000000000..dc6fa84d5347
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kded/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kded";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kdesu/default.nix b/nixpkgs/pkgs/kde/frameworks/kdesu/default.nix
new file mode 100644
index 000000000000..ae7ed3a33c38
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kdesu/default.nix
@@ -0,0 +1,7 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kdesu";
+
+  # Look for NixOS SUID wrapper first
+  patches = [./kdesu-search-for-wrapped-daemon-first.patch];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kdesu/kdesu-search-for-wrapped-daemon-first.patch b/nixpkgs/pkgs/kde/frameworks/kdesu/kdesu-search-for-wrapped-daemon-first.patch
new file mode 100644
index 000000000000..1379707f02fe
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kdesu/kdesu-search-for-wrapped-daemon-first.patch
@@ -0,0 +1,38 @@
+From 01af4d2a098e5819c09bca37568941dcd4b89d0b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Thu, 16 Jul 2020 13:21:42 -0300
+Subject: [PATCH] Search for the daemon first in /run/wrappers/bin
+
+If looking first in libexec, the eventually wrapped one in
+/run/wrappers/bin can not be found.
+---
+ src/client.cpp | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/src/client.cpp b/src/client.cpp
+index 44fbacd..6b5abf5 100644
+--- a/src/client.cpp
++++ b/src/client.cpp
+@@ -384,11 +384,14 @@ int KDEsuClient::stopServer()
+ 
+ static QString findDaemon()
+ {
+-    QString daemon = QFile::decodeName(KDE_INSTALL_FULL_LIBEXECDIR_KF "/kdesud");
+-    if (!QFile::exists(daemon)) { // if not in libexec, find it in PATH
+-        daemon = QStandardPaths::findExecutable(QStringLiteral("kdesud"));
+-        if (daemon.isEmpty()) {
+-            qCWarning(KSU_LOG) << "kdesud daemon not found.";
++    QString daemon = QFile::decodeName("/run/wrappers/bin/kdesud");
++    if (!QFile::exists(daemon)) { // if not in wrappers
++        daemon = QFile::decodeName(KDE_INSTALL_FULL_LIBEXECDIR_KF "/kdesud");
++        if (!QFile::exists(daemon)) { // if not in libexec, find it in PATH
++            daemon = QStandardPaths::findExecutable(QStringLiteral("kdesud"));
++            if (daemon.isEmpty()) {
++                qCWarning(KSU_LOG) << "kdesud daemon not found.";
++            }
+         }
+     }
+     return daemon;
+-- 
+2.27.0
+
diff --git a/nixpkgs/pkgs/kde/frameworks/kdnssd/default.nix b/nixpkgs/pkgs/kde/frameworks/kdnssd/default.nix
new file mode 100644
index 000000000000..3241dcf9c2fb
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kdnssd/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  qttools,
+  avahi,
+}:
+mkKdeDerivation {
+  pname = "kdnssd";
+
+  extraNativeBuildInputs = [qttools];
+  extraBuildInputs = [avahi];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kdoctools/default.nix b/nixpkgs/pkgs/kde/frameworks/kdoctools/default.nix
new file mode 100644
index 000000000000..8e8341997a2b
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kdoctools/default.nix
@@ -0,0 +1,18 @@
+{
+  mkKdeDerivation,
+  docbook_xml_dtd_45,
+  docbook-xsl-nons,
+  perl,
+  perlPackages,
+}:
+mkKdeDerivation {
+  pname = "kdoctools";
+
+  # lots of self-references, the output is pretty small (~5MB), not worth trying to untangle
+  outputs = ["out"];
+
+  # Perl could be used both at build time and at runtime.
+  extraNativeBuildInputs = [perl perlPackages.URI];
+  extraBuildInputs = [docbook_xml_dtd_45 docbook-xsl-nons];
+  extraPropagatedBuildInputs = [perl perlPackages.URI];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kfilemetadata/cmake-install-paths.patch b/nixpkgs/pkgs/kde/frameworks/kfilemetadata/cmake-install-paths.patch
new file mode 100644
index 000000000000..3b3631fb3abe
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kfilemetadata/cmake-install-paths.patch
@@ -0,0 +1,14 @@
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 84cc68c..2e02194 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -85,7 +85,7 @@ install(TARGETS KF6FileMetaData EXPORT KF6FileMetaDataTargets ${KF_INSTALL_TARGE
+
+ install(EXPORT KF6FileMetaDataTargets
+         NAMESPACE KF6::
+-        DESTINATION ${KDE_INSTALL_LIBDIR}/cmake/KF6FileMetaData
++        DESTINATION ${KDE_INSTALL_FULL_CMAKEPACKAGEDIR}/KF6FileMetaData
+         FILE KF6FileMetaDataTargets.cmake)
+
+ install(FILES
+ 
\ No newline at end of file
diff --git a/nixpkgs/pkgs/kde/frameworks/kfilemetadata/default.nix b/nixpkgs/pkgs/kde/frameworks/kfilemetadata/default.nix
new file mode 100644
index 000000000000..0e9fd5489e7e
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kfilemetadata/default.nix
@@ -0,0 +1,21 @@
+{
+  mkKdeDerivation,
+  pkg-config,
+  attr,
+  ebook_tools,
+  exiv2,
+  ffmpeg,
+  kconfig,
+  kdegraphics-mobipocket,
+  libappimage,
+}:
+mkKdeDerivation {
+  pname = "kfilemetadata";
+
+  # Fix installing cmake files into wrong directory
+  # FIXME(later): upstream
+  patches = [./cmake-install-paths.patch];
+
+  extraNativeBuildInputs = [pkg-config];
+  extraBuildInputs = [attr ebook_tools exiv2 ffmpeg kconfig kdegraphics-mobipocket libappimage];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kglobalaccel/default.nix b/nixpkgs/pkgs/kde/frameworks/kglobalaccel/default.nix
new file mode 100644
index 000000000000..b7d5e627d64f
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kglobalaccel/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kglobalaccel";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kguiaddons/default.nix b/nixpkgs/pkgs/kde/frameworks/kguiaddons/default.nix
new file mode 100644
index 000000000000..899786eefbda
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kguiaddons/default.nix
@@ -0,0 +1,12 @@
+{
+  mkKdeDerivation,
+  qtwayland,
+  pkg-config,
+  wayland,
+}:
+mkKdeDerivation {
+  pname = "kguiaddons";
+
+  extraNativeBuildInputs = [pkg-config];
+  extraBuildInputs = [qtwayland wayland];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kholidays/default.nix b/nixpkgs/pkgs/kde/frameworks/kholidays/default.nix
new file mode 100644
index 000000000000..07702734a06b
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kholidays/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  qttools,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "kholidays";
+
+  extraNativeBuildInputs = [qttools];
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/ki18n/default.nix b/nixpkgs/pkgs/kde/frameworks/ki18n/default.nix
new file mode 100644
index 000000000000..2a082a9dfe57
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/ki18n/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "ki18n";
+
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kiconthemes/default.nix b/nixpkgs/pkgs/kde/frameworks/kiconthemes/default.nix
new file mode 100644
index 000000000000..378a3f7f87b7
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kiconthemes/default.nix
@@ -0,0 +1,15 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  qtsvg,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kiconthemes";
+
+  extraBuildInputs = [
+    qtdeclarative
+    qtsvg
+    qttools
+  ];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kidletime/default.nix b/nixpkgs/pkgs/kde/frameworks/kidletime/default.nix
new file mode 100644
index 000000000000..8fd68f04ec14
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kidletime/default.nix
@@ -0,0 +1,13 @@
+{
+  mkKdeDerivation,
+  qtwayland,
+  pkg-config,
+  wayland-protocols,
+  xorg,
+}:
+mkKdeDerivation {
+  pname = "kidletime";
+
+  extraNativeBuildInputs = [pkg-config];
+  extraBuildInputs = [qtwayland xorg.libXScrnSaver wayland-protocols];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kimageformats/default.nix b/nixpkgs/pkgs/kde/frameworks/kimageformats/default.nix
new file mode 100644
index 000000000000..21c84cb56992
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kimageformats/default.nix
@@ -0,0 +1,16 @@
+{
+  mkKdeDerivation,
+  pkg-config,
+  libheif,
+  libjxl,
+  libavif,
+  libraw,
+  openexr_3,
+}:
+mkKdeDerivation {
+  pname = "kimageformats";
+
+  extraCmakeFlags = ["-DKIMAGEFORMATS_HEIF=1"];
+  extraNativeBuildInputs = [pkg-config];
+  extraBuildInputs = [libheif libjxl libavif libraw openexr_3];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kio/0001-Remove-impure-smbd-search-path.patch b/nixpkgs/pkgs/kde/frameworks/kio/0001-Remove-impure-smbd-search-path.patch
new file mode 100644
index 000000000000..e541f7a05e8d
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kio/0001-Remove-impure-smbd-search-path.patch
@@ -0,0 +1,25 @@
+From af54a2a37655df26a33bc6783cb472c38f65322f Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@mailbox.org>
+Date: Sun, 28 Mar 2021 10:31:12 -0500
+Subject: [PATCH 1/2] Remove impure smbd search path
+
+---
+ src/core/ksambashare.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/ksambashare.cpp b/src/core/ksambashare.cpp
+index e810ce4..7cfb4e6 100644
+--- a/src/core/ksambashare.cpp
++++ b/src/core/ksambashare.cpp
+@@ -61,7 +61,7 @@ KSambaSharePrivate::~KSambaSharePrivate()
+ bool KSambaSharePrivate::isSambaInstalled()
+ {
+     const bool daemonExists =
+-        !QStandardPaths::findExecutable(QStringLiteral("smbd"), {QStringLiteral("/usr/sbin/"), QStringLiteral("/usr/local/sbin/")}).isEmpty();
++        !QStandardPaths::findExecutable(QStringLiteral("smbd")).isEmpty();
+     if (!daemonExists) {
+         qCDebug(KIO_CORE_SAMBASHARE) << "KSambaShare: Could not find smbd";
+     }
+-- 
+2.30.1
+
diff --git a/nixpkgs/pkgs/kde/frameworks/kio/default.nix b/nixpkgs/pkgs/kde/frameworks/kio/default.nix
new file mode 100644
index 000000000000..03c2da9e0f5a
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kio/default.nix
@@ -0,0 +1,18 @@
+{
+  mkKdeDerivation,
+  qt5compat,
+  qttools,
+  acl,
+  attr,
+}:
+mkKdeDerivation {
+  pname = "kio";
+
+  patches = [
+    # Remove hardcoded smbd search path
+    # FIXME(later): discuss with upstream?
+    ./0001-Remove-impure-smbd-search-path.patch
+  ];
+
+  extraBuildInputs = [qt5compat qttools acl attr];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kirigami/default.nix b/nixpkgs/pkgs/kde/frameworks/kirigami/default.nix
new file mode 100644
index 000000000000..ee33f2e7b81c
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kirigami/default.nix
@@ -0,0 +1,14 @@
+{
+  mkKdeDerivation,
+  qtsvg,
+  qttools,
+  qtdeclarative,
+  qt5compat,
+}:
+mkKdeDerivation {
+  pname = "kirigami";
+
+  extraNativeBuildInputs = [qtsvg qttools];
+  extraBuildInputs = [qtdeclarative];
+  extraPropagatedBuildInputs = [qt5compat];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kitemmodels/default.nix b/nixpkgs/pkgs/kde/frameworks/kitemmodels/default.nix
new file mode 100644
index 000000000000..22476d21c4e4
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kitemmodels/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "kitemmodels";
+
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kitemviews/default.nix b/nixpkgs/pkgs/kde/frameworks/kitemviews/default.nix
new file mode 100644
index 000000000000..b9831f05ea99
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kitemviews/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kitemviews";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kjobwidgets/default.nix b/nixpkgs/pkgs/kde/frameworks/kjobwidgets/default.nix
new file mode 100644
index 000000000000..27e9720d84e1
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kjobwidgets/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kjobwidgets";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/knewstuff/default.nix b/nixpkgs/pkgs/kde/frameworks/knewstuff/default.nix
new file mode 100644
index 000000000000..934167daf055
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/knewstuff/default.nix
@@ -0,0 +1,16 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  qttools,
+  kcmutils,
+}:
+mkKdeDerivation {
+  pname = "knewstuff";
+
+  # Late resolve knsrcdir so other things install to their own prefix
+  # FIXME(later): upstream
+  patches = [./delay-resolving-knsrcdir.patch];
+
+  extraBuildInputs = [qtdeclarative qttools];
+  extraPropagatedBuildInputs = [kcmutils];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/knewstuff/delay-resolving-knsrcdir.patch b/nixpkgs/pkgs/kde/frameworks/knewstuff/delay-resolving-knsrcdir.patch
new file mode 100644
index 000000000000..15f85aa422fe
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/knewstuff/delay-resolving-knsrcdir.patch
@@ -0,0 +1,14 @@
+diff --git a/KF6NewStuffCoreConfig.cmake.in b/KF6NewStuffCoreConfig.cmake.in
+index d70f7132..f75e9fce 100644
+--- a/KF6NewStuffCoreConfig.cmake.in
++++ b/KF6NewStuffCoreConfig.cmake.in
+@@ -20,7 +20,7 @@ if (NOT @BUILD_SHARED_LIBS@)
+     endif()
+ endif()
+
+-set(KDE_INSTALL_KNSRCDIR "@KDE_INSTALL_DATADIR@/knsrcfiles")
++set(KDE_INSTALL_KNSRCDIR "${KDE_INSTALL_DATADIR}/knsrcfiles")
+
+ include("${CMAKE_CURRENT_LIST_DIR}/KF6NewStuffCoreTargets.cmake")
+ @PACKAGE_INCLUDE_CORE_QCHTARGETS@
+ 
\ No newline at end of file
diff --git a/nixpkgs/pkgs/kde/frameworks/knotifications/default.nix b/nixpkgs/pkgs/kde/frameworks/knotifications/default.nix
new file mode 100644
index 000000000000..232d4469f0e6
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/knotifications/default.nix
@@ -0,0 +1,12 @@
+{
+  mkKdeDerivation,
+  qttools,
+  qtdeclarative,
+  libcanberra,
+}:
+mkKdeDerivation {
+  pname = "knotifications";
+
+  extraNativeBuildInputs = [qttools];
+  extraBuildInputs = [qtdeclarative libcanberra];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/knotifyconfig/default.nix b/nixpkgs/pkgs/kde/frameworks/knotifyconfig/default.nix
new file mode 100644
index 000000000000..9c778a322b67
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/knotifyconfig/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  libcanberra,
+}:
+mkKdeDerivation {
+  pname = "knotifyconfig";
+
+  extraBuildInputs = [libcanberra];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kpackage/default.nix b/nixpkgs/pkgs/kde/frameworks/kpackage/default.nix
new file mode 100644
index 000000000000..8f99e10047c0
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kpackage/default.nix
@@ -0,0 +1,8 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kpackage";
+
+  # Follow symlinks when resolving packages
+  # FIXME(later): upstream
+  patches = [./follow-symlinks.patch];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kpackage/follow-symlinks.patch b/nixpkgs/pkgs/kde/frameworks/kpackage/follow-symlinks.patch
new file mode 100644
index 000000000000..8f0af89e1666
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kpackage/follow-symlinks.patch
@@ -0,0 +1,13 @@
+diff --git a/src/kpackage/packageloader.cpp b/src/kpackage/packageloader.cpp
+index 9dbd1f6..c50a6e5 100644
+--- a/src/kpackage/packageloader.cpp
++++ b/src/kpackage/packageloader.cpp
+@@ -128,7 +128,7 @@ QList<KPluginMetaData> PackageLoader::listPackages(const QString &packageFormat,
+     }
+
+     for (auto const &plugindir : std::as_const(paths)) {
+-        QDirIterator it(plugindir, QStringList{QStringLiteral("metadata.json")}, QDir::Files, QDirIterator::Subdirectories);
++        QDirIterator it(plugindir, QStringList{QStringLiteral("metadata.json")}, QDir::Files, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+         std::unordered_set<QString> dirs;
+         while (it.hasNext()) {
+             it.next();
diff --git a/nixpkgs/pkgs/kde/frameworks/kparts/default.nix b/nixpkgs/pkgs/kde/frameworks/kparts/default.nix
new file mode 100644
index 000000000000..547e8b1b016e
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kparts/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kparts";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kpeople/default.nix b/nixpkgs/pkgs/kde/frameworks/kpeople/default.nix
new file mode 100644
index 000000000000..18d56704c2d8
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kpeople/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "kpeople";
+
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kplotting/default.nix b/nixpkgs/pkgs/kde/frameworks/kplotting/default.nix
new file mode 100644
index 000000000000..b23c198fd879
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kplotting/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kplotting";
+
+  extraBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kpty/default.nix b/nixpkgs/pkgs/kde/frameworks/kpty/default.nix
new file mode 100644
index 000000000000..d60c2a5665f2
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kpty/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kpty";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kquickcharts/default.nix b/nixpkgs/pkgs/kde/frameworks/kquickcharts/default.nix
new file mode 100644
index 000000000000..305df6000403
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kquickcharts/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "kquickcharts";
+
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/krunner/default.nix b/nixpkgs/pkgs/kde/frameworks/krunner/default.nix
new file mode 100644
index 000000000000..f817c1560c26
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/krunner/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  plasma-activities,
+}:
+mkKdeDerivation {
+  pname = "krunner";
+
+  extraBuildInputs = [plasma-activities];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kservice/default.nix b/nixpkgs/pkgs/kde/frameworks/kservice/default.nix
new file mode 100644
index 000000000000..3da4fd1fdd75
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kservice/default.nix
@@ -0,0 +1,10 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kservice";
+
+  patches = [
+    # follow symlinks when generating sycoca
+    # FIXME(later): upstream
+    ./qdiriterator-follow-symlinks.patch
+  ];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kservice/qdiriterator-follow-symlinks.patch b/nixpkgs/pkgs/kde/frameworks/kservice/qdiriterator-follow-symlinks.patch
new file mode 100644
index 000000000000..fdd8b4d81a18
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kservice/qdiriterator-follow-symlinks.patch
@@ -0,0 +1,13 @@
+diff --git a/src/sycoca/kbuildsycoca.cpp b/src/sycoca/kbuildsycoca.cpp
+index b125299..0682b90 100644
+--- a/src/sycoca/kbuildsycoca.cpp
++++ b/src/sycoca/kbuildsycoca.cpp
+@@ -207,7 +207,7 @@ bool KBuildSycoca::build()
+         const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, m_resourceSubdir, QStandardPaths::LocateDirectory);
+         qCDebug(SYCOCA) << "Looking for subdir" << m_resourceSubdir << "=>" << dirs;
+         for (const QString &dir : dirs) {
+-            QDirIterator it(dir, QDirIterator::Subdirectories);
++            QDirIterator it(dir, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+             while (it.hasNext()) {
+                 const QString filePath = it.next();
+                 Q_ASSERT(filePath.startsWith(dir)); // due to the line below...
diff --git a/nixpkgs/pkgs/kde/frameworks/kstatusnotifieritem/default.nix b/nixpkgs/pkgs/kde/frameworks/kstatusnotifieritem/default.nix
new file mode 100644
index 000000000000..bc3b255caaeb
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kstatusnotifieritem/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kstatusnotifieritem";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/ksvg/default.nix b/nixpkgs/pkgs/kde/frameworks/ksvg/default.nix
new file mode 100644
index 000000000000..82dbce5c0829
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/ksvg/default.nix
@@ -0,0 +1,10 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  qtsvg,
+}:
+mkKdeDerivation {
+  pname = "ksvg";
+
+  extraBuildInputs = [qtdeclarative qtsvg];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/ktexteditor/default.nix b/nixpkgs/pkgs/kde/frameworks/ktexteditor/default.nix
new file mode 100644
index 000000000000..9a666c4e6a61
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/ktexteditor/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  qtspeech,
+  editorconfig-core-c,
+}:
+mkKdeDerivation {
+  pname = "ktexteditor";
+
+  extraBuildInputs = [qtdeclarative qtspeech editorconfig-core-c];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/ktexttemplate/default.nix b/nixpkgs/pkgs/kde/frameworks/ktexttemplate/default.nix
new file mode 100644
index 000000000000..673a10863ac6
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/ktexttemplate/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+}:
+mkKdeDerivation {
+  pname = "ktexttemplate";
+
+  extraBuildInputs = [qtdeclarative];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/ktextwidgets/default.nix b/nixpkgs/pkgs/kde/frameworks/ktextwidgets/default.nix
new file mode 100644
index 000000000000..a90de215c598
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/ktextwidgets/default.nix
@@ -0,0 +1,13 @@
+{
+  mkKdeDerivation,
+  qtspeech,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "ktextwidgets";
+
+  extraBuildInputs = [
+    qtspeech
+    qttools
+  ];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kunitconversion/default.nix b/nixpkgs/pkgs/kde/frameworks/kunitconversion/default.nix
new file mode 100644
index 000000000000..1d7cb52566d4
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kunitconversion/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "kunitconversion";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kuserfeedback/default.nix b/nixpkgs/pkgs/kde/frameworks/kuserfeedback/default.nix
new file mode 100644
index 000000000000..979362e6bfb8
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kuserfeedback/default.nix
@@ -0,0 +1,12 @@
+{
+  mkKdeDerivation,
+  qttools,
+  qtsvg,
+}:
+mkKdeDerivation {
+  pname = "kuserfeedback";
+
+  # Disable server-side stuff we don't care about
+  extraCmakeFlags = ["-DENABLE_CONSOLE=0" "-DENABLE_CLI=0"];
+  extraNativeBuildInputs = [qttools qtsvg];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kwallet/default.nix b/nixpkgs/pkgs/kde/frameworks/kwallet/default.nix
new file mode 100644
index 000000000000..3fffce1f3068
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kwallet/default.nix
@@ -0,0 +1,10 @@
+{
+  mkKdeDerivation,
+  libgcrypt,
+  kdoctools,
+}:
+mkKdeDerivation {
+  pname = "kwallet";
+
+  extraBuildInputs = [libgcrypt kdoctools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kwidgetsaddons/default.nix b/nixpkgs/pkgs/kde/frameworks/kwidgetsaddons/default.nix
new file mode 100644
index 000000000000..09dfb3228d05
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kwidgetsaddons/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kwidgetsaddons";
+
+  extraNativeBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kwindowsystem/default.nix b/nixpkgs/pkgs/kde/frameworks/kwindowsystem/default.nix
new file mode 100644
index 000000000000..711638cb106c
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kwindowsystem/default.nix
@@ -0,0 +1,14 @@
+{
+  mkKdeDerivation,
+  qttools,
+  qtdeclarative,
+  qtwayland,
+  pkg-config,
+  wayland,
+}:
+mkKdeDerivation {
+  pname = "kwindowsystem";
+
+  extraNativeBuildInputs = [qttools pkg-config];
+  extraBuildInputs = [qtdeclarative qtwayland wayland];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/kxmlgui/default.nix b/nixpkgs/pkgs/kde/frameworks/kxmlgui/default.nix
new file mode 100644
index 000000000000..64734cde5af6
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/kxmlgui/default.nix
@@ -0,0 +1,9 @@
+{
+  mkKdeDerivation,
+  qttools,
+}:
+mkKdeDerivation {
+  pname = "kxmlgui";
+
+  extraBuildInputs = [qttools];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/modemmanager-qt/default.nix b/nixpkgs/pkgs/kde/frameworks/modemmanager-qt/default.nix
new file mode 100644
index 000000000000..34a6f1954842
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/modemmanager-qt/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  pkg-config,
+  modemmanager,
+}:
+mkKdeDerivation {
+  pname = "modemmanager-qt";
+
+  extraNativeBuildInputs = [pkg-config];
+  extraPropagatedBuildInputs = [modemmanager];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/networkmanager-qt/default.nix b/nixpkgs/pkgs/kde/frameworks/networkmanager-qt/default.nix
new file mode 100644
index 000000000000..bdec89a9ca1d
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/networkmanager-qt/default.nix
@@ -0,0 +1,13 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  pkg-config,
+  networkmanager,
+}:
+mkKdeDerivation {
+  pname = "networkmanager-qt";
+
+  extraNativeBuildInputs = [pkg-config];
+  extraBuildInputs = [qtdeclarative];
+  extraPropagatedBuildInputs = [networkmanager];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/prison/default.nix b/nixpkgs/pkgs/kde/frameworks/prison/default.nix
new file mode 100644
index 000000000000..6411be8a34cf
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/prison/default.nix
@@ -0,0 +1,12 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  qtmultimedia,
+  qrencode,
+  libdmtx,
+}:
+mkKdeDerivation {
+  pname = "prison";
+
+  extraBuildInputs = [qtdeclarative qtmultimedia qrencode libdmtx];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/purpose/default.nix b/nixpkgs/pkgs/kde/frameworks/purpose/default.nix
new file mode 100644
index 000000000000..8bf85ae19afe
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/purpose/default.nix
@@ -0,0 +1,13 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  kaccounts-integration,
+  kdeclarative,
+  prison,
+}:
+mkKdeDerivation {
+  pname = "purpose";
+
+  extraBuildInputs = [qtdeclarative];
+  extraPropagatedBuildInputs = [kaccounts-integration kdeclarative prison];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/qqc2-desktop-style/default.nix b/nixpkgs/pkgs/kde/frameworks/qqc2-desktop-style/default.nix
new file mode 100644
index 000000000000..13d7c9c92153
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/qqc2-desktop-style/default.nix
@@ -0,0 +1,11 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  sonnet,
+}:
+mkKdeDerivation {
+  pname = "qqc2-desktop-style";
+
+  extraBuildInputs = [qtdeclarative];
+  extraPropagatedBuildInputs = [sonnet];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/solid/default.nix b/nixpkgs/pkgs/kde/frameworks/solid/default.nix
new file mode 100644
index 000000000000..941422848058
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/solid/default.nix
@@ -0,0 +1,16 @@
+{
+  mkKdeDerivation,
+  qttools,
+  bison,
+  flex,
+  libimobiledevice,
+}:
+mkKdeDerivation {
+  pname = "solid";
+
+  # Also search /run/wrappers for mount/umount
+  patches = [./fix-search-path.patch];
+
+  extraNativeBuildInputs = [qttools bison flex];
+  extraBuildInputs = [libimobiledevice];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/solid/fix-search-path.patch b/nixpkgs/pkgs/kde/frameworks/solid/fix-search-path.patch
new file mode 100644
index 000000000000..010aa1f3efcc
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/solid/fix-search-path.patch
@@ -0,0 +1,17 @@
+diff --git a/src/solid/devices/backends/fstab/fstabhandling.cpp b/src/solid/devices/backends/fstab/fstabhandling.cpp
+index ac2a628..7ee46cc 100644
+--- a/src/solid/devices/backends/fstab/fstabhandling.cpp
++++ b/src/solid/devices/backends/fstab/fstabhandling.cpp
+@@ -275,7 +275,11 @@ bool Solid::Backends::Fstab::FstabHandling::callSystemCommand(const QString &com
+                                                               const QObject *receiver,
+                                                               std::function<void(QProcess *)> callback)
+ {
+-    static const QStringList searchPaths{QStringLiteral("/sbin"), QStringLiteral("/bin"), QStringLiteral("/usr/sbin"), QStringLiteral("/usr/bin")};
++    static const QStringList searchPaths{QStringLiteral("/run/wrappers/bin"),
++                                         QStringLiteral("/sbin"),
++                                         QStringLiteral("/bin"),
++                                         QStringLiteral("/usr/sbin"),
++                                         QStringLiteral("/usr/bin")};
+     static const QString joinedPaths = searchPaths.join(QLatin1Char(':'));
+     const QString exec = QStandardPaths::findExecutable(commandName, searchPaths);
+     if (exec.isEmpty()) {
diff --git a/nixpkgs/pkgs/kde/frameworks/sonnet/default.nix b/nixpkgs/pkgs/kde/frameworks/sonnet/default.nix
new file mode 100644
index 000000000000..d0775de9bb18
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/sonnet/default.nix
@@ -0,0 +1,14 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  qttools,
+  pkg-config,
+  aspell,
+  hunspell,
+}:
+mkKdeDerivation {
+  pname = "sonnet";
+
+  extraNativeBuildInputs = [qttools pkg-config];
+  extraBuildInputs = [qtdeclarative aspell hunspell];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/syndication/default.nix b/nixpkgs/pkgs/kde/frameworks/syndication/default.nix
new file mode 100644
index 000000000000..cec50a6777f7
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/syndication/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "syndication";
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/syntax-highlighting/default.nix b/nixpkgs/pkgs/kde/frameworks/syntax-highlighting/default.nix
new file mode 100644
index 000000000000..4ce448e937d5
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/syntax-highlighting/default.nix
@@ -0,0 +1,12 @@
+{
+  mkKdeDerivation,
+  qtdeclarative,
+  qttools,
+  perl,
+}:
+mkKdeDerivation {
+  pname = "syntax-highlighting";
+
+  extraBuildInputs = [qtdeclarative];
+  extraNativeBuildInputs = [qttools perl];
+}
diff --git a/nixpkgs/pkgs/kde/frameworks/threadweaver/default.nix b/nixpkgs/pkgs/kde/frameworks/threadweaver/default.nix
new file mode 100644
index 000000000000..9da07c2af2ac
--- /dev/null
+++ b/nixpkgs/pkgs/kde/frameworks/threadweaver/default.nix
@@ -0,0 +1,4 @@
+{mkKdeDerivation}:
+mkKdeDerivation {
+  pname = "threadweaver";
+}