3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch
2018-06-12 14:30:48 +02:00

1080 lines
40 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff --git a/sddm-theme/theme.conf.cmake b/sddm-theme/theme.conf.cmake
index 69d30705..52e91028 100644
--- a/sddm-theme/theme.conf.cmake
+++ b/sddm-theme/theme.conf.cmake
@@ -1,4 +1,4 @@
[General]
type=image
color=#1d99f3
-background=${CMAKE_INSTALL_PREFIX}/${WALLPAPER_INSTALL_DIR}/Next/contents/images/3200x2000.png
+background=${NIXPKGS_WALLPAPER_INSTALL_DIR}/Next/contents/images/3200x2000.png
diff --git a/startkde/CMakeLists.txt b/startkde/CMakeLists.txt
index cb75aeca..247db953 100644
--- a/startkde/CMakeLists.txt
+++ b/startkde/CMakeLists.txt
@@ -3,11 +3,6 @@ add_subdirectory(kstartupconfig)
add_subdirectory(ksyncdbusenv)
add_subdirectory(waitforname)
-#FIXME: reconsider, looks fishy
-if(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr")
- set(EXPORT_XCURSOR_PATH "XCURSOR_PATH=${KDE_INSTALL_FULL_DATAROOTDIR}/icons:$XCURSOR_PATH\":~/.icons:/usr/share/icons:/usr/share/pixmaps:/usr/X11R6/lib/X11/icons\"; export XCURSOR_PATH")
-endif()
-
configure_file(startkde.cmake ${CMAKE_CURRENT_BINARY_DIR}/startkde @ONLY)
configure_file(startplasmacompositor.cmake ${CMAKE_CURRENT_BINARY_DIR}/startplasmacompositor @ONLY)
configure_file(startplasma.cmake ${CMAKE_CURRENT_BINARY_DIR}/startplasma @ONLY)
diff --git a/startkde/kstartupconfig/kstartupconfig.cpp b/startkde/kstartupconfig/kstartupconfig.cpp
index 493218ea..d507aa55 100644
--- a/startkde/kstartupconfig/kstartupconfig.cpp
+++ b/startkde/kstartupconfig/kstartupconfig.cpp
@@ -147,5 +147,5 @@ int main()
fclose( keys );
fclose( config );
doit:
- return system( "kdostartupconfig5" );
+ return system( NIXPKGS_KDOSTARTUPCONFIG5 );
}
diff --git a/startkde/startkde.cmake b/startkde/startkde.cmake
index f9e2e429..0a4267a9 100644
--- a/startkde/startkde.cmake
+++ b/startkde/startkde.cmake
@@ -1,22 +1,31 @@
#!/bin/sh
#
-# DEFAULT Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
+# NIXPKGS KDE STARTUP SCRIPT ( @PROJECT_VERSION@ )
#
+if test "x$1" = x--failsafe; then
+ KDE_FAILSAFE=1 # General failsafe flag
+ KWIN_COMPOSE=N # Disable KWin's compositing
+ QT_XCB_FORCE_SOFTWARE_OPENGL=1
+ export KWIN_COMPOSE KDE_FAILSAFE QT_XCB_FORCE_SOFTWARE_OPENGL
+fi
+
# When the X server dies we get a HUP signal from xinit. We must ignore it
# because we still need to do some cleanup.
trap 'echo GOT SIGHUP' HUP
-# Check if a Plasma session already is running and whether it's possible to connect to X
-kcheckrunning
+# we have to unset this for Darwin since it will screw up KDE's dynamic-loading
+unset DYLD_FORCE_FLAT_NAMESPACE
+
+# Check if a KDE session already is running and whether it's possible to connect to X
+@CMAKE_INSTALL_FULL_BINDIR@/kcheckrunning
kcheckrunning_result=$?
-if test $kcheckrunning_result -eq 0 ; then
- echo "Plasma seems to be already running on this display."
- xmessage -geometry 500x100 "Plasma seems to be already running on this display." > /dev/null 2>/dev/null
- exit 1
-elif test $kcheckrunning_result -eq 2 ; then
- echo "\$DISPLAY is not set or cannot connect to the X server."
- exit 1
+if [ $kcheckrunning_result -eq 0 ]; then
+ echo "KDE seems to be already running on this display."
+ exit 1
+elif [ $kcheckrunning_result -eq 2 ]; then
+ echo "\$DISPLAY is not set or cannot connect to the X server."
+ exit 1
fi
# Boot sequence:
@@ -33,61 +42,133 @@ fi
#
# * Then ksmserver is started which takes control of the rest of the startup sequence
-if [ ${XDG_CONFIG_HOME} ]; then
- configDir=$XDG_CONFIG_HOME;
-else
- configDir=${HOME}/.config; #this is the default, http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
+@NIXPKGS_MKDIR@ -p "$XDG_CONFIG_HOME"
+
+# The KDE icon cache is supposed to update itself
+# automatically, but it uses the timestamp on the icon
+# theme directory as a trigger. Since in Nix the
+# timestamp is always the same, this doesn't work. So as
+# a workaround, nuke the icon cache on login. This isn't
+# perfect, since it may require logging out after
+# installing new applications to update the cache.
+# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
+rm -fv $HOME/.cache/icon-cache.kcache
+
+# Qt writes a weird libraryPath line to
+# ~/.config/Trolltech.conf that causes the KDE plugin
+# paths of previous KDE invocations to be searched.
+# Obviously using mismatching KDE libraries is potentially
+# disastrous, so here we nuke references to the Nix store
+# in Trolltech.conf. A better solution would be to stop
+# Qt from doing this wackiness in the first place.
+if [ -e $XDG_CONFIG_HOME/Trolltech.conf ]; then
+ @NIXPKGS_SED@ -e '/nix\\store\|nix\/store/ d' -i $XDG_CONFIG_HOME/Trolltech.conf
fi
sysConfigDirs=${XDG_CONFIG_DIRS:-/etc/xdg}
-# We need to create config folder so we can write startupconfigkeys
-mkdir -p $configDir
+@NIXPKGS_KBUILDSYCOCA5@
+
+# Set the default GTK 2 theme
+gtkrc2="$HOME/.gtkrc-2.0"
+breeze_gtkrc2="/run/current-system/sw/share/themes/Breeze/gtk-2.0/gtkrc"
+if ! [ -e "$gtkrc2" ] && [ -e "$breeze_gtkrc2" ]; then
+ cat >"$gtkrc2" <<EOF
+# Default GTK+ 2 config for NixOS KDE 5
+include "$breeze_gtkrc2"
+style "user-font"
+{
+ font_name="Sans Serif Regular"
+}
+widget_class "*" style "user-font"
+gtk-font-name="Sans Serif Regular 10"
+gtk-theme-name="Breeze"
+gtk-icon-theme-name="breeze"
+gtk-fallback-icon-theme="hicolor"
+gtk-cursor-theme-name="breeze_cursors"
+gtk-toolbar-style=GTK_TOOLBAR_ICONS
+gtk-menu-images=1
+gtk-button-images=1
+EOF
+fi
+
+# Set the default GTK 3 theme
+gtk3_settings="$XDG_CONFIG_HOME/gtk-3.0/settings.ini"
+breeze_gtk3="/run/current-system/sw/share/themes/Breeze/gtk-3.0"
+if ! [ -e "$gtk3_settings" ] && [ -e "$breeze_gtk" ]; then
+ mkdir -p $(dirname "$gtk3_settings")
+ cat >"$gtk3_settings" <<EOF
+[Settings]
+gtk-font-name=Sans Serif Regular 10
+gtk-theme-name=Breeze
+gtk-icon-theme-name=breeze
+gtk-fallback-icon-theme=hicolor
+gtk-cursor-theme-name=breeze_cursors
+gtk-toolbar-style=GTK_TOOLBAR_ICONS
+gtk-menu-images=1
+gtk-button-images=1
+EOF
+fi
+
+kcminputrc="$XDG_CONFIG_HOME/kcminputrc"
+if ! [ -e "$kcminputrc" ]; then
+ cat >"$kcminputrc" <<EOF
+[Mouse]
+cursorTheme=breeze_cursors
+cursorSize=0
+EOF
+fi
#This is basically setting defaults so we can use them with kstartupconfig5
-cat >$configDir/startupconfigkeys <<EOF
+cat >"$XDG_CONFIG_HOME/startupconfigkeys" <<EOF
kcminputrc Mouse cursorTheme 'breeze_cursors'
kcminputrc Mouse cursorSize ''
-ksplashrc KSplash Theme Breeze
+ksplashrc KSplash Theme org.kde.breeze.desktop
ksplashrc KSplash Engine KSplashQML
kdeglobals KScreen ScreenScaleFactors ''
kcmfonts General forceFontDPI 0
+kcmfonts General dontChangeAASettings true
EOF
# preload the user's locale on first start
-plasmalocalerc=$configDir/plasma-localerc
-test -f $plasmalocalerc || {
-cat >$plasmalocalerc <<EOF
+plasmalocalerc="$XDG_CONFIG_HOME/plasma-localerc"
+if ! [ -f "$plasmalocalerc" ]; then
+ cat >"$plasmalocalerc" <<EOF
[Formats]
LANG=$LANG
EOF
-}
+fi
# export LC_* variables set by kcmshell5 formats into environment
# so it can be picked up by QLocale and friends.
-exportformatssettings=$configDir/plasma-locale-settings.sh
-test -f $exportformatssettings && {
- . $exportformatssettings
-}
+exportformatssettings="$XDG_CONFIG_HOME/plasma-locale-settings.sh"
+if [ -r "$exportformatssettings" ]; then
+ . "$exportformatssettings"
+fi
# Write a default kdeglobals file to set up the font
-kdeglobalsfile=$configDir/kdeglobals
-test -f $kdeglobalsfile || {
-cat >$kdeglobalsfile <<EOF
+kdeglobalsfile="$XDG_CONFIG_HOME/kdeglobals"
+if ! [ -f "$kdeglobalsfile" ]; then
+ cat >"$kdeglobalsfile" <<EOF
[General]
-XftAntialias=true
-XftHintStyle=hintmedium
-XftSubPixel=none
+fixed=Monospace,10,-1,5,50,0,0,0,0,0,Regular
+font=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
+menuFont=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
+smallestReadableFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
+toolBarFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
+
+[WM]
+activeFont=Noto Sans,12,-1,5,50,0,0,0,0,0,Bold
EOF
-}
+fi
-kstartupconfig5
-returncode=$?
-if test $returncode -ne 0; then
- xmessage -geometry 500x100 "kstartupconfig5 does not exist or fails. The error code is $returncode. Check your installation."
+if ! @CMAKE_INSTALL_FULL_BINDIR@/kstartupconfig5; then
+ echo "kstartupconfig5 does not exist or fails. The error code is $returncode. Check your installation." 1>&2
exit 1
fi
-[ -r $configDir/startupconfig ] && . $configDir/startupconfig
-
+if [ -r "$XDG_CONFIG_HOME/startupconfig" ]; then
+ . "$XDG_CONFIG_HOME/startupconfig"
+fi
#Do not sync any of this section with the wayland versions as there scale factors are
#sent properly over wl_output
@@ -99,26 +180,33 @@ fi
#otherwise apps that manually opt in for high DPI get auto scaled by the developer AND manually scaled by us
export QT_AUTO_SCREEN_SCALE_FACTOR=0
+#Set the QtQuickControls style to our own: for QtQuickControls1
+#it will fall back to Desktop, while it will use our own org.kde.desktop
+#for QtQuickControlsStyle and Kirigami
+export QT_QUICK_CONTROLS_STYLE=org.kde.desktop
+
+XCURSOR_PATH=~/.icons
+IFS=":" read -r -a xdgDirs <<< "$XDG_DATA_DIRS"
+for xdgDir in "${xdgDirs[@]}"; do
+ XCURSOR_PATH="$XCURSOR_PATH:$xdgDir/icons"
+done
+export XCURSOR_PATH
+
# XCursor mouse theme needs to be applied here to work even for kded or ksmserver
if test -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ; then
- @EXPORT_XCURSOR_PATH@
-
kapplymousetheme "$kcminputrc_mouse_cursortheme" "$kcminputrc_mouse_cursorsize"
- if test $? -eq 10; then
- XCURSOR_THEME=breeze_cursors
- export XCURSOR_THEME
- elif test -n "$kcminputrc_mouse_cursortheme"; then
- XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
- export XCURSOR_THEME
+ if [ $? -eq 10 ]; then
+ export XCURSOR_THEME=breeze_cursors
+ elif [ -n "$kcminputrc_mouse_cursortheme" ]; then
+ export XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
fi
- if test -n "$kcminputrc_mouse_cursorsize"; then
- XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
- export XCURSOR_SIZE
+ if [ -n "$kcminputrc_mouse_cursorsize" ]; then
+ export XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
fi
fi
-if test "$kcmfonts_general_forcefontdpi" -ne 0; then
- xrdb -quiet -merge -nocpp <<EOF
+if [ "${kcmfonts_general_forcefontdpi:-0}" -ne 0 ]; then
+ @NIXPKGS_XRDB@ -quiet -merge -nocpp <<EOF
Xft.dpi: $kcmfonts_general_forcefontdpi
EOF
fi
@@ -127,11 +215,11 @@ dl=$DESKTOP_LOCKED
unset DESKTOP_LOCKED # Don't want it in the environment
ksplash_pid=
-if test -z "$dl"; then
+if [ -z "$dl" ]; then
# the splashscreen and progress indicator
case "$ksplashrc_ksplash_engine" in
KSplashQML)
- ksplash_pid=`ksplashqml "${ksplashrc_ksplash_theme}" --pid`
+ ksplash_pid=$(@CMAKE_INSTALL_FULL_BINDIR@/ksplashqml "${ksplashrc_ksplash_theme}" --pid)
;;
None)
;;
@@ -140,69 +228,6 @@ if test -z "$dl"; then
esac
fi
-# Source scripts found in <config locations>/plasma-workspace/env/*.sh
-# (where <config locations> correspond to the system and user's configuration
-# directory.
-#
-# This is where you can define environment variables that will be available to
-# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
-# or eval `gpg-agent --daemon`.
-# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
-#
-# (see end of this file).
-# For anything else (that doesn't set env vars, or that needs a window manager),
-# better use the Autostart folder.
-
-scriptpath=`echo "$configDir:$sysConfigDirs" | tr ':' '\n'`
-
-for prefix in `echo $scriptpath`; do
- for file in "$prefix"/plasma-workspace/env/*.sh; do
- test -r "$file" && . "$file" || true
- done
-done
-
-# Activate the kde font directories.
-#
-# There are 4 directories that may be used for supplying fonts for KDE.
-#
-# There are two system directories. These belong to the administrator.
-# There are two user directories, where the user may add her own fonts.
-#
-# The 'override' versions are for fonts that should come first in the list,
-# i.e. if you have a font in your 'override' directory, it will be used in
-# preference to any other.
-#
-# The preference order looks like this:
-# user override, system override, X, user, system
-#
-# Where X is the original font database that was set up before this script
-# runs.
-
-usr_odir=$HOME/.fonts/kde-override
-usr_fdir=$HOME/.fonts
-
-if test -n "$KDEDIRS"; then
- kdedirs_first=`echo "$KDEDIRS"|sed -e 's/:.*//'`
- sys_odir=$kdedirs_first/share/fonts/override
- sys_fdir=$kdedirs_first/share/fonts
-else
- sys_odir=$KDEDIR/share/fonts/override
- sys_fdir=$KDEDIR/share/fonts
-fi
-
-# We run mkfontdir on the user's font dirs (if we have permission) to pick
-# up any new fonts they may have installed. If mkfontdir fails, we still
-# add the user's dirs to the font path, as they might simply have been made
-# read-only by the administrator, for whatever reason.
-
-test -d "$sys_odir" && xset +fp "$sys_odir"
-test -d "$usr_odir" && (mkfontdir "$usr_odir" ; xset +fp "$usr_odir")
-test -d "$usr_fdir" && (mkfontdir "$usr_fdir" ; xset fp+ "$usr_fdir")
-test -d "$sys_fdir" && xset fp+ "$sys_fdir"
-
-# Ask X11 to rebuild its font list.
-xset fp rehash
-
# Set a left cursor instead of the standard X11 "X" cursor, since I've heard
# from some users that they're confused and don't know what to do. This is
# especially necessary on slow machines, where starting KDE takes one or two
@@ -257,44 +282,65 @@ export XDG_DATA_DIRS
#
KDE_FULL_SESSION=true
export KDE_FULL_SESSION
-xprop -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
+@NIXPKGS_XPROP@ -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
KDE_SESSION_VERSION=5
export KDE_SESSION_VERSION
-xprop -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
+@NIXPKGS_XPROP@ -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
-KDE_SESSION_UID=`id -ru`
+KDE_SESSION_UID=$(@NIXPKGS_ID@ -ru)
export KDE_SESSION_UID
XDG_CURRENT_DESKTOP=KDE
export XDG_CURRENT_DESKTOP
+# Enforce xcb QPA. Helps switching between Wayland and X sessions.
+export QT_QPA_PLATFORM=xcb
+
+# Source scripts found in <config locations>/plasma-workspace/env/*.sh
+# (where <config locations> correspond to the system and user's configuration
+# directories, as identified by Qt's qtpaths, e.g. $HOME/.config
+# and /etc/xdg/ on Linux)
+#
+# This is where you can define environment variables that will be available to
+# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
+# or eval `gpg-agent --daemon`.
+# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
+#
+# (see end of this file).
+# For anything else (that doesn't set env vars, or that needs a window manager),
+# better use the Autostart folder.
+
+IFS=":" read -r -a scriptpath <<< $(@NIXPKGS_QTPATHS@ --paths GenericConfigLocation)
+# Add /env/ to the directory to locate the scripts to be sourced
+for prefix in "${scriptpath[@]}"; do
+ for file in "$prefix"/plasma-workspace/env/*.sh; do
+ if [ -r "$file" ]; then
+ . "$file"
+ fi
+ done
+done
+
# At this point all environment variables are set, let's send it to the DBus session server to update the activation environment
-if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
- dbus-update-activation-environment --systemd --all
-else
- @CMAKE_INSTALL_FULL_LIBEXECDIR@/ksyncdbusenv
-fi
-if test $? -ne 0; then
+
+if ! @NIXPKGS_DBUS_UPDATE_ACTIVATION_ENVIRONMENT@ --systemd --all; then
# Startup error
echo 'startkde: Could not sync environment to dbus.' 1>&2
test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
- xmessage -geometry 500x100 "Could not sync environment to dbus."
exit 1
fi
# We set LD_BIND_NOW to increase the efficiency of kdeinit.
# kdeinit unsets this variable before loading applications.
-LD_BIND_NOW=true @CMAKE_INSTALL_FULL_LIBEXECDIR_KF5@/start_kdeinit_wrapper --kded +kcminit_startup
+LD_BIND_NOW=true @NIXPKGS_START_KDEINIT_WRAPPER@ --kded +kcminit_startup
if test $? -ne 0; then
# Startup error
echo 'startkde: Could not start kdeinit5. Check your installation.' 1>&2
test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
- xmessage -geometry 500x100 "Could not start kdeinit5. Check your installation."
exit 1
fi
-qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
+@NIXPKGS_QDBUS@ org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
# finally, give the session control to the session manager
# see kdebase/ksmserver for the description of the rest of the startup sequence
@@ -306,34 +352,37 @@ qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
# We only check for 255 which means that the ksmserver process could not be
# started, any problems thereafter, e.g. ksmserver failing to initialize,
# will remain undetected.
-test -n "$KDEWM" && KDEWM="--windowmanager $KDEWM"
+if [ -n "$KDEWM" ]; then
+ KDEWM="--windowmanager $KDEWM"
+fi
# If the session should be locked from the start (locked autologin),
# lock now and do the rest of the KDE startup underneath the locker.
KSMSERVEROPTIONS=""
-test -n "$dl" && KSMSERVEROPTIONS=" --lockscreen"
-kwrapper5 @CMAKE_INSTALL_FULL_BINDIR@/ksmserver $KDEWM $KSMSERVEROPTIONS
+if [ -n "$dl" ]; then
+ KSMSERVEROPTIONS=" --lockscreen"
+fi
+@NIXPKGS_KWRAPPER5@ @CMAKE_INSTALL_FULL_BINDIR@/ksmserver $KDEWM $KSMSERVEROPTIONS
if test $? -eq 255; then
# Startup error
echo 'startkde: Could not start ksmserver. Check your installation.' 1>&2
test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
- xmessage -geometry 500x100 "Could not start ksmserver. Check your installation."
fi
#Anything after here is logout/shutdown
-wait_drkonqi=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Enabled --default true`
+wait_drkonqi=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Enabled --default true)
-if test x"$wait_drkonqi"x = x"true"x ; then
+if [ x"$wait_drkonqi"x = x"true"x ]; then
# wait for remaining drkonqi instances with timeout (in seconds)
- wait_drkonqi_timeout=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Timeout --default 900`
+ wait_drkonqi_timeout=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Timeout --default 900)
wait_drkonqi_counter=0
- while qdbus | grep "^[^w]*org.kde.drkonqi" > /dev/null ; do
+ while @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ -q "^[^w]*org.kde.drkonqi" ; do
sleep 5
wait_drkonqi_counter=$((wait_drkonqi_counter+5))
- if test "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ; then
+ if [ "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ]; then
# ask remaining drkonqis to die in a graceful way
- qdbus | grep 'org.kde.drkonqi-' | while read address ; do
- qdbus "$address" "/MainApplication" "quit"
+ @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ 'org.kde.drkonqi-' | while read address ; do
+ @NIXPKGS_QDBUS@ "$address" "/MainApplication" "quit"
done
break
fi
@@ -342,15 +391,17 @@ fi
echo 'startkde: Shutting down...' 1>&2
# just in case
-test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+if [ -n "$ksplash_pid" ]; then
+ kill "$ksplash_pid" 2>/dev/null
+fi
# Clean up
-kdeinit5_shutdown
+@NIXPKGS_KDEINIT5_SHUTDOWN@
unset KDE_FULL_SESSION
-xprop -root -remove KDE_FULL_SESSION
+@NIXPKGS_XPROP@ -root -remove KDE_FULL_SESSION
unset KDE_SESSION_VERSION
-xprop -root -remove KDE_SESSION_VERSION
+@NIXPKGS_XPROP@ -root -remove KDE_SESSION_VERSION
unset KDE_SESSION_UID
echo 'startkde: Done.' 1>&2
diff --git a/startkde/startplasma.cmake b/startkde/startplasma.cmake
index a5d09fa7..d42c284b 100644
--- a/startkde/startplasma.cmake
+++ b/startkde/startplasma.cmake
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# DEFAULT Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
+# NIXPKGS Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
#
# Boot sequence:
@@ -17,28 +17,26 @@
#
# * Then ksmserver is started which takes control of the rest of the startup sequence
-# We need to create config folder so we can write startupconfigkeys
-if [ ${XDG_CONFIG_HOME} ]; then
- configDir=$XDG_CONFIG_HOME;
-else
- configDir=${HOME}/.config; #this is the default, http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
+if [ -r "$XDG_CONFIG_HOME/startupconfig" ]; then
+ . "$XDG_CONFIG_HOME/startupconfig"
fi
-[ -r $configDir/startupconfig ] && . $configDir/startupconfig
-
-xrdb -quiet -merge -nocpp <<EOF
+if [ "$kcmfonts_general_forcefontdpi" -ne 0 ]; then
+ @NIXPKGS_XRDB@ -quiet -merge -nocpp <<EOF
Xft.dpi: $QT_WAYLAND_FORCE_DPI
EOF
+fi
dl=$DESKTOP_LOCKED
unset DESKTOP_LOCKED # Don't want it in the environment
ksplash_pid=
-if test -z "$dl"; then
+if [ -z "$dl" ]; then
# the splashscreen and progress indicator
case "$ksplashrc_ksplash_engine" in
KSplashQML)
- ksplash_pid=`ksplashqml "${ksplashrc_ksplash_theme}" --pid`
+ ksplash_pid=$(@CMAKE_INSTALL_FULL_BINDIR@/ksplashqml "${ksplashrc_ksplash_theme}" --pid)
;;
None)
;;
@@ -50,48 +48,6 @@ fi
#In wayland we want Plasma to use Qt's scaling
export PLASMA_USE_QT_SCALING=1
-# Activate the kde font directories.
-#
-# There are 4 directories that may be used for supplying fonts for KDE.
-#
-# There are two system directories. These belong to the administrator.
-# There are two user directories, where the user may add her own fonts.
-#
-# The 'override' versions are for fonts that should come first in the list,
-# i.e. if you have a font in your 'override' directory, it will be used in
-# preference to any other.
-#
-# The preference order looks like this:
-# user override, system override, X, user, system
-#
-# Where X is the original font database that was set up before this script
-# runs.
-
-usr_odir=$HOME/.fonts/kde-override
-usr_fdir=$HOME/.fonts
-
-if test -n "$KDEDIRS"; then
- kdedirs_first=`echo "$KDEDIRS"|sed -e 's/:.*//'`
- sys_odir=$kdedirs_first/share/fonts/override
- sys_fdir=$kdedirs_first/share/fonts
-else
- sys_odir=$KDEDIR/share/fonts/override
- sys_fdir=$KDEDIR/share/fonts
-fi
-
-# We run mkfontdir on the user's font dirs (if we have permission) to pick
-# up any new fonts they may have installed. If mkfontdir fails, we still
-# add the user's dirs to the font path, as they might simply have been made
-# read-only by the administrator, for whatever reason.
-
-test -d "$sys_odir" && xset +fp "$sys_odir"
-test -d "$usr_odir" && (mkfontdir "$usr_odir" ; xset +fp "$usr_odir")
-test -d "$usr_fdir" && (mkfontdir "$usr_fdir" ; xset fp+ "$usr_fdir")
-test -d "$sys_fdir" && xset fp+ "$sys_fdir"
-
-# Ask X11 to rebuild its font list.
-xset fp rehash
-
# Set a left cursor instead of the standard X11 "X" cursor, since I've heard
# from some users that they're confused and don't know what to do. This is
# especially necessary on slow machines, where starting KDE takes one or two
@@ -100,22 +56,13 @@ xset fp rehash
# If the user has overwritten fonts, the cursor font may be different now
# so don't move this up.
#
-xsetroot -cursor_name left_ptr
-
-# Get Ghostscript to look into user's KDE fonts dir for additional Fontmap
-if test -n "$GS_LIB" ; then
- GS_LIB=$usr_fdir:$GS_LIB
- export GS_LIB
-else
- GS_LIB=$usr_fdir
- export GS_LIB
-fi
+@NIXPKGS_XSETROOT@ -cursor_name left_ptr
echo 'startplasma: Starting up...' 1>&2
# export our session variables to the Xwayland server
-xprop -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
-xprop -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
+@NIXPKGS_XPROP@ -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
+@NIXPKGS_XPROP@ -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
# At this point all environment variables are set, let's send it to the DBus session server to update the activation environment
if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
@@ -131,16 +78,15 @@ fi
# We set LD_BIND_NOW to increase the efficiency of kdeinit.
# kdeinit unsets this variable before loading applications.
-LD_BIND_NOW=true @CMAKE_INSTALL_FULL_LIBEXECDIR_KF5@/start_kdeinit_wrapper --kded +kcminit_startup
+LD_BIND_NOW=true @NIXPKGS_START_KDEINIT_WRAPPER@ --kded +kcminit_startup
if test $? -ne 0; then
# Startup error
echo 'startplasma: Could not start kdeinit5. Check your installation.' 1>&2
test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
- xmessage -geometry 500x100 "Could not start kdeinit5. Check your installation."
exit 1
fi
-qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit
+@NIXPKGS_QDBUS@ org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit
# finally, give the session control to the session manager
# see kdebase/ksmserver for the description of the rest of the startup sequence
@@ -163,19 +109,19 @@ if test $? -eq 255; then
xmessage -geometry 500x100 "Could not start ksmserver. Check your installation."
fi
-wait_drkonqi=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Enabled --default true`
+wait_drkonqi=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Enabled --default true)
-if test x"$wait_drkonqi"x = x"true"x ; then
+if [ x"$wait_drkonqi"x = x"true"x ]; then
# wait for remaining drkonqi instances with timeout (in seconds)
- wait_drkonqi_timeout=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Timeout --default 900`
+ wait_drkonqi_timeout=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Timeout --default 900)
wait_drkonqi_counter=0
- while qdbus | grep "^[^w]*org.kde.drkonqi" > /dev/null ; do
+ while @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ -q "^[^w]*org.kde.drkonqi" ; do
sleep 5
wait_drkonqi_counter=$((wait_drkonqi_counter+5))
- if test "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ; then
+ if [ "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ]; then
# ask remaining drkonqis to die in a graceful way
- qdbus | grep 'org.kde.drkonqi-' | while read address ; do
- qdbus "$address" "/MainApplication" "quit"
+ @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ 'org.kde.drkonqi-' | while read address ; do
+ @NIXPKGS_QDBUS@ "$address" "/MainApplication" "quit"
done
break
fi
@@ -184,15 +130,17 @@ fi
echo 'startplasma: Shutting down...' 1>&2
# just in case
-test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+if [ -n "$ksplash_pid" ]; then
+ "$ksplash_pid" 2>/dev/null
+fi
# Clean up
-kdeinit5_shutdown
+@NIXPKGS_KDEINIT5_SHUTDOWN@
unset KDE_FULL_SESSION
-xprop -root -remove KDE_FULL_SESSION
+@NIXPKGS_XPROP@ -root -remove KDE_FULL_SESSION
unset KDE_SESSION_VERSION
-xprop -root -remove KDE_SESSION_VERSION
+@NIXPKGS_XPROP@ -root -remove KDE_SESSION_VERSION
unset KDE_SESSION_UID
echo 'startplasma: Done.' 1>&2
diff --git a/startkde/startplasmacompositor.cmake b/startkde/startplasmacompositor.cmake
index dd9e304d..49d456e9 100644
--- a/startkde/startplasmacompositor.cmake
+++ b/startkde/startplasmacompositor.cmake
@@ -1,118 +1,165 @@
#!/bin/sh
#
-# DEFAULT Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
+# NIXPKGS Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
#
-# We need to create config folder so we can write startupconfigkeys
-if [ ${XDG_CONFIG_HOME} ]; then
- configDir=$XDG_CONFIG_HOME;
-else
- configDir=${HOME}/.config; #this is the default, http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+# we have to unset this for Darwin since it will screw up KDE's dynamic-loading
+unset DYLD_FORCE_FLAT_NAMESPACE
+
+export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
+@NIXPKGS_MKDIR@ -p "$XDG_CONFIG_HOME"
+
+# The KDE icon cache is supposed to update itself
+# automatically, but it uses the timestamp on the icon
+# theme directory as a trigger. Since in Nix the
+# timestamp is always the same, this doesn't work. So as
+# a workaround, nuke the icon cache on login. This isn't
+# perfect, since it may require logging out after
+# installing new applications to update the cache.
+# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
+rm -fv $HOME/.cache/icon-cache.kcache
+
+# Qt writes a weird libraryPath line to
+# ~/.config/Trolltech.conf that causes the KDE plugin
+# paths of previous KDE invocations to be searched.
+# Obviously using mismatching KDE libraries is potentially
+# disastrous, so here we nuke references to the Nix store
+# in Trolltech.conf. A better solution would be to stop
+# Qt from doing this wackiness in the first place.
+if [ -e $XDG_CONFIG_HOME/Trolltech.conf ]; then
+ @NIXPKGS_SED@ -e '/nix\\store\|nix\/store/ d' -i $XDG_CONFIG_HOME/Trolltech.conf
+fi
+
+@NIXPKGS_KBUILDSYCOCA5@
+
+# Set the default GTK 2 theme
+gtkrc2="$HOME/.gtkrc-2.0"
+breeze_gtkrc2="/run/current-system/sw/share/themes/Breeze/gtk-2.0/gtkrc"
+if ! [ -e "$gtkrc2" ] && [ -e "$breeze_gtkrc2" ]; then
+ cat >"$gtkrc2" <<EOF
+# Default GTK+ 2 config for NixOS KDE 5
+include "$breeze_gtkrc2"
+style "user-font"
+{
+ font_name="Sans Serif Regular"
+}
+widget_class "*" style "user-font"
+gtk-font-name="Sans Serif Regular 10"
+gtk-theme-name="Breeze"
+gtk-icon-theme-name="breeze"
+gtk-fallback-icon-theme="hicolor"
+gtk-cursor-theme-name="breeze_cursors"
+gtk-toolbar-style=GTK_TOOLBAR_ICONS
+gtk-menu-images=1
+gtk-button-images=1
+EOF
fi
sysConfigDirs=${XDG_CONFIG_DIRS:-/etc/xdg}
-# We need to create config folder so we can write startupconfigkeys
-mkdir -p $configDir
+# Set the default GTK 3 theme
+gtk3_settings="$XDG_CONFIG_HOME/gtk-3.0/settings.ini"
+breeze_gtk3="/run/current-system/sw/share/themes/Breeze/gtk-3.0"
+if ! [ -e "$gtk3_settings" ] && [ -e "$breeze_gtk" ]; then
+ mkdir -p $(dirname "$gtk3_settings")
+ cat >"$gtk3_settings" <<EOF
+[Settings]
+gtk-font-name=Sans Serif Regular 10
+gtk-theme-name=Breeze
+gtk-icon-theme-name=breeze
+gtk-fallback-icon-theme=hicolor
+gtk-cursor-theme-name=breeze_cursors
+gtk-toolbar-style=GTK_TOOLBAR_ICONS
+gtk-menu-images=1
+gtk-button-images=1
+EOF
+fi
+
+kcminputrc="$XDG_CONFIG_HOME/kcminputrc"
+if ! [ -e "$kcminputrc" ]; then
+ cat >"$kcminputrc" <<EOF
+[Mouse]
+cursorTheme=breeze_cursors
+cursorSize=0
+EOF
+fi
#This is basically setting defaults so we can use them with kstartupconfig5
-cat >$configDir/startupconfigkeys <<EOF
+cat >"$XDG_CONFIG_HOME/startupconfigkeys" <<EOF
kcminputrc Mouse cursorTheme 'breeze_cursors'
kcminputrc Mouse cursorSize ''
-ksplashrc KSplash Theme Breeze
+ksplashrc KSplash Theme org.kde.breeze.desktop
ksplashrc KSplash Engine KSplashQML
-kcmfonts General forceFontDPIWayland 0
+kdeglobals KScreen ScreenScaleFactors ''
+kcmfonts General forceFontDPI 0
+kcmfonts General dontChangeAASettings true
EOF
# preload the user's locale on first start
-plasmalocalerc=$configDir/plasma-localerc
-test -f $plasmalocalerc || {
-cat >$plasmalocalerc <<EOF
+plasmalocalerc="$XDG_CONFIG_HOME/plasma-localerc"
+if ! [ -f "$plasmalocalerc" ]; then
+ cat >"$plasmalocalerc" <<EOF
[Formats]
LANG=$LANG
EOF
-}
+fi
# export LC_* variables set by kcmshell5 formats into environment
# so it can be picked up by QLocale and friends.
-exportformatssettings=$configDir/plasma-locale-settings.sh
-test -f $exportformatssettings && {
- . $exportformatssettings
-}
+exportformatssettings="$XDG_CONFIG_HOME/plasma-locale-settings.sh"
+if [ -r "$exportformatssettings" ]; then
+ . "$exportformatssettings"
+fi
# Write a default kdeglobals file to set up the font
-kdeglobalsfile=$configDir/kdeglobals
-test -f $kdeglobalsfile || {
-cat >$kdeglobalsfile <<EOF
+kdeglobalsfile="$XDG_CONFIG_HOME/kdeglobals"
+if ! [ -f "$kdeglobalsfile" ]; then
+ cat >"$kdeglobalsfile" <<EOF
[General]
-XftAntialias=true
-XftHintStyle=hintmedium
-XftSubPixel=none
+fixed=Monospace,10,-1,5,50,0,0,0,0,0,Regular
+font=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
+menuFont=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
+smallestReadableFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
+toolBarFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
+
+[WM]
+activeFont=Noto Sans,12,-1,5,50,0,0,0,0,0,Bold
EOF
-}
-
-# Make sure the Oxygen font is installed
-# This is necessary for setups where CMAKE_INSTALL_PREFIX
-# is not in /usr. fontconfig looks in /usr, ~/.fonts and
-# $XDG_DATA_HOME for fonts. In this case, we symlink the
-# Oxygen font under ${XDG_DATA_HOME} and make it known to
-# fontconfig
-
-usr_share="/usr/share"
-install_share="@KDE_INSTALL_FULL_DATADIR@"
-
-if [ ! $install_share = $usr_share ]; then
-
- if [ ${XDG_DATA_HOME} ]; then
- fontsDir="${XDG_DATA_HOME}/fonts"
- else
- fontsDir="${HOME}/.fonts"
- fi
-
- test -d $fontsDir || {
- mkdir -p $fontsDir
- }
-
- oxygenDir=$fontsDir/truetype/oxygen
- prefixDir="@KDE_INSTALL_FULL_DATADIR@/fonts/truetype/oxygen"
-
- # if the oxygen dir doesn't exist, create a symlink to be sure that the
- # Oxygen font is available to the user
- test -d $oxygenDir || test -d $prefixDir && {
- test -h $oxygenDir || ln -s $prefixDir $oxygenDir && fc-cache $oxygenDir
- }
fi
kstartupconfig5
returncode=$?
-if test $returncode -ne 0; then
+if ! @CMAKE_INSTALL_FULL_BINDIR@/kstartupconfig5; then
exit 1
fi
-[ -r $configDir/startupconfig ] && . $configDir/startupconfig
+if [ -r "$XDG_CONFIG_HOME/startupconfig" ]; then
+ . "$XDG_CONFIG_HOME/startupconfig"
+fi
#Manually disable auto scaling because we are scaling above
#otherwise apps that manually opt in for high DPI get auto scaled by the developer AND scaled by the wl_output
export QT_AUTO_SCREEN_SCALE_FACTOR=0
-# XCursor mouse theme needs to be applied here to work even for kded or ksmserver
-if test -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ; then
- @EXPORT_XCURSOR_PATH@
+XCURSOR_PATH=~/.icons
+IFS=":" read -r -a xdgDirs <<< "$XDG_DATA_DIRS"
+for xdgDir in "${xdgDirs[@]}"; do
+ XCURSOR_PATH="$XCURSOR_PATH:$xdgDir/icons"
+done
+export XCURSOR_PATH
- # TODO: is kapplymousetheme a core app?
+# XCursor mouse theme needs to be applied here to work even for kded or ksmserver
+if [ -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ]; then
#kapplymousetheme "$kcminputrc_mouse_cursortheme" "$kcminputrc_mouse_cursorsize"
- if test $? -eq 10; then
- XCURSOR_THEME=breeze_cursors
- export XCURSOR_THEME
- elif test -n "$kcminputrc_mouse_cursortheme"; then
- XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
- export XCURSOR_THEME
+ if [ $? -eq 10 ]; then
+ export XCURSOR_THEME=breeze_cursors
+ elif [ -n "$kcminputrc_mouse_cursortheme" ]; then
+ export XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
fi
- if test -n "$kcminputrc_mouse_cursorsize"; then
- XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
- export XCURSOR_SIZE
+ if [ -n "$kcminputrc_mouse_cursorsize" ]; then
+ export XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
fi
fi
-if test "$kcmfonts_general_forcefontdpiwayland" -ne 0; then
+if [ "${kcmfonts_general_forcefontdpiwayland:-0}" -ne 0 ]; then
export QT_WAYLAND_FORCE_DPI=$kcmfonts_general_forcefontdpiwayland
else
export QT_WAYLAND_FORCE_DPI=96
@@ -120,12 +167,12 @@ fi
# Get a property value from org.freedesktop.locale1
queryLocale1() {
- qdbus --system org.freedesktop.locale1 /org/freedesktop/locale1 "$1"
+ @NIXPKGS_QDBUS@ --system org.freedesktop.locale1 /org/freedesktop/locale1 "$1"
}
# Query whether org.freedesktop.locale1 is available. If it is, try to
# set XKB_DEFAULT_{MODEL,LAYOUT,VARIANT,OPTIONS} accordingly.
-if qdbus --system org.freedesktop.locale1 >/dev/null 2>/dev/null; then
+if @NIXPKGS_QDBUS@ --system org.freedesktop.locale1 >/dev/null 2>/dev/null; then
# Do not overwrite existing values. There is no point in setting only some
# of them as then they would not match anymore.
if [ -z "${XKB_DEFAULT_MODEL}" -a -z "${XKB_DEFAULT_LAYOUT}" -a \
@@ -141,41 +188,10 @@ if qdbus --system org.freedesktop.locale1 >/dev/null 2>/dev/null; then
fi
fi
-# Source scripts found in <config locations>/plasma-workspace/env/*.sh
-# (where <config locations> correspond to the system and user's configuration
-# directories, as identified by Qt's qtpaths, e.g. $HOME/.config
-# and /etc/xdg/ on Linux)
-#
-# This is where you can define environment variables that will be available to
-# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
-# or eval `gpg-agent --daemon`.
-# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
-#
-# (see end of this file).
-# For anything else (that doesn't set env vars, or that needs a window manager),
-# better use the Autostart folder.
-
-scriptpath=`echo "$configDir:$sysConfigDirs" | tr ':' '\n'`
-
-for prefix in `echo $scriptpath`; do
- for file in "$prefix"/plasma-workspace/env/*.sh; do
- test -r "$file" && . "$file" || true
- done
-done
-
echo 'startplasmacompositor: Starting up...' 1>&2
-# Make sure that the KDE prefix is first in XDG_DATA_DIRS and that it's set at all.
-# The spec allows XDG_DATA_DIRS to be not set, but X session startup scripts tend
-# to set it to a list of paths *not* including the KDE prefix if it's not /usr or
-# /usr/local.
-if test -z "$XDG_DATA_DIRS"; then
-XDG_DATA_DIRS="@KDE_INSTALL_FULL_DATADIR@:/usr/share:/usr/local/share"
-fi
-export XDG_DATA_DIRS
-
# Make sure that D-Bus is running
-if qdbus >/dev/null 2>/dev/null; then
+if @NIXPKGS_QDBUS@ >/dev/null 2>/dev/null; then
: # ok
else
echo 'startplasmacompositor: Could not start D-Bus. Can you call qdbus?' 1>&2
@@ -212,26 +228,47 @@ export KDE_FULL_SESSION
KDE_SESSION_VERSION=5
export KDE_SESSION_VERSION
-KDE_SESSION_UID=`id -ru`
+KDE_SESSION_UID=$(@NIXPKGS_ID@ -ru)
export KDE_SESSION_UID
XDG_CURRENT_DESKTOP=KDE
export XDG_CURRENT_DESKTOP
+# Source scripts found in <config locations>/plasma-workspace/env/*.sh
+# (where <config locations> correspond to the system and user's configuration
+# directories, as identified by Qt's qtpaths, e.g. $HOME/.config
+# and /etc/xdg/ on Linux)
+#
+# This is where you can define environment variables that will be available to
+# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
+# or eval `gpg-agent --daemon`.
+# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
+#
+# (see end of this file).
+# For anything else (that doesn't set env vars, or that needs a window manager),
+# better use the Autostart folder.
+
+IFS=":" read -r -a scriptpath <<< $(@NIXPKGS_QTPATHS@ --paths GenericConfigLocation)
+# Add /env/ to the directory to locate the scripts to be sourced
+for prefix in "${scriptpath[@]}"; do
+ for file in "$prefix"/plasma-workspace/env/*.sh; do
+ if [ -r "$file" ]; then
+ . "$file"
+ fi
+ done
+done
+
# kwin_wayland can possibly also start dbus-activated services which need env variables.
# In that case, the update in startplasma might be too late.
-if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
- dbus-update-activation-environment --systemd --all
-else
- @CMAKE_INSTALL_FULL_LIBEXECDIR@/ksyncdbusenv
-fi
-if test $? -ne 0; then
- # Startup error
- echo 'startplasmacompositor: Could not sync environment to dbus.' 1>&2
- exit 1
+if ! @NIXPKGS_DBUS_UPDATE_ACTIVATION_ENVIRONMENT@ --systemd --all; then
+ # Startup error
+ echo 'startkde: Could not sync environment to dbus.' 1>&2
+ test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+ echo 'startplasmacompositor: Could not sync environment to dbus.' 1>&2
+ exit 1
fi
-@KWIN_WAYLAND_BIN_PATH@ --xwayland --libinput --exit-with-session=@CMAKE_INSTALL_FULL_LIBEXECDIR@/startplasma
+@KWIN_WAYLAND_BIN_PATH@ --xwayland --libinput --exit-with-session=@NIXPKGS_STARTPLASMA@
echo 'startplasmacompositor: Shutting down...' 1>&2