So instead of having a duh moment, I decided to just install my own XFCE in /opt/xfce. I just did this in Arch, so I had all the tarballs and already had all the settings worked out in the PKGBUILDS so I could just copy most of the ./configure commands (editing where appropriate). Yes, it's good old fashioned autoconf ./configure, with make install-strip and everything. It is a pleasure to work like this for a change.
Firstly, I explicitly emerged the packages back again that I knew I was going to want/need (from the list I removed). Now they won't be "deps" anymore (won't be removed by --depclean) but entries in the "world file". These things aren't just for XFCE, I'll be needing them for other builds. Moreover, I think it's kind of obnoxious that --depclean removed X11 libraries (though I know it's going to do things like that). I really miss the days when all of X was built together.
Code: Select all
emerge --ask dev-libs/dbus-glib dev-libs/icu x11-libs/vte x11-libs/libwnck gui-libs/vte-common dev-libs/dbus-glib dev-libs/libgudev x11-misc/xdg-user-dirs dev-libs/libdbusmenu virtual/freedesktop-icon-theme x11-libs/libXinerama app-text/iso-codes app-crypt/p11-kit x11-libs/libXres gui-libs/gtk-layer-shell
Then I made sure everything was fine with @world and --depclean
In order for this to work in /opt/xfce, a few variables are needed. I use a file in /etc/profile.d for my stuff.
Firstly /opt/xfce/bin has to be added to the PATH variable somewhere. (I do it like this in /etc/profile.d)
Code: Select all
export PATH="/opt/mesa/bin:/opt/xfce/bin:/opt/firefox/bin:/opt/libreoffice/program:$PATH"
It's also going to need its pkgconfig files found:
Code: Select all
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/opt/xfce/lib64/pkgconfig"
In order for it to both compile (needs to find gobject-introspection files) and work, it needs to be in the $XDG_DATA_DIRS path. I think the defaults are /usr/share and /usr/local/share but I set them explicitly. This variable won't likely be set by default on a distro and I don't want to find out if it appends or overrides, so
Code: Select all
export XDG_DATA_DIRS="/opt/xfce/share:/usr/local/share:/usr/share"
Last but not least, it needs a ldconfig entry. I made a file /etc/ld.so.conf.d/01xfce.conf with /opt/xfce/lib64 in it.
In my terminal shell I set:
Code: Select all
export CFLAGS="-O2 -pipe -march=alderlake -Wno-error=incompatible-pointer-types -Wno-error=implicit-function-declaration"
export CXXFLAGS="-O2 -pipe -march=alderlake"
After that, ./configure --prefix=/opt/xfce, make, make install-strip for each package, disabling things I don't need in each build. (./configure --help to suss those out... but I already had that sorted). I did use --sysconfdir=/etc so /etc/xdg would work out though.
Now this is a nice snappy XFCE, and it will neither get broken (no dependencies with sonames that are going to break... probably not for years), nor need updating, because it's outside the distro and also XFCE doesn't change much and often not for the better when it does. The current release is already 2 years old, it's robust.