TROMjaro Forum

TROMjaro 2022.06.15

This release brings a bunch of fixes and updates, a lot more than usual. But we really had to do these. If you follow up through this release’s notes, you can make your current TROMjaro work and look the same as this release. The guide will be simple and you’ll get to experience the improved TROMjaro Layout Switcher plus the new and awesome Theme Switcher :smiley: . Let’s begin!

NOTE: Update your system before doing all of the below things.

Layout Switcher

First let’s slightly improve the code for it. Go to your Home folder then to .local/bin/. Find the layout-switch file and rename it to layout-switcher. Now open it with a text editor and replace all that’s there with:

#! /bin/bash
data="$HOME"/.local/share/tromjaro-layouts
icons=$data/icons
profiles=$data/profiles
enable-top-bar-integration() {
	# Enable global menus
	pacman -Qq vala-panel-appmenu-registrar ||
		zensu SKIP_AUTOSNAP= pacman -S --noconfirm vala-panel-appmenu-registrar ||
		{ notify-send 'Error' 'failed installing vala-panel-appmenu-registrar !\nmake sure you type the correct password\nEnabling the internet connection might solve the issue'; exit; }
	pacman -Qq vala-panel-appmenu-registrar || exit

	# Hide window borders when maximized
	xfconf-query -c xfwm4 -p /general/borderless_maximize -n -t bool -s true &
	# Hide top bar of windows when maximized
	xfconf-query -c xfwm4 -p /general/titleless_maximize -n -t bool -s true &
	# Put window buttons on left side
	xfconf-query -c xfwm4 -p /general/button_layout -n -t string -s "CMH|" &
}
disable-top-bar-integration() {
	# Disable global menus
	! pacman -Qq vala-panel-appmenu-registrar ||
		zensu SKIP_AUTOSNAP= pacman -R --noconfirm vala-panel-appmenu-registrar ||
		{ notify-send 'Error' 'failed removing vala-panel-appmenu-registrar !\nmake sure you type the correct password'; exit; }
	pacman -Qq vala-panel-appmenu-registrar && exit
	killall appmenu-registrar &

	# Hide window borders when maximized
	xfconf-query -c xfwm4 -p /general/borderless_maximize -n -t bool -s true &
	# Don't hide top bar of windows when maximized
	xfconf-query -c xfwm4 -p /general/titleless_maximize -n -t bool -s false &
	# Put window buttons on right side
	xfconf-query -c xfwm4 -p /general/button_layout -n -t string -s "|HMC" &
}
choice=$(
yad --no-buttons --center --keep-icon-size --separator='' --use-interp --title 'Layout Switcher' --text-align=center --text 'Changing to or from any layout that has global menus, will require your admin password' --form --columns 3 \
--field=!"$icons/windows.png"!'Windows-Like':BTN "kill -USR1 \$YAD_PID; echo -n 'Windows-Like'" \
--field=!"$icons/macos.png"!'MacOS-Like':BTN "kill -USR1 \$YAD_PID; echo -n 'MacOS-Like'" \
--field=!"$icons/mx.png"!'MX-Like':BTN "kill -USR1 \$YAD_PID; echo -n 'MX-Like'" \
--field=!"$icons/gnome.png"!'Gnome-Like':BTN "kill -USR1 \$YAD_PID; echo -n 'Gnome-Like'" \
--field=!"$icons/unity.png"!'Unity-Like (default)':BTN "kill -USR1 \$YAD_PID; echo -n 'Unity-Like (default)'" \
--field=!"$icons/topx.png"!'TopX-Like':BTN "kill -USR1 \$YAD_PID; echo -n 'TopX-Like'"
)
case "$choice" in
	'Windows-Like')
		disable-top-bar-integration
		xfce4-panel-profiles load "$profiles"/Windows-Like.tar.bz2 & ;;
	'Unity-Like (default)')
		enable-top-bar-integration
		xfce4-panel-profiles load "$profiles"/Unity-Like.tar.bz2 & ;;
	'MX-Like')
		disable-top-bar-integration
		xfce4-panel-profiles load "$profiles"/MX-Like.tar.bz2 & ;;
	'MacOS-Like')
		enable-top-bar-integration
		xfce4-panel-profiles load "$profiles"/MacOS-Like.tar.bz2 & ;;
	'Gnome-Like')
		disable-top-bar-integration
		xfce4-panel-profiles load "$profiles"/Gnome-Like.tar.bz2 & ;;
	'TopX-Like')
		disable-top-bar-integration
		xfce4-panel-profiles load "$profiles"/TopX-Like.tar.bz2 & ;;
	*) exit ;;
esac

sleep 5 && notify-send "$choice layout was enabled"

Save. Done.

