diff --git a/sddm-theme/theme.conf.cmake b/sddm-theme/theme.conf.cmake index ea9a943..f98ddd2 100644 --- a/sddm-theme/theme.conf.cmake +++ b/sddm-theme/theme.conf.cmake @@ -2,4 +2,4 @@ type=image color=#1d99f3 fontSize=10 -background=${CMAKE_INSTALL_PREFIX}/${WALLPAPER_INSTALL_DIR}/Next/contents/images/5120x2880.png +background=${NIXPKGS_WALLPAPER_INSTALL_DIR}/Next/contents/images/5120x2880.png diff --git a/startkde/CMakeLists.txt b/startkde/CMakeLists.txt index 6a1a212..f03fd34 100644 --- a/startkde/CMakeLists.txt +++ b/startkde/CMakeLists.txt @@ -4,11 +4,6 @@ add_subdirectory(ksyncdbusenv) add_subdirectory(waitforname) add_subdirectory(kcheckrunning) -#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 493218e..d507aa5 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 b68f0c6..97a13a1 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,62 +42,143 @@ 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 + +# xdg-desktop-settings generates this empty file but +# it makes kbuildsyscoca5 fail silently. To fix this +# remove that menu if it exists. +rm -fv $HOME/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu + +# Remove the kbuildsyscoca5 cache. It will be regenerated immediately after. +# This is necessary for kbuildsyscoca5 to recognize that software that has been removed. +rm -fv $HOME/.cache/ksycoca* + +# 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" <"$gtk3_settings" <"$kcminputrc" <$configDir/startupconfigkeys <"$XDG_CONFIG_HOME/startupconfigkeys" <$plasmalocalerc <"$plasmalocalerc" <$kdeglobalsfile <"$kdeglobalsfile" <&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 @@ -104,26 +194,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 </plasma-workspace/env/*.sh -# (where 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 - # 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 @@ -221,44 +297,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 /plasma-workspace/env/*.sh +# (where 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 @@ -270,12 +367,16 @@ 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 @@ -286,19 +387,19 @@ fi #Anything after here is logout #It is not called after shutdown/restart -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 @@ -307,15 +408,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 1fe41c5..11757df 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 <&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 @@ -90,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 @@ -125,19 +112,19 @@ fi #Anything after here is logout #It is not called after shutdown/restart -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 @@ -146,15 +133,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 dcb473a..0988740 100644 --- a/startkde/startplasmacompositor.cmake +++ b/startkde/startplasmacompositor.cmake @@ -1,118 +1,174 @@ #!/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 + +# xdg-desktop-settings generates this empty file but +# it makes kbuildsyscoca5 fail silently. To fix this +# remove that menu if it exists. +rm -fv $HOME/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu + +# Remove the kbuildsyscoca5 cache. It will be regenerated immediately after. +# This is necessary for kbuildsyscoca5 to recognize that software that has been removed. +rm -fv $HOME/.cache/ksycoca* + +# 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" <"$gtk3_settings" <"$kcminputrc" <$configDir/startupconfigkeys <"$XDG_CONFIG_HOME/startupconfigkeys" <$plasmalocalerc <"$plasmalocalerc" <$kdeglobalsfile <"$kdeglobalsfile" </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 +197,10 @@ if qdbus --system org.freedesktop.locale1 >/dev/null 2>/dev/null; then fi fi -# Source scripts found in /plasma-workspace/env/*.sh -# (where 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,7 +237,7 @@ 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 @@ -221,20 +246,41 @@ export XDG_CURRENT_DESKTOP XDG_SESSION_TYPE=wayland export XDG_SESSION_TYPE +# Source scripts found in /plasma-workspace/env/*.sh +# (where 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