Now we need the Layout Switch app to point to the proper Layout Switcher and such. Open the APPS menu, search for Layout Switch. After you locate it, right click and EDIT:

Make sure the Command is set to layout-switcher and the name to Layout Switcher. Save.

Next we need to edit the file .config/gtk-3.0/gtk.css and replace all that is in the file with:

  /* Taller or wider buttons */
  #docklike-plugin button {
    min-height: 48px;
    min-width: 20px;
  }
  
  /* Brightly colored buttons */
  #docklike-plugin .open_group {
    background-color: rgba(0, 0, 0, 0);
  }
  #docklike-plugin .active_group {
    background-color: rgba(0, 0, 0, 0.3);
  }
  #docklike-plugin .hover_group {
    background-color:  rgba(0, 0, 0, 0.3);

  }

#whiskermenu-button image { -gtk-icon-transform: scale(1.5); min-height: 44px; min-width: 44px; }

If you want to have round-corners for the Gnome and MacOS layouts, like shown in the screenshots bellow, in the same file add this at the bottom (mind you this may affect all panels so it is up to you):

xfce4-panel.vertical {border-radius:8px;}
.xfce4-panel.horizontal {border-radius:8px;}

#XfcePanelWindowHidden {background: transparent;}

#XfcePanelWindow {
   -XfcePanelWindow-autohide-size: 30; 
}

Lastly, let’s update the Layouts profiles. Go to .local/share/tromjaro-layouts/profiles/ and delete those archives. Now download the new ones from here and add them there.

You may also have to add the following files to .config/xfce4/panel/. Mind you these will overwrite your menu and apps panel settings…

The new Clocks and Calendar

With the new Clocks + Calendar you are able to add to-do’s, events, or even alarms to your calendar, which can be very handy for many people. This is part of the new Layout Switcher so make sure you have this installed before switching between layouts.

We have replaced the default and too-simplistic XFCE Clocks with Orage. Open Add/Remove Software and search for “orage”.

Make sure it is from TROMjaro’s Repositories.

You can also remove the gnome-clocks package if you want to, since this is replacing its functionalities and Orage is part of XFCE.

Layouts Showcase:

I changed the wallpapers for the fun of it. They do not automatically change when you use the Layout Switcher. We could do that, but for now we do not find it important.

Unity:


Windows:


MX:


MacOS:


Gnome:


TopX:


As you can see you can make TROMjaro look like pretty much any other Operating System with a click of a button. If you want to make the panels on Gnome and MacOs “float” then simply right click them, then edit the panel. Unlock it so you can drag and move it a bit further from the edge. Lock it and that’s it. Basic XFCE click and do editing.

We recommend for you to switch to the new layouts if you were using any of the old ones, so it updates to the new setup. For the Unity and MacOS Layouts, in case the top left window buttons on the top bar do not sync with the theme, right click them, Properties, then click Sync with The theme.

Theme Switcher !!

One single panel. Light and dark + 12 color variations for each. This uses our default theme and I will explain why this is really awesome. Look at the bellow video, there we have apps that are GTK or QT based, some are XFCE specific, other are using the “impossible to customize libadwaita” library, and we even have a flatpak app (the ones that accept system theming). And yet our Theme Switcher manages them all!

This is something I have not seen achieved on any other distro, this level of consistency. As an example, Pop OS, Ubuntu, or any Gnome like distro that I am aware of, can do the same, but ONLY for GTK + Libadwaita apps, Meaning for like 10% of all apps at max. KDE and other may do better, but we do as much as you can right now on a Linux OS. I’d say over 90-95% of all apps will respect our system’s theme now.

Let’s do it!

First let’s install 2 packages. The very long named xfce4-windowck-plugin-xfwm4-theme-support and libadwaita-without-adwaita-git.

Now go to .local/bin/ and create a new empty file. Call it theme-switcher and add these to it:

#!/bin/bash
icons="$HOME"/.local/share/Theme-Switcher

set_theme() {
	xfconf-query -c xsettings -p /Net/ThemeName -n -t string -s "Skeuos-$1"
	xfconf-query -c xfwm4 -p /general/theme -n -t string -s "Skeuos-$1-XFWM"
	gsettings set org.gnome.desktop.interface gtk-theme "Skeuos-$1"
	if [ "${1##*-}" = 'Light' ]; then
		xfconf-query -c xsettings -p /Net/IconThemeName -n -t string -s Zafiro-Icons-Light-Black-f
	else
		xfconf-query -c xsettings -p /Net/IconThemeName -n -t string -s Zafiro
	fi
	notify-send "Skeuos-$1 theme was enabled"
}
export -f set_theme

yad --no-buttons --center --keep-icon-size --use-interp --title 'Theme Switcher' --text-align=center --text "A Theme Switcher for TROMjaro's default theme-set (Skeuos)" --form --columns 5 \
--field=!"$icons/Blue-Dark.png"!'Blue-Dark':FBTN "set_theme 'Blue-Dark'" \
--field=!"$icons/Violet-Dark.png"!'Violet-Dark':FBTN "set_theme 'Violet-Dark'" \
--field=!"$icons/Blue-Light.png"!'Blue-Light':FBTN "set_theme 'Blue-Light'" \
--field=!"$icons/Violet-Light.png"!'Violet-Light':FBTN "set_theme 'Violet-Light'" \
--field=!"$icons/Teal-Dark.png"!'Teal-Dark':FBTN "set_theme 'Teal-Dark'" \
--field=!"$icons/Orange-Dark.png"!'Orange-Dark':FBTN "set_theme 'Orange-Dark'" \
--field=!"$icons/Teal-Light.png"!'Teal-Light':FBTN "set_theme 'Teal-Light'" \
--field=!"$icons/Orange-Light.png"!'Orange-Light':FBTN "set_theme 'Orange-Light'" \
--field=!"$icons/Green-Dark.png"!'Green-Dark (default)':FBTN "set_theme 'Green-Dark'" \
--field=!"$icons/Brown-Dark.png"!'Brown-Dark':FBTN "set_theme 'Brown-Dark'" \
--field=!"$icons/Green-Light.png"!'Green-Light':FBTN "set_theme 'Green-Light'" \
--field=!"$icons/Brown-Light.png"!'Brown-Light':FBTN "set_theme 'Brown-Light'" \
--field=!"$icons/Magenta-Dark.png"!'Magenta-Dark':FBTN "set_theme 'Magenta-Dark'" \
--field=!"$icons/Yellow-Dark.png"!'Yellow-Dark':FBTN "set_theme 'Yellow-Dark'" \
--field=!"$icons/Magenta-Light.png"!'Magenta-Light':FBTN "set_theme 'Magenta-Light'" \
--field=!"$icons/Yellow-Light.png"!'Yellow-Light':FBTN "set_theme 'Yellow-Light'" \
--field=!"$icons/Red-Dark.png"!'Red-Dark':FBTN "set_theme 'Red-Dark'" \
--field=!"$icons/Grey-Dark.png"!'Grey-Dark':FBTN "set_theme 'Grey-Dark'" \
--field=!"$icons/Red-Light.png"!'Red-Light':FBTN "set_theme 'Red-Light'" \
--field=!"$icons/Grey-Light.png"!'Grey-Light':FBTN "set_theme 'Grey-Light'"

Save. Right click it, Properties, then:

This is the script. Now we need to add the files for it. Go to .local/share/ and create a folder called Theme-Switcher and add all of these images to it.

Next we need to create a desktop file for it. Go to .local/share/applications/ and create a new file called theme-switcher.desktop and add these to it:

[Desktop Entry]
Version=1.1
Type=Application
Name=Theme Switcher
GenericName=Theme Switcher
Comment=Change the theme based on TROMjaro's default theme set.
Icon=theme-switcher
Exec=theme-switcher
Categories=DesktopSettings;GTK;Settings;X-XFCE-PersonalSettings;X-XFCE-SettingsDialog;XFCE;
Keywords=settings;layout;toggle;switch;theme;

Save.

Let’s update the icon patch. Go to .local/share/icons/Zafiro and delete everything that’s inside it. Then create a folder called apps and inside of it another one called scalable. Now in that folder .local/share/icons/Zafiro/apps/scalable/ add these. And in the folder .local/share/icons/ add this one (extract the archive there).

Lastly let’s fix the pesky flatpaks. In your Home folder create a new one called .themes. There add our Skeuos theme pack. Download from here. Make sure you extract this archive in that .themes folder. So that in the .themes folder you have all of the Skeuos themes. If you see an error like Directory not empty, it is ok you can ignore it.

Then the last thing you have to do is to open the terminal and paste this:

sudo flatpak override --filesystem=~/.themes

Now we should be done! It is a bit of work but this is to fix a bunch of things.

Zombie script update

In .local/bin/ edit the file fix-tweaked-desktop-files and replace its contents with:

#!/bin/bash
pidof -sq -o %PPID -x "$(basename "$0")" && exit
data="$HOME"/.local/share/applications/tweaked-desktop-files
data2="$HOME"/.local/share/applications/bakkedup-desktop-files

# Directories where desktop files are stored
user="$HOME"/.local/share/applications
flatpak_local="$HOME"/.local/share/flatpak/exports/share/applications
flatpak_global=/var/lib/flatpak/exports/share/applications
pacman_local=/usr/local/share/applications
pacman_global=/usr/share/applications
snap=/var/lib/snapd/desktop/applications

detectfiles() {
	for file in "$user"/*.desktop; do
		name=$(basename "$file") || continue
		[ -d "$file" ] || grep -xq "\(flatpak-local\|flatpak-global\|pacman-local\|pacman-global\|snap\)/$name" "$data" && continue
		if [ -f "$flatpak_local/$name" ]; then
			echo "flatpak-local/$name" >> "$data"
		elif [ -f "$flatpak_global/$name" ]; then
			echo "flatpak-global/$name" >> "$data"
		elif [ -f "$pacman_local/$name" ]; then
			echo "pacman-local/$name" >> "$data"
		elif [ -f "$pacman_global/$name" ]; then
			echo "pacman-global/$name" >> "$data"
		elif [ -f "$snap/$name" ]; then
			echo "snap/$name" >> "$data"
		fi
	done
}

fixfiles() {
	lastmod=$(stat -c "%Y" "$data")
	tmp="$(mktemp)"
	trap 'rm $tmp' EXIT
	[ -f "$data" ] && cp "$data" "$tmp" && copied='true'
	lineno=0
	[ "$copied" = 'true' ] && while IFS= read -r line; do
		((lineno++))
		name=${line#*/}
		file="$user/$name"
		# shellcheck disable=2015 # To disable shellcheck error here, line below is intended to work this way
		echo "$line" | grep -xq '\(flatpak-local\|flatpak-global\|pacman-local\|pacman-global\|snap\)/.\+' && [ -f "$file" ] || { sed -i "${lineno}d" "$tmp" && ((lineno--)) ; continue; }
		[ -f "$flatpak_local/$name" ] ||
			[ -f "$flatpak_global/$name" ] ||
			[ -f "$pacman_local/$name" ] ||
			[ -f "$pacman_global/$name" ] ||
			[ -f "$snap/$name" ] ||
			{ mv "$file" "$file.bak" && echo "$line" >> "$data2"; }
	done < "$data"

	[ "$copied" = 'true' ] && [ "$(stat -c '%Y' "$data")" = "$lastmod" ] && sort "$tmp" | uniq > "$data"

	[ -n "$(sort "$data2" | uniq -d)" ] && cp "$data2" "$tmp" && sort "$tmp" | uniq > "$data2"

	for bakfile in "$user"/*.desktop.bak; do
		origfile="${bakfile%.bak}"
		[ -f "$origfile" ] && continue
		name=$(basename "$origfile") || continue
		[ -f "$flatpak_local/$name" ] ||
			[ -f "$flatpak_global/$name" ] ||
			[ -f "$pacman_local/$name" ] ||
			[ -f "$pacman_global/$name" ] ||
			[ -f "$snap/$name" ] &&
			mv "$bakfile" "$origfile"
	done
}

while :; do
	user_new=$(ls -ad "$user"/*.desktop 2>/dev/null)
	flatpak_local_new=$(ls -ad "$flatpak_local"/*.desktop 2>/dev/null)
	flatpak_global_new=$(ls -ad "$flatpak_global"/*.desktop 2>/dev/null)
	pacman_local_new=$(ls -ad "$pacman_local"/*.desktop 2>/dev/null)
	pacman_global_new=$(ls -ad "$pacman_global"/*.desktop 2>/dev/null)
	snap_new=$(ls -ad "$snap"/*.desktop 2>/dev/null)
	[ "$user_new" != "$user_old" ] && detectfiles
	[ "$flatpak_local_new" != "$flatpak_local_old" ] ||
		[ "$flatpak_global_new" != "$flatpak_global_old" ] ||
		[ "$pacman_local_new" != "$pacman_local_old" ] ||
		[ "$pacman_global_new" != "$pacman_global_old" ] ||
		[ "$snap_new" != "$snap_old" ] && fixfiles
	user_old=$user_new
	flatpak_local_old=$flatpak_local_new
	flatpak_global_old=$flatpak_global_new
	pacman_local_old=$pacman_local_new
	pacman_global_old=$pacman_global_new
	snap_old=$snap_new
	sleep 5
done

You may have to reboot your system for this to have effect.

New apps

We have removed the Syncthing app and replaced it with Warp. And we renamed it as Send. Syncthing is amazing but more for syncing many files. We wanted a simple “send file” app for TROMjaro and Warp is exactly that. It is p2p and encrypted. No file limits of course.

We have added the Gnome Calculator back, now that it obeys our system’s theme. So we removed the pantheon-calculator.

Lastly we added an awesome little app that let’s you remote control other computers. It is called RustDesk. We renamed it as Remote Desktop Control. This is a fantastic app - we can even use this to help other TROMjaro users fix/tweak things on their desktop in case they need help with that.

Grab the ISO from here.