diff --git a/Fluent/README.md b/Fluent/README.md
index eecdc8f17..f5002eac3 100644
--- a/Fluent/README.md
+++ b/Fluent/README.md
@@ -8,8 +8,8 @@ This is a repackaging of the Fluent theme for convenience of installation and ea
## Installation
-Most easily installed via Cinnamon's Themes module in Cinnamon settings.
+Install via Cinnamon's Themes module in Cinnamon settings or download from Cinnamon Spices and unzip into your ~/.themes directory.
## Options/Configuration
-Various options are available such as light/dark theme, accent color, transparency, etc. Simply go to `~/.themes/Fluent` directory and run `options.py`
+Various options are available such as light/dark theme, accent color, transparency, etc. Go to `~/.themes/Fluent` directory and run `options.py`. You may need to give execute permissions to `options.py` first in order to run it (right click on file > Properties > Permissions tab).
diff --git a/Fluent/files/Fluent/config/README.txt b/Fluent/files/Fluent/config/CREDITS
similarity index 100%
rename from Fluent/files/Fluent/config/README.txt
rename to Fluent/files/Fluent/config/CREDITS
diff --git a/Fluent/files/Fluent/config/__init__.py b/Fluent/files/Fluent/config/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/Fluent/files/Fluent/config/config_gui.py b/Fluent/files/Fluent/config/config_gui.py
deleted file mode 100755
index f5e30dff2..000000000
--- a/Fluent/files/Fluent/config/config_gui.py
+++ /dev/null
@@ -1,244 +0,0 @@
-
-import gi
-gi.require_version('Gtk', '3.0')
-from gi.repository import Gtk
-import json
-import os
-import subprocess
-import shutil
-import string
-import random
-
-class OptionsWindow(Gtk.Window):
- def __init__(self, desktop_environment, rename_theme_on_update, is_current_theme, set_theme):
- super().__init__(title="")
-
- self.desktop_environment = desktop_environment
- self.rename_theme_on_update = rename_theme_on_update
- self.is_current_theme = is_current_theme
- self.set_theme = set_theme
-
- self.current_theme_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- self.current_theme_name = os.path.basename(self.current_theme_dir)
-
- self.set_default_size(500, 100)
-
- box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 5)
- box.set_margin_top(15)
- box.set_margin_bottom(15)
- box.set_margin_start(25)
- box.set_margin_end(25)
- self.add(box)
-
- self.load_config_file()
- self.set_title(self.options["theme_name"] + " theme options")
- self.set_icon_name("applications-graphics")
-
- self.widgets = {}
-
- for option in self.options["options"]:
- if option["desktop"] == "all" or option["desktop"] == self.desktop_environment:
- if option["type"] == "combo":
- combobox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- combobox_label = Gtk.Label.new(option["label"])
- combobox_label.set_halign(Gtk.Align.START)
- combobox.pack_start(combobox_label, True, True, 0)
- combo_widget = Gtk.ComboBoxText()
- for label in option["labels"]:
- combo_widget.append_text(label)
- combo_widget.set_active(option["value"])
- combo_widget.set_halign(Gtk.Align.END)
- combo_widget.connect("changed", self.on_combo_changed)
- combobox.pack_start(combo_widget, True, True, 0)
- box.pack_start(combobox, False, True, 0)
- self.widgets[option["name"]] = combo_widget
- elif option["type"] == "switch":
- switchbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- switchbox_label = Gtk.Label.new(option["label"])
- switchbox_label.set_halign(Gtk.Align.START)
- switchbox.pack_start(switchbox_label, True, True, 0)
- switch_widget = Gtk.Switch()
- switch_widget.set_active(option["value"])
- switch_widget.set_halign(Gtk.Align.END)
- switch_widget.set_valign(Gtk.Align.CENTER)
- switch_widget.connect("state-set", self.on_switch_changed)
- switchbox.pack_start(switch_widget, True, True, 0)
- box.pack_start(switchbox, False, True, 0)
- self.widgets[option["name"]] = switch_widget
- #---------------------------
- self.applybutton = Gtk.Button.new_with_label("Apply")
- self.applybutton.set_halign(Gtk.Align.CENTER)
- self.applybutton.set_valign(Gtk.Align.END)
- self.applybutton.set_sensitive(False)
- self.applybutton.connect("clicked", self.on_apply_button_clicked)
- box.pack_start(self.applybutton, False, True, 0)
- #---------------------------
- separator = Gtk.Separator.new(Gtk.Orientation.HORIZONTAL)
- separator.set_valign(Gtk.Align.END)
- box.pack_start(separator, False, True, 0)
- #---------------------------
- setthemebox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- self.setthemebox_label = Gtk.Label.new("")
- self.setthemebox_label.set_halign(Gtk.Align.START)
- self.setthemebox_label.set_line_wrap(True)
- setthemebox.pack_start(self.setthemebox_label, True, True, 0)
- self.setthemebox_button = Gtk.Button.new()
- self.setthemebox_button.set_label("Set theme")
- self.setthemebox_button.set_halign(Gtk.Align.END)
- self.setthemebox_button.set_valign(Gtk.Align.CENTER)
- self.setthemebox_button.connect("clicked", self.on_setthemebox_button_clicked)
- setthemebox.pack_start(self.setthemebox_button, True, True, 0)
- box.pack_start(setthemebox, False, True, 0)
- self.update_setthemebox()
- #---------------------------
- if self.options.get("adwaita_link_to_gtk4", False):
- adwaitabox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- self.adwaitabox_label = Gtk.Label.new("")
- self.adwaitabox_label.set_halign(Gtk.Align.START)
- self.adwaitabox_label.set_line_wrap(True)
- adwaitabox.pack_start(self.adwaitabox_label, True, True, 0)
- self.adwaitabox_button = Gtk.Button.new()
- self.adwaitabox_button.set_halign(Gtk.Align.END)
- self.adwaitabox_button.set_valign(Gtk.Align.CENTER)
- self.adwaitabox_button.connect("clicked", self.on_adwaitabox_button_clicked)
- adwaitabox.pack_start(self.adwaitabox_button, True, True, 0)
- box.pack_start(adwaitabox, False, True, 0)
- self.update_adwaitabox()
-
-
- def update_adwaitabox(self):
- if is_libadwaita_linked(self.current_theme_dir):
- self.adwaitabox_label.set_text("This theme is your current libadwaita theme")
- self.adwaitabox_button.set_label("Remove")
- else:
- self.adwaitabox_label.set_text("Set this theme as your current libadwaita theme")
- self.adwaitabox_button.set_label("Install")
-
- def on_adwaitabox_button_clicked(self, button):
- if is_libadwaita_linked(self.current_theme_dir): # "Remove" clicked
- unlink_libadwaita()
- else: # "Install" clicked
- unlink_libadwaita()
- link_libadwaita(self.current_theme_dir)
-
- self.update_adwaitabox()
-
- def update_setthemebox(self):
- if self.is_current_theme(self.current_theme_name):
- self.setthemebox_label.set_text("This theme is your current desktop theme")
- self.setthemebox_button.set_sensitive(False)
- else:
- self.setthemebox_label.set_text("This theme is not your current desktop theme")
- self.setthemebox_button.set_sensitive(True)
-
- def on_setthemebox_button_clicked(self, button):
- self.set_theme(self.current_theme_name, self.current_theme_name, reload_only = False)
- self.update_setthemebox()
-
- def on_combo_changed(self, combo):
- self.applybutton.set_sensitive(True)
-
- def on_switch_changed(self, switch, state):
- self.applybutton.set_sensitive(True)
-
- def load_config_file(self):
- file_name = os.path.join(self.current_theme_dir, "config", "options_config.json")
- with open(file_name, "r") as file:
- self.options = json.load(file)
-
- def save_config_file(self, new_theme_dir):
- file_name = os.path.join(new_theme_dir, "config", "options_config.json")
- with open(file_name, "w") as file:
- json.dump(self.options, file, indent=4)
-
- def get_new_theme_names(self):
- if self.rename_theme_on_update:
- random_chars = "".join(random.choices(string.digits, k=3))
- new_theme_name = self.options["theme_name"] + random_chars
- new_theme_dir = os.path.join(os.path.dirname(self.current_theme_dir), new_theme_name)
- else: #keep same name
- new_theme_dir = self.current_theme_dir
- new_theme_name = self.current_theme_name
- return (new_theme_dir, new_theme_name)
-
- def on_apply_button_clicked(self, button):
- new_theme_dir, new_theme_name = self.get_new_theme_names()
- #Rename theme directory if neccessary
- if new_theme_dir != self.current_theme_dir:
- os.rename(self.current_theme_dir, new_theme_dir)
-
- #prepare install command and store settings
- command = [os.path.join(new_theme_dir, 'config', self.options["script_name"])]
- command.append("--name")
- command.append(new_theme_name)
- command.append("--dest")
- command.append(os.path.dirname(new_theme_dir))
-
- for option in self.options["options"]:
- if option["desktop"] == "all" or option["desktop"] == self.desktop_environment:
- if option["type"] == "combo":
- command.append("--" + option["name"])
- value = self.widgets[option["name"]].get_active()
- option["value"] = value
- value_id = option["ids"][value]
- command.append(value_id)
- elif option["type"] == "switch":
- value = self.widgets[option["name"]].get_active()
- option["value"] = value
- if value:
- command.append("--" + option["name"])
-
- #Install theme
- try:
- print ("Running..." + " ".join(command))
- subprocess.run(command, check=True)
- print("Install finished OK")
- except subprocess.CalledProcessError as e:
- print(f"Install script error. Return code: {e.returncode}")
- print(f"Output:\n{e.output.decode('utf-8')}")
-
- #save settings
- self.save_config_file(new_theme_dir)
-
- #apply desktop theme
- self.set_theme(self.current_theme_name, new_theme_name, reload_only = True)
- self.applybutton.set_sensitive(False)
-
- #Relink libadwaita if neccessary
- if new_theme_name != self.current_theme_name and is_libadwaita_linked(self.current_theme_dir):
- unlink_libadwaita()
- link_libadwaita(new_theme_dir)
-
- #update theme name
- self.current_theme_dir = new_theme_dir
- self.current_theme_name = new_theme_name
-
-def is_link_to(link, target):
- return os.path.islink(link) and os.readlink(link) == target
-
-def is_libadwaita_linked(theme_dir):
- config_dir = os.path.expanduser('~/.config/gtk-4.0/')
- return (is_link_to(os.path.join(config_dir, 'assets'), os.path.join(theme_dir, 'gtk-4.0', 'assets')) and
- is_link_to(os.path.join(config_dir, 'gtk.css'), os.path.join(theme_dir, 'gtk-4.0', 'gtk.css')) and
- is_link_to(os.path.join(config_dir, 'gtk-dark.css'), os.path.join(theme_dir, 'gtk-4.0', 'gtk-dark.css')))
-
-def link_libadwaita(theme_dir):
- config_dir = os.path.expanduser('~/.config/gtk-4.0/')
- os.makedirs(config_dir, exist_ok=True)
- os.symlink(os.path.join(theme_dir, 'gtk-4.0', 'assets'), os.path.join(config_dir, 'assets'), target_is_directory = True)
- os.symlink(os.path.join(theme_dir, 'gtk-4.0', 'gtk.css'), os.path.join(config_dir, 'gtk.css'))
- os.symlink(os.path.join(theme_dir, 'gtk-4.0', 'gtk-dark.css'), os.path.join(config_dir, 'gtk-dark.css'))
-
-def unlink_libadwaita():
- config_dir = os.path.expanduser('~/.config/gtk-4.0/')
- subprocess.run(["rm", "-rf", config_dir + "assets"])
- subprocess.run(["rm", "-rf", config_dir + "gtk.css"])
- subprocess.run(["rm", "-rf", config_dir + "gtk-dark.css"])
-
-def main(desktop_environment, rename_theme_on_update, is_current_theme, set_theme):
- Gtk.init()
-
- win = OptionsWindow(desktop_environment, rename_theme_on_update, is_current_theme, set_theme)
- win.connect("destroy", Gtk.main_quit)
- win.show_all()
- Gtk.main()
diff --git a/Fluent/files/Fluent/config/install.sh b/Fluent/files/Fluent/config/install.sh
index 70cdd2bed..ef592a969 100755
--- a/Fluent/files/Fluent/config/install.sh
+++ b/Fluent/files/Fluent/config/install.sh
@@ -5,9 +5,6 @@ SRC_DIR="$REPO_DIR/src"
export LD_LIBRARY_PATH="$REPO_DIR/libsass"
SASSC_BIN="$REPO_DIR/libsass/sassc"
-ROOT_UID=0
-DEST_DIR=
-
# For tweaks
opacity=
panel=
@@ -17,20 +14,12 @@ outline=
titlebutton=
icon='-default'
-# Destination directory
-if [ "$UID" -eq "$ROOT_UID" ]; then
- DEST_DIR="/usr/share/themes"
-else
- DEST_DIR="$HOME/.themes"
-fi
+THEME_DIR=$(dirname $REPO_DIR)
+DEST_DIR=$(dirname $THEME_DIR)
+THEME_NAME=$(basename $THEME_DIR)
SASSC_OPT="-M -t expanded"
-THEME_NAME=Fluent
-THEME_VARIANTS=('' '-purple' '-pink' '-red' '-orange' '-yellow' '-green' '-teal' '-grey')
-COLOR_VARIANTS=('' '-Light' '-Dark')
-SIZE_VARIANTS=('' '-compact')
-
if [[ "$(command -v gnome-shell)" ]]; then
gnome-shell --version
SHELL_VERSION="$(gnome-shell --version | cut -d ' ' -f 3 | cut -d . -f -1)"
@@ -52,175 +41,12 @@ else
GS_VERSION="44-0"
fi
-install() {
- local dest="$1"
- local name="$2"
- local theme="$3"
- local color="$4"
- local size="$5"
- local icon="$6"
-
- [[ "$color" == '-Dark' ]] && local ELSE_DARK="$color"
- [[ "$color" == '-Light' ]] && local ELSE_LIGHT="$color"
- [[ "$color" == '-Dark' ]] || [[ "$color" == '' ]] && local ACTIVITIES_ASSETS_SUFFIX="-Dark"
-
- if [[ "$window" == 'round' ]]; then
- round='-round'
- else
- round=$window
- fi
-
- local THEME_DIR="$dest/$name"
-
- theme_tweaks && install_theme_color
-
- echo "Installing '$THEME_DIR'..."
-
- mkdir -p "$THEME_DIR"
- cp -r "$REPO_DIR/COPYING" "$THEME_DIR"
-
- echo "[Desktop Entry]" >> "$THEME_DIR/index.theme"
- echo "Type=X-GNOME-Metatheme" >> "$THEME_DIR/index.theme"
- echo "Name=$name" >> "$THEME_DIR/index.theme"
- echo "Comment=An Materia Gtk+ theme based on Elegant Design" >> "$THEME_DIR/index.theme"
- echo "Encoding=UTF-8" >> "$THEME_DIR/index.theme"
- echo "" >> "$THEME_DIR/index.theme"
- echo "[X-GNOME-Metatheme]" >> "$THEME_DIR/index.theme"
- echo "GtkTheme=$name" >> "$THEME_DIR/index.theme"
- echo "MetacityTheme=$name" >> "$THEME_DIR/index.theme"
- echo "IconTheme=$name${ELSE_DARK:-}" >> "$THEME_DIR/index.theme"
- echo "CursorTheme=$name${ELSE_DARK:-}" >> "$THEME_DIR/index.theme"
- echo "ButtonLayout=close,minimize,maximize:menu" >> "$THEME_DIR/index.theme"
-
- mkdir -p "$THEME_DIR/gnome-shell"
- cp -r "$SRC_DIR/gnome-shell/pad-osd.css" "$THEME_DIR/gnome-shell"
-
- $SASSC_BIN $SASSC_OPT "$SRC_DIR/gnome-shell/shell-$GS_VERSION/gnome-shell$color$size.scss" "$THEME_DIR/gnome-shell/gnome-shell.css"
-
- cp -r "${SRC_DIR}/gnome-shell/common-assets" "$THEME_DIR/gnome-shell/assets"
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/"*.svg "$THEME_DIR/gnome-shell/assets"
- cp -r "${SRC_DIR}/gnome-shell/theme$theme/"*.svg "$THEME_DIR/gnome-shell/assets"
- cp -r "${SRC_DIR}/gnome-shell/assets${ACTIVITIES_ASSETS_SUFFIX:-}/activities/activities${icon}.svg" "$THEME_DIR/gnome-shell/assets/activities.svg"
-
- if [[ "$window" = "round" ]] ; then
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/buttons-round/"*.svg "$THEME_DIR/gnome-shell/assets"
- else
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/buttons/"*.svg "$THEME_DIR/gnome-shell/assets"
- fi
-
- if [[ "$color" = "-Light" ]] ; then
- cp -r "${SRC_DIR}/gnome-shell/assets-Dark/activities/activities${icon}.svg" "$THEME_DIR/gnome-shell/assets/activities-white.svg"
- fi
-
- if [[ "$opacity" = "solid" ]] ; then
- if [[ "$window" = "round" ]] ; then
- if [[ "$outline" = "" ]] ; then
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid-round/"*.svg "$THEME_DIR/gnome-shell/assets"
- else
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid-round-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
- fi
- else
- if [[ "$outline" = "" ]] ; then
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid/"*.svg "$THEME_DIR/gnome-shell/assets"
- else
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
- fi
- fi
- else
- if [[ "$window" = "round" ]] ; then
- if [[ "$outline" = "" ]] ; then
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default-round/"*.svg "$THEME_DIR/gnome-shell/assets"
- else
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default-round-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
- fi
- else
- if [[ "$outline" = "" ]] ; then
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default/"*.svg "$THEME_DIR/gnome-shell/assets"
- else
- cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
- fi
- fi
- fi
-
- cd "$THEME_DIR/gnome-shell"
- ln -sf assets/no-events.svg no-events.svg
- ln -sf assets/process-working.svg process-working.svg
- ln -sf assets/no-notifications.svg no-notifications.svg
-
- mkdir -p "$THEME_DIR/gtk-2.0"
- cp -r "$SRC_DIR/gtk-2.0/common/"{apps.rc,hacks.rc,main.rc} "$THEME_DIR/gtk-2.0"
- cp -r "$SRC_DIR/gtk-2.0/assets-folder/assets$theme${ELSE_DARK:-}" "$THEME_DIR/gtk-2.0/assets"
- cp -r "$SRC_DIR/gtk-2.0/gtkrc$theme${ELSE_DARK:-}" "$THEME_DIR/gtk-2.0/gtkrc"
-
- mkdir -p "$THEME_DIR/gtk-3.0"
- cp -r "$SRC_DIR/gtk/assets$theme" "$THEME_DIR/gtk-3.0/assets"
- cp -r "$SRC_DIR/gtk/scalable" "$THEME_DIR/gtk-3.0/assets"
- cp -r "$SRC_DIR/gtk/thumbnail$theme${ELSE_DARK:-}.png" "$THEME_DIR/gtk-3.0/thumbnail.png"
-
- $SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/3.0/gtk$color$size.scss" "$THEME_DIR/gtk-3.0/gtk.css"
- $SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/3.0/gtk-Dark$size.scss" "$THEME_DIR/gtk-3.0/gtk-dark.css"
-
- mkdir -p "$THEME_DIR/gtk-4.0"
- cp -r "$SRC_DIR/gtk/assets$theme" "$THEME_DIR/gtk-4.0/assets"
- cp -r "$SRC_DIR/gtk/scalable" "$THEME_DIR/gtk-4.0/assets"
-
- $SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/4.0/gtk$color$size.scss" "$THEME_DIR/gtk-4.0/gtk.css"
- $SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/4.0/gtk-Dark$size.scss" "$THEME_DIR/gtk-4.0/gtk-dark.css"
-
- mkdir -p "$THEME_DIR/cinnamon"
- cp -r "$SRC_DIR/cinnamon/common-assets" "$THEME_DIR/cinnamon/assets"
- cp -r "$SRC_DIR/cinnamon/assets${ELSE_DARK:-}/"*.svg "$THEME_DIR/cinnamon/assets"
-
- $SASSC_BIN $SASSC_OPT "$SRC_DIR/cinnamon/cinnamon$color$size.scss" "$THEME_DIR/cinnamon/cinnamon.css"
-
- cp -r "$SRC_DIR/cinnamon/thumbnail$theme$color.png" "$THEME_DIR/cinnamon/thumbnail.png"
-
- if [[ "$size" == '' ]]; then
- mkdir -p "$THEME_DIR/xfwm4"
-
- if [[ "$titlebutton" = "square" ]] ; then
- cp -r "$SRC_DIR/xfwm4/assets-square$color/"*.png "$THEME_DIR/xfwm4"
- cp -r "$SRC_DIR/xfwm4/themerc-square${ELSE_LIGHT:-}" "$THEME_DIR/xfwm4/themerc"
- else
- cp -r "$SRC_DIR/xfwm4/assets$color/"*.png "$THEME_DIR/xfwm4"
- cp -r "$SRC_DIR/xfwm4/themerc${ELSE_LIGHT:-}" "$THEME_DIR/xfwm4/themerc"
- fi
-
- mkdir -p "$THEME_DIR/metacity-1"
- cp -r "$SRC_DIR/metacity-1/metacity-theme-2$color.xml" "$THEME_DIR/metacity-1/metacity-theme-2.xml"
-
- if [[ "$window" = "round" ]] ; then
- cp -r "$SRC_DIR/metacity-1/metacity-theme-3-round.xml" "$THEME_DIR/metacity-1/metacity-theme-3.xml"
- cp -r "$SRC_DIR/metacity-1/assets-round" "$THEME_DIR/metacity-1/assets"
- else
- cp -r "$SRC_DIR/metacity-1/metacity-theme-3.xml" "$THEME_DIR/metacity-1"
- cp -r "$SRC_DIR/metacity-1/assets" "$THEME_DIR/metacity-1"
- fi
-
- cp -r "$SRC_DIR/metacity-1/thumbnail${ELSE_DARK:-}.png" "$THEME_DIR/metacity-1/thumbnail.png"
- cd "$THEME_DIR/metacity-1" && ln -sf metacity-theme-2.xml metacity-theme-1.xml
- fi
-
- mkdir -p "$THEME_DIR/plank"
- cp -r "$SRC_DIR/plank/theme${ELSE_LIGHT:-}/dock.theme" "$THEME_DIR/plank"
-}
-
-themes=()
-colors=()
-sizes=()
-lcolors=()
+theme=
+color=
+size=
while [[ "$#" -gt 0 ]]; do
case "${1:-}" in
- --dest)
- dest="$2"
- mkdir -p "$dest"
- shift 2
- ;;
- --name)
- _name="$2"
- shift 2
- ;;
--solid)
opacity="solid"
shift
@@ -257,43 +83,39 @@ while [[ "$#" -gt 0 ]]; do
for variant in "$@"; do
case "$variant" in
default)
- themes+=("${THEME_VARIANTS[0]}")
+ theme=''
shift
;;
purple)
- themes+=("${THEME_VARIANTS[1]}")
+ theme='-purple'
shift
;;
pink)
- themes+=("${THEME_VARIANTS[2]}")
+ theme='-pink'
shift
;;
red)
- themes+=("${THEME_VARIANTS[3]}")
+ theme='-red'
shift
;;
orange)
- themes+=("${THEME_VARIANTS[4]}")
+ theme='-orange'
shift
;;
yellow)
- themes+=("${THEME_VARIANTS[5]}")
+ theme='-yellow'
shift
;;
green)
- themes+=("${THEME_VARIANTS[6]}")
+ theme='-green'
shift
;;
teal)
- themes+=("${THEME_VARIANTS[7]}")
+ theme='-teal'
shift
;;
grey)
- themes+=("${THEME_VARIANTS[8]}")
- shift
- ;;
- all)
- themes+=("${THEME_VARIANTS[@]}")
+ theme='-grey'
shift
;;
-*)
@@ -301,8 +123,8 @@ while [[ "$#" -gt 0 ]]; do
;;
*)
echo "ERROR: Unrecognized theme variant '$1'."
- echo "Try '$0 --help' for more information."
- exit 1
+ echo "Ignoring..."
+ shift
;;
esac
done
@@ -384,8 +206,8 @@ while [[ "$#" -gt 0 ]]; do
;;
*)
echo "ERROR: Unrecognized icon variant '$1'."
- echo "Try '$0 --help' for more information."
- exit 1
+ echo "Ignoring..."
+ shift
;;
esac
echo "Install $icons icon for gnome-shell panel..."
@@ -396,18 +218,15 @@ while [[ "$#" -gt 0 ]]; do
for variant in "$@"; do
case "$variant" in
standard)
- colors+=("${COLOR_VARIANTS[0]}")
- lcolors+=("${COLOR_VARIANTS[0]}")
+ color=''
shift
;;
light)
- colors+=("${COLOR_VARIANTS[1]}")
- lcolors+=("${COLOR_VARIANTS[1]}")
+ color='-Light'
shift
;;
dark)
- colors+=("${COLOR_VARIANTS[2]}")
- lcolors+=("${COLOR_VARIANTS[2]}")
+ color='-Dark'
shift
;;
-*|--*)
@@ -415,8 +234,8 @@ while [[ "$#" -gt 0 ]]; do
;;
*)
echo "ERROR: Unrecognized color variant '$1'."
- echo "Try '$0 --help' for more information."
- exit 1
+ echo "Ignoring..."
+ shift
;;
esac
done
@@ -426,11 +245,11 @@ while [[ "$#" -gt 0 ]]; do
for variant in "$@"; do
case "$variant" in
standard)
- sizes+=("${SIZE_VARIANTS[0]}")
+ size=''
shift
;;
compact)
- sizes+=("${SIZE_VARIANTS[1]}")
+ size='-compact'
shift
;;
-*)
@@ -438,163 +257,244 @@ while [[ "$#" -gt 0 ]]; do
;;
*)
echo "ERROR: Unrecognized size variant '${1:-}'."
- echo "Try '$0 --help' for more information."
- exit 1
+ echo "Ignoring..."
+ shift
;;
esac
done
;;
*)
echo "ERROR: Unrecognized installation option '${1:-}'."
- echo "Try '$0 --help' for more information."
- exit 1
+ echo "Ignoring..."
+ shift
;;
esac
done
-if [[ "${#themes[@]}" -eq 0 ]] ; then
- themes=("${THEME_VARIANTS[0]}")
-fi
-
-if [[ "${#colors[@]}" -eq 0 ]] ; then
- colors=("${COLOR_VARIANTS[@]}")
-fi
-
-if [[ "${#lcolors[@]}" -eq 0 ]] ; then
- lcolors=("${COLOR_VARIANTS[1]}")
-fi
+# clean theme
+rm -rf "${THEME_DIR}"/{cinnamon,gnome-shell,gtk-2.0,gtk-3.0,gtk-4.0,metacity-1,plank,xfwm4,index.theme}
-if [[ "${#sizes[@]}" -eq 0 ]] ; then
- sizes=("${SIZE_VARIANTS[@]}")
-fi
+# install theme
+[[ "$color" == '-Dark' ]] && ELSE_DARK="$color"
+[[ "$color" == '-Light' ]] && ELSE_LIGHT="$color"
+[[ "$color" == '-Dark' ]] || [[ "$color" == '' ]] && ACTIVITIES_ASSETS_SUFFIX="-Dark"
-tweaks_temp() {
+#tweaks
+if [[ "$panel" = "float" || "$opacity" == 'solid' || "$window" == 'round' || "$accent" == 'true' || "$blur" == 'true' || "$outline" == 'false' || "$titlebutton" == 'square' ]]; then
+ tweaks='true'
cp -rf ${SRC_DIR}/_sass/_tweaks.scss ${SRC_DIR}/_sass/_tweaks-temp.scss
cp -rf ${SRC_DIR}/gnome-shell/sass/_tweaks.scss ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
-}
+fi
-install_float_panel() {
+if [[ "$panel" = "float" ]] ; then
sed -i "/\$panel_style:/s/compact/float/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
sed -i "/\$panel_style:/s/compact/float/" ${SRC_DIR}/_sass/_tweaks-temp.scss
-}
+fi
-install_solid() {
+if [[ "$opacity" = "solid" ]] ; then
sed -i "/\$opacity:/s/default/solid/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
sed -i "/\$opacity:/s/default/solid/" ${SRC_DIR}/_sass/_tweaks-temp.scss
echo -e "Install solid version ..."
-}
+fi
-install_round() {
+if [[ "$window" = "round" ]] ; then
sed -i "/\$window:/s/default/round/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
sed -i "/\$window:/s/default/round/" ${SRC_DIR}/_sass/_tweaks-temp.scss
-}
+fi
-install_blur() {
+if [[ "$blur" = "true" ]] ; then
sed -i "/\$blur:/s/false/true/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
sed -i "/\$blur:/s/false/true/" ${SRC_DIR}/_sass/_tweaks-temp.scss
-}
+fi
-install_noborder() {
+if [[ "$outline" = "false" ]] ; then
sed -i "/\$outline:/s/true/false/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
sed -i "/\$outline:/s/true/false/" ${SRC_DIR}/_sass/_tweaks-temp.scss
-}
+fi
-install_square() {
+if [[ "$titlebutton" = "square" ]] ; then
sed -i "/\$titlebutton:/s/circular/square/" ${SRC_DIR}/_sass/_tweaks-temp.scss
-}
+fi
-activities_style() {
+if [[ "$activities" = "default" ]] ; then
sed -i "/\$activities:/s/icon/default/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
-}
-
-install_theme_color() {
- if [[ "$theme" != '' ]]; then
- case "$theme" in
- -purple)
- theme_color='purple'
- ;;
- -pink)
- theme_color='pink'
- ;;
- -red)
- theme_color='red'
- ;;
- -orange)
- theme_color='orange'
- ;;
- -yellow)
- theme_color='yellow'
- ;;
- -green)
- theme_color='green'
- ;;
- -teal)
- theme_color='teal'
- ;;
- -grey)
- theme_color='grey'
- ;;
- esac
- sed -i "/\$theme:/s/default/${theme_color}/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
- sed -i "/\$theme:/s/default/${theme_color}/" ${SRC_DIR}/_sass/_tweaks-temp.scss
- fi
-}
+fi
-theme_tweaks() {
- if [[ "$panel" = "float" || "$opacity" == 'solid' || "$window" == 'round' || "$accent" == 'true' || "$blur" == 'true' || "$outline" == 'false' || "$titlebutton" == 'square' ]]; then
- tweaks='true'
- tweaks_temp
- fi
+#install_theme_color
+if [[ "$theme" != '' ]]; then
+ case "$theme" in
+ -purple)
+ theme_color='purple'
+ ;;
+ -pink)
+ theme_color='pink'
+ ;;
+ -red)
+ theme_color='red'
+ ;;
+ -orange)
+ theme_color='orange'
+ ;;
+ -yellow)
+ theme_color='yellow'
+ ;;
+ -green)
+ theme_color='green'
+ ;;
+ -teal)
+ theme_color='teal'
+ ;;
+ -grey)
+ theme_color='grey'
+ ;;
+ esac
+ sed -i "/\$theme:/s/default/${theme_color}/" ${SRC_DIR}/gnome-shell/sass/_tweaks-temp.scss
+ sed -i "/\$theme:/s/default/${theme_color}/" ${SRC_DIR}/_sass/_tweaks-temp.scss
+fi
- if [[ "$panel" = "float" ]] ; then
- install_float_panel
- fi
+echo "Installing '$THEME_DIR'..."
- if [[ "$opacity" = "solid" ]] ; then
- install_solid
- fi
+mkdir -p "$THEME_DIR"
+cp -r "$REPO_DIR/COPYING" "$THEME_DIR"
+
+echo "[Desktop Entry]" >> "$THEME_DIR/index.theme"
+echo "Type=X-GNOME-Metatheme" >> "$THEME_DIR/index.theme"
+echo "Name=$THEME_NAME" >> "$THEME_DIR/index.theme"
+echo "Comment=An Materia Gtk+ theme based on Elegant Design" >> "$THEME_DIR/index.theme"
+echo "Encoding=UTF-8" >> "$THEME_DIR/index.theme"
+echo "" >> "$THEME_DIR/index.theme"
+echo "[X-GNOME-Metatheme]" >> "$THEME_DIR/index.theme"
+echo "GtkTheme=$THEME_NAME" >> "$THEME_DIR/index.theme"
+echo "MetacityTheme=$THEME_NAME" >> "$THEME_DIR/index.theme"
+echo "IconTheme=Fluent${ELSE_DARK:-}" >> "$THEME_DIR/index.theme"
+echo "CursorTheme=Fluent${ELSE_DARK:-}" >> "$THEME_DIR/index.theme"
+echo "ButtonLayout=close,minimize,maximize:menu" >> "$THEME_DIR/index.theme"
+
+# gnome-shell
+
+mkdir -p "$THEME_DIR/gnome-shell"
+cp -r "$SRC_DIR/gnome-shell/pad-osd.css" "$THEME_DIR/gnome-shell"
+$SASSC_BIN $SASSC_OPT "$SRC_DIR/gnome-shell/shell-$GS_VERSION/gnome-shell$color$size.scss" "$THEME_DIR/gnome-shell/gnome-shell.css"
+
+cp -r "${SRC_DIR}/gnome-shell/common-assets" "$THEME_DIR/gnome-shell/assets"
+cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/"*.svg "$THEME_DIR/gnome-shell/assets"
+cp -r "${SRC_DIR}/gnome-shell/theme$theme/"*.svg "$THEME_DIR/gnome-shell/assets"
+cp -r "${SRC_DIR}/gnome-shell/assets${ACTIVITIES_ASSETS_SUFFIX:-}/activities/activities${icon}.svg" "$THEME_DIR/gnome-shell/assets/activities.svg"
+
+if [[ "$window" = "round" ]] ; then
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/buttons-round/"*.svg "$THEME_DIR/gnome-shell/assets"
+else
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/buttons/"*.svg "$THEME_DIR/gnome-shell/assets"
+fi
+
+if [[ "$color" = "-Light" ]] ; then
+ cp -r "${SRC_DIR}/gnome-shell/assets-Dark/activities/activities${icon}.svg" "$THEME_DIR/gnome-shell/assets/activities-white.svg"
+fi
+
+if [[ "$opacity" = "solid" ]] ; then
if [[ "$window" = "round" ]] ; then
- install_round
+ if [[ "$outline" = "" ]] ; then
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid-round/"*.svg "$THEME_DIR/gnome-shell/assets"
+ else
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid-round-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
+ fi
+ else
+ if [[ "$outline" = "" ]] ; then
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid/"*.svg "$THEME_DIR/gnome-shell/assets"
+ else
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/solid-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
+ fi
fi
-
- if [[ "$blur" = "true" ]] ; then
- install_blur
+else
+ if [[ "$window" = "round" ]] ; then
+ if [[ "$outline" = "" ]] ; then
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default-round/"*.svg "$THEME_DIR/gnome-shell/assets"
+ else
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default-round-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
+ fi
+ else
+ if [[ "$outline" = "" ]] ; then
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default/"*.svg "$THEME_DIR/gnome-shell/assets"
+ else
+ cp -r "${SRC_DIR}/gnome-shell/assets${ELSE_DARK:-}/default-borderless/"*.svg "$THEME_DIR/gnome-shell/assets"
+ fi
fi
+fi
- if [[ "$outline" = "false" ]] ; then
- install_noborder
- fi
+cd "$THEME_DIR/gnome-shell"
+ln -sf assets/no-events.svg no-events.svg
+ln -sf assets/process-working.svg process-working.svg
+ln -sf assets/no-notifications.svg no-notifications.svg
- if [[ "$titlebutton" = "square" ]] ; then
- install_square
- fi
+# gtk-2.0
- if [[ "$activities" = "default" ]] ; then
- activities_style
- fi
-}
-
-clean_theme() {
- local dest="${dest:-$DEST_DIR}"
- local name="${_name:-$THEME_NAME}"
-
- local THEME_DIR="$dest/$name"
-
- rm -rf "${THEME_DIR}"/{cinnamon,gnome-shell,gtk-2.0,gtk-3.0,gtk-4.0,metacity-1,plank,xfwm4,index.theme}
-}
-
-install_theme() {
- for theme in "${themes[@]}"; do
- for color in "${colors[@]}"; do
- for size in "${sizes[@]}"; do
- install "${dest:-$DEST_DIR}" "${_name:-$THEME_NAME}" "$theme" "$color" "$size" "$icon"
- done
- done
- done
-}
+mkdir -p "$THEME_DIR/gtk-2.0"
+cp -r "$SRC_DIR/gtk-2.0/common/"{apps.rc,hacks.rc,main.rc} "$THEME_DIR/gtk-2.0"
+cp -r "$SRC_DIR/gtk-2.0/assets-folder/assets$theme${ELSE_DARK:-}" "$THEME_DIR/gtk-2.0/assets"
+cp -r "$SRC_DIR/gtk-2.0/gtkrc$theme${ELSE_DARK:-}" "$THEME_DIR/gtk-2.0/gtkrc"
+
+# gtk-3.0
+
+mkdir -p "$THEME_DIR/gtk-3.0"
+cp -r "$SRC_DIR/gtk/assets$theme" "$THEME_DIR/gtk-3.0/assets"
+cp -r "$SRC_DIR/gtk/scalable" "$THEME_DIR/gtk-3.0/assets"
+cp -r "$SRC_DIR/gtk/thumbnail$theme${ELSE_DARK:-}.png" "$THEME_DIR/gtk-3.0/thumbnail.png"
+
+$SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/3.0/gtk$color$size.scss" "$THEME_DIR/gtk-3.0/gtk.css"
+$SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/3.0/gtk-Dark$size.scss" "$THEME_DIR/gtk-3.0/gtk-dark.css"
+
+# gtk-4.0
+
+mkdir -p "$THEME_DIR/gtk-4.0"
+cp -r "$SRC_DIR/gtk/assets$theme" "$THEME_DIR/gtk-4.0/assets"
+cp -r "$SRC_DIR/gtk/scalable" "$THEME_DIR/gtk-4.0/assets"
+
+$SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/4.0/gtk$color$size.scss" "$THEME_DIR/gtk-4.0/gtk.css"
+$SASSC_BIN $SASSC_OPT "$SRC_DIR/gtk/4.0/gtk-Dark$size.scss" "$THEME_DIR/gtk-4.0/gtk-dark.css"
+
+# cinnamon
+
+mkdir -p "$THEME_DIR/cinnamon"
+cp -r "$SRC_DIR/cinnamon/common-assets" "$THEME_DIR/cinnamon/assets"
+cp -r "$SRC_DIR/cinnamon/assets${ELSE_DARK:-}/"*.svg "$THEME_DIR/cinnamon/assets"
+
+$SASSC_BIN $SASSC_OPT "$SRC_DIR/cinnamon/cinnamon$color$size.scss" "$THEME_DIR/cinnamon/cinnamon.css"
+
+cp -r "$SRC_DIR/cinnamon/thumbnail$theme$color.png" "$THEME_DIR/cinnamon/thumbnail.png"
+
+# xfwm4
+
+mkdir -p "$THEME_DIR/xfwm4"
+
+if [[ "$titlebutton" = "square" ]] ; then
+ cp -r "$SRC_DIR/xfwm4/assets-square$color/"*.png "$THEME_DIR/xfwm4"
+ cp -r "$SRC_DIR/xfwm4/themerc-square${ELSE_LIGHT:-}" "$THEME_DIR/xfwm4/themerc"
+else
+ cp -r "$SRC_DIR/xfwm4/assets$color/"*.png "$THEME_DIR/xfwm4"
+ cp -r "$SRC_DIR/xfwm4/themerc${ELSE_LIGHT:-}" "$THEME_DIR/xfwm4/themerc"
+fi
+
+# metacity
+
+mkdir -p "$THEME_DIR/metacity-1"
+cp -r "$SRC_DIR/metacity-1/metacity-theme-2$color.xml" "$THEME_DIR/metacity-1/metacity-theme-2.xml"
+
+if [[ "$window" = "round" ]] ; then
+ cp -r "$SRC_DIR/metacity-1/metacity-theme-3-round.xml" "$THEME_DIR/metacity-1/metacity-theme-3.xml"
+ cp -r "$SRC_DIR/metacity-1/assets-round" "$THEME_DIR/metacity-1/assets"
+else
+ cp -r "$SRC_DIR/metacity-1/metacity-theme-3.xml" "$THEME_DIR/metacity-1"
+ cp -r "$SRC_DIR/metacity-1/assets" "$THEME_DIR/metacity-1"
+fi
+
+cp -r "$SRC_DIR/metacity-1/thumbnail${ELSE_DARK:-}.png" "$THEME_DIR/metacity-1/thumbnail.png"
+cd "$THEME_DIR/metacity-1" && ln -sf metacity-theme-2.xml metacity-theme-1.xml
+
+# plank
-clean_theme && install_theme
+mkdir -p "$THEME_DIR/plank"
+cp -r "$SRC_DIR/plank/theme${ELSE_LIGHT:-}/dock.theme" "$THEME_DIR/plank"
echo
echo "Done."
diff --git a/Fluent/files/Fluent/config/src/xfwm4/assets-Dark.svg b/Fluent/files/Fluent/config/src/xfwm4/assets-Dark.svg
deleted file mode 100644
index faa18b120..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/assets-Dark.svg
+++ /dev/null
@@ -1,286 +0,0 @@
-
diff --git a/Fluent/files/Fluent/config/src/xfwm4/assets-Light.svg b/Fluent/files/Fluent/config/src/xfwm4/assets-Light.svg
deleted file mode 100644
index d296576d3..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/assets-Light.svg
+++ /dev/null
@@ -1,286 +0,0 @@
-
diff --git a/Fluent/files/Fluent/config/src/xfwm4/assets-square-Dark.svg b/Fluent/files/Fluent/config/src/xfwm4/assets-square-Dark.svg
deleted file mode 100644
index bdc6c1dea..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/assets-square-Dark.svg
+++ /dev/null
@@ -1,1329 +0,0 @@
-
-
diff --git a/Fluent/files/Fluent/config/src/xfwm4/assets-square-Light.svg b/Fluent/files/Fluent/config/src/xfwm4/assets-square-Light.svg
deleted file mode 100644
index 614e81e5b..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/assets-square-Light.svg
+++ /dev/null
@@ -1,1375 +0,0 @@
-
-
diff --git a/Fluent/files/Fluent/config/src/xfwm4/assets-square.svg b/Fluent/files/Fluent/config/src/xfwm4/assets-square.svg
deleted file mode 100644
index 24cd8ef12..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/assets-square.svg
+++ /dev/null
@@ -1,1361 +0,0 @@
-
-
diff --git a/Fluent/files/Fluent/config/src/xfwm4/assets.svg b/Fluent/files/Fluent/config/src/xfwm4/assets.svg
deleted file mode 100644
index f08678e68..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/assets.svg
+++ /dev/null
@@ -1,286 +0,0 @@
-
diff --git a/Fluent/files/Fluent/config/src/xfwm4/assets.txt b/Fluent/files/Fluent/config/src/xfwm4/assets.txt
deleted file mode 100644
index a25776e1d..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/assets.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-close-active
-close-inactive
-close-prelight
-close-pressed
-hide-active
-hide-inactive
-hide-prelight
-hide-pressed
-maximize-active
-maximize-inactive
-maximize-prelight
-maximize-pressed
-maximize-toggled-active
-maximize-toggled-inactive
-maximize-toggled-prelight
-maximize-toggled-pressed
-menu-active
-menu-inactive
-menu-prelight
-menu-pressed
-shade-active
-shade-inactive
-shade-prelight
-shade-pressed
-shade-toggled-active
-shade-toggled-inactive
-shade-toggled-prelight
-shade-toggled-pressed
-stick-active
-stick-inactive
-stick-prelight
-stick-pressed
-stick-toggled-active
-stick-toggled-inactive
-stick-toggled-prelight
-stick-toggled-pressed
-title-1-active
-title-1-inactive
-title-2-active
-title-2-inactive
-title-3-active
-title-3-inactive
-title-4-active
-title-4-inactive
-title-5-active
-title-5-inactive
-top-left-active
-top-left-inactive
-top-right-active
-top-right-inactive
-left-active
-left-inactive
-right-active
-right-inactive
-bottom-active
-bottom-inactive
-bottom-left-active
-bottom-left-inactive
-bottom-right-active
-bottom-right-inactive
diff --git a/Fluent/files/Fluent/config/src/xfwm4/render-assets.sh b/Fluent/files/Fluent/config/src/xfwm4/render-assets.sh
deleted file mode 100755
index 7618235a7..000000000
--- a/Fluent/files/Fluent/config/src/xfwm4/render-assets.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#! /bin/bash
-
-INKSCAPE="/usr/bin/inkscape"
-OPTIPNG="/usr/bin/optipng"
-
-INDEX="assets.txt"
-
-for window in '' '-square'; do
-for color in '' '-Light' '-Dark'; do
-
-ASSETS_DIR="assets${window}${color}"
-SRC_FILE="assets${window}${color}.svg"
-
-mkdir -p $ASSETS_DIR
-
-for i in `cat $INDEX`; do
-if [ -f $ASSETS_DIR/$i.png ]; then
- echo $ASSETS_DIR/$i.png exists.
-else
- echo
- echo Rendering $ASSETS_DIR/$i.png
- $INKSCAPE --export-id=$i \
- --export-id-only \
- --export-filename=$ASSETS_DIR/$i.png $SRC_FILE >/dev/null \
- && $OPTIPNG -o7 --quiet $ASSETS_DIR/$i.png
-fi
-done
-
-done
-done
-
-exit 0
diff --git a/Fluent/files/Fluent/index.theme b/Fluent/files/Fluent/index.theme
index 57a7d51a2..390dd0cb6 100644
--- a/Fluent/files/Fluent/index.theme
+++ b/Fluent/files/Fluent/index.theme
@@ -1,12 +1,12 @@
[Desktop Entry]
Type=X-GNOME-Metatheme
-Name=Fluent321
+Name=Fluent
Comment=An Materia Gtk+ theme based on Elegant Design
Encoding=UTF-8
[X-GNOME-Metatheme]
-GtkTheme=Fluent321
-MetacityTheme=Fluent321
-IconTheme=Fluent321
-CursorTheme=Fluent321
+GtkTheme=Fluent
+MetacityTheme=Fluent
+IconTheme=Fluent
+CursorTheme=Fluent
ButtonLayout=close,minimize,maximize:menu
diff --git a/Fluent/files/Fluent/options.py b/Fluent/files/Fluent/options.py
index 5be7547f9..8385e5786 100755
--- a/Fluent/files/Fluent/options.py
+++ b/Fluent/files/Fluent/options.py
@@ -1,29 +1,38 @@
#!/usr/bin/python3
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+gi.require_version('Gdk', '3.0')
+from gi.repository import Gdk
+from gi.repository import Gio, GLib
+import json
import os
-from gi.repository import Gio
import subprocess
-from config import config_gui
+import string
+import random
import time
'''
-$XDG_CURRENT_DESKTOP values:
-Cinnamon: "X-Cinnamon"
-GNOME: "GNOME"
-MATE: "MATE"
-XFCE: "XFCE"
-pop: "pop:GNOME"
-Pantheon: "Pantheon"
-
-Desktops:
-GNOME, XFCE (xubuntu 23, Manjaro xfce 22), MATE, Unity (Ubuntu Unity 23): Works OK
-Cinnamon, Pantheon (elementaryos-7): Works OK, but don't know how to update wm
- theme without renaming theme
-pop (popOS 22): Treat as GNOME but doesn't seem to affect some gtk3 apps or wm
- theme (and neither does GNOME tweaks)
-Budgie (Ubuntu Budgie 23): Works OK, but don't know how to update wm theme without
- renaming theme and have to set org.gnome.desktop.interface color-scheme as it changes
- to "prefer-dark" each time.
+Dist, $XDG_CURRENT_DESKTOP, $XDG_SESSION_TYPE
+Ubuntu 18.04, ubuntu:GNOME, x11, rename theme.
+Ubuntu 20.04, ubuntu:GNOME, x11, rename theme.
+Ubuntu 22.04, ubuntu:GNOME, x11, rename theme.
+Manjaro gnome 23 GNOME, x11, rename theme.
+Fedora 39, GNOME, wayland, ok
+Ubuntu Unity 23 Unity:Unity7:ubuntu, x11 ok
+xubuntu 23 XFCE, x11, ok
+Manjaro xfce 22 XFCE, x11, ok
+MX Linux 23.2 XFCE, x11,
+Manjaro Cinnamon X-Cinnamon, x11, rename theme.
+Manjaro Cinnamon X-Cinnamon, wayland, ok
+Mint 21.3 cinnamon X-Cinnamon, x11, rename theme
+Mint 21.1 cinnamon X-Cinnamon, x11, rename theme
+Mint 21.3 mate MATE, x11, ok
+elementaryos-7 Pantheon, x11, rename theme. Has no effect on gtk3 apps
+popOS 22, pop:GNOME, x11, rename theme.
+Ubuntu Budgie 23 Budgie:GNOME, x11, rename theme and set org.gnome.desktop.interface
+ color-scheme as it changes to "prefer-dark" each time.
'''
rename_theme_on_update = False
desktop_environment = os.environ.get('XDG_CURRENT_DESKTOP')
@@ -36,11 +45,16 @@
desktop_environment = 'Unity'
elif "pop" in desktop_environment:
desktop_environment = 'pop'
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
+elif "ubuntu:GNOME" in desktop_environment:
+ desktop_environment = 'ubuntu:GNOME'
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "GNOME" in desktop_environment:
desktop_environment = 'GNOME'
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "Cinnamon" in desktop_environment:
desktop_environment = "Cinnamon"
- rename_theme_on_update = True
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "MATE" in desktop_environment:
desktop_environment = "MATE"
elif "XFCE" in desktop_environment:
@@ -48,11 +62,285 @@
elif "Pantheon" in desktop_environment:
desktop_environment = "Pantheon"
rename_theme_on_update = True
-else:
- desktop_environment = "Unknown"
print(f"Desktop environment is: {desktop_environment}...")
+class OptionsWindow(Gtk.Window):
+ def __init__(self, desktop_environment, rename_theme_on_update):
+ super().__init__(title="")
+
+ self.desktop_environment = desktop_environment
+ self.rename_theme_on_update = rename_theme_on_update
+
+ self.current_theme_dir = os.path.dirname(os.path.abspath(__file__))
+ self.current_theme_name = os.path.basename(self.current_theme_dir)
+
+ self.set_default_size(500, 100)
+
+ box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 15)
+ box.set_margin_top(20)
+ box.set_margin_bottom(20)
+ box.set_margin_start(35)
+ box.set_margin_end(35)
+ self.add(box)
+ self.set_icon_name("applications-graphics")
+
+ self.load_config_file()
+ theme_name = self.options.get("theme_name", "?")
+ self.set_title("%s theme options" % theme_name)
+
+ self.widgets = {}
+
+ for option in self.options["options"]:
+ desktops = option["desktop"]
+ if isinstance(desktops, str):
+ desktops = [desktops]
+ if not ("all" in desktops or self.desktop_environment in desktops):
+ continue
+
+ if option["type"] == "combo":
+ combobox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ combobox_label = Gtk.Label.new(option["label"])
+ combobox_label.set_halign(Gtk.Align.START)
+ combobox.pack_start(combobox_label, True, True, 0)
+ combo_widget = Gtk.ComboBoxText.new()
+ for label in option["labels"]:
+ combo_widget.append_text(label)
+ combo_widget.set_active(option["value"])
+ combo_widget.set_halign(Gtk.Align.END)
+ combo_widget.connect("changed", self.on_setting_changed)
+ combobox.pack_start(combo_widget, True, True, 0)
+ box.pack_start(combobox, False, True, 0)
+ self.widgets[option["name"]] = combo_widget
+ elif option["type"] == "switch":
+ switchbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ switchbox_label = Gtk.Label.new(option["label"])
+ switchbox_label.set_halign(Gtk.Align.START)
+ switchbox.pack_start(switchbox_label, True, True, 0)
+ switch = Gtk.Switch.new()
+ switch.set_active(option["value"])
+ switch.set_halign(Gtk.Align.END)
+ switch.set_valign(Gtk.Align.CENTER)
+ switch.connect("state-set", self.on_setting_changed)
+ switchbox.pack_start(switch, True, True, 0)
+ box.pack_start(switchbox, False, True, 0)
+ self.widgets[option["name"]] = switch
+ elif option["type"] == "color-chooser":
+ colorbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ colorbox_label = Gtk.Label.new(option["label"])
+ colorbox_label.set_halign(Gtk.Align.START)
+ colorbox.pack_start(colorbox_label, True, True, 0)
+ colorButton = Gtk.ColorButton.new()
+ color = Gdk.RGBA()
+ color.parse(option["value"])
+ colorButton.set_rgba(color)
+ colorButton.set_halign(Gtk.Align.END)
+ colorButton.set_valign(Gtk.Align.CENTER)
+ colorButton.connect("color-set", self.on_setting_changed)
+ colorbox.pack_start(colorButton, True, True, 0)
+ box.pack_start(colorbox, False, True, 0)
+ self.widgets[option["name"]] = colorButton
+ elif option["type"] == "spinbutton":
+ spinbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ spinbox_label = Gtk.Label.new(option["label"])
+ spinbox_label.set_halign(Gtk.Align.START)
+ spinbox.pack_start(spinbox_label, True, True, 0)
+ spinbutton = Gtk.SpinButton.new_with_range(option["min"],option["max"],option["step"])
+ spinbutton.set_value(option["value"])
+ spinbutton.set_snap_to_ticks(True)
+ spinbutton.set_halign(Gtk.Align.END)
+ spinbutton.set_valign(Gtk.Align.CENTER)
+ spinbutton.connect("changed", self.on_setting_changed)
+ spinbox.pack_start(spinbutton, True, True, 0)
+ box.pack_start(spinbox, False, True, 0)
+ self.widgets[option["name"]] = spinbutton
+ #---------------------------
+ if len(self.widgets) > 0:
+ xfwm_dir = os.path.join(self.current_theme_dir, "xfwm4")
+ if (self.desktop_environment == "XFCE" and os.path.exists(xfwm_dir)):
+ label = Gtk.Label.new("For title bar changes, ensure 'Set matching Xfwm4 theme'"\
+ " in Appearance settings is checked.")
+ label.set_line_wrap(True)
+ label.set_size_request(450, -1)
+ box.pack_start(label, False, True, 0)
+ #---------------------------
+ self.applybutton = Gtk.Button.new_with_label("Apply")
+ self.applybutton.set_halign(Gtk.Align.CENTER)
+ self.applybutton.set_valign(Gtk.Align.END)
+ self.applybutton.set_sensitive(False)
+ self.applybutton.connect("clicked", self.on_apply_button_clicked)
+ box.pack_start(self.applybutton, False, True, 0)
+ #---------------------------
+ separator = Gtk.Separator.new(Gtk.Orientation.HORIZONTAL)
+ separator.set_valign(Gtk.Align.END)
+ box.pack_start(separator, False, True, 0)
+ #---------------------------
+ setthemebox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ self.setthemebox_label = Gtk.Label.new("")
+ self.setthemebox_label.set_halign(Gtk.Align.START)
+ setthemebox.pack_start(self.setthemebox_label, True, True, 0)
+ self.setthemebox_button = Gtk.Button.new()
+ self.setthemebox_button.set_label("Set theme")
+ self.setthemebox_button.set_halign(Gtk.Align.END)
+ self.setthemebox_button.set_valign(Gtk.Align.CENTER)
+ self.setthemebox_button.connect("clicked", self.on_setthemebox_button_clicked)
+ setthemebox.pack_start(self.setthemebox_button, True, True, 0)
+ box.pack_start(setthemebox, False, True, 0)
+ self.update_setthemebox()
+ #---------------------------
+ if self.options.get("adwaita_link_to_gtk4", False):
+ adwaitabox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ self.adwaitabox_label = Gtk.Label.new("")
+ self.adwaitabox_label.set_halign(Gtk.Align.START)
+ adwaitabox.pack_start(self.adwaitabox_label, True, True, 0)
+ self.adwaitabox_button = Gtk.Button.new()
+ self.adwaitabox_button.set_halign(Gtk.Align.END)
+ self.adwaitabox_button.set_valign(Gtk.Align.CENTER)
+ self.adwaitabox_button.connect("clicked", self.on_adwaitabox_button_clicked)
+ adwaitabox.pack_start(self.adwaitabox_button, True, True, 0)
+ box.pack_start(adwaitabox, False, True, 0)
+ self.update_adwaitabox()
+
+ def update_adwaitabox(self):
+ if is_libadwaita_linked(self.current_theme_dir):
+ self.adwaitabox_label.set_text("This theme is your current libadwaita theme")
+ self.adwaitabox_button.set_label("Remove")
+ else:
+ self.adwaitabox_label.set_text("Set this theme as your current libadwaita theme")
+ self.adwaitabox_button.set_label("Install")
+
+ def on_adwaitabox_button_clicked(self, button):
+ if is_libadwaita_linked(self.current_theme_dir): # "Remove" clicked
+ unlink_libadwaita()
+ else: # "Install" clicked
+ unlink_libadwaita()
+ link_libadwaita(self.current_theme_dir)
+
+ self.update_adwaitabox()
+
+ def update_setthemebox(self):
+ if is_current_theme(self.current_theme_name):
+ self.setthemebox_label.set_text("This theme is your current desktop theme")
+ self.setthemebox_button.set_sensitive(False)
+ else:
+ self.setthemebox_label.set_text("This theme is not your current desktop theme")
+ self.setthemebox_button.set_sensitive(True)
+
+ def on_setthemebox_button_clicked(self, button):
+ set_theme(self.current_theme_name)
+ self.update_setthemebox()
+
+ def on_setting_changed(self, *args):
+ self.applybutton.set_sensitive(True)
+
+ def load_config_file(self):
+ file_name = os.path.join(self.current_theme_dir, "config", "options_config.json")
+ with open(file_name, "r") as file:
+ self.options = json.load(file)
+
+ def save_config_file(self, new_theme_dir):
+ file_name = os.path.join(new_theme_dir, "config", "options_config.json")
+ with open(file_name, "w") as file:
+ json.dump(self.options, file, indent=4)
+
+ def get_new_theme_names(self):
+ if self.rename_theme_on_update:
+ random_chars = "".join(random.choices(string.digits, k=3))
+ new_theme_name = self.options["theme_name"] + random_chars
+ new_theme_dir = os.path.join(os.path.dirname(self.current_theme_dir), new_theme_name)
+ print ("Renaming theme to " + new_theme_name + "...")
+ else: #keep same name
+ new_theme_dir = self.current_theme_dir
+ new_theme_name = self.current_theme_name
+ return (new_theme_dir, new_theme_name)
+
+ def on_apply_button_clicked(self, button):
+ new_theme_dir, new_theme_name = self.get_new_theme_names()
+ #Rename theme directory if neccessary
+ if new_theme_dir != self.current_theme_dir:
+ os.rename(self.current_theme_dir, new_theme_dir)
+
+ #prepare install command and store settings
+ command = ['bash', os.path.join(new_theme_dir, 'config', self.options["script_name"])]
+
+ for option in self.options["options"]:
+ desktops = option["desktop"]
+ if isinstance(desktops, str):
+ desktops = [desktops]
+ if "all" in desktops or self.desktop_environment in desktops:
+ if option["type"] == "combo":
+ command.append("--" + option["name"])
+ value = self.widgets[option["name"]].get_active()
+ option["value"] = value
+ value_id = option["ids"][value]
+ command.append(value_id)
+ elif option["type"] == "switch":
+ value = self.widgets[option["name"]].get_active()
+ option["value"] = value
+ if value:
+ command.append("--" + option["name"])
+ elif option["type"] == "color-chooser":
+ command.append("--" + option["name"])
+ rgba = self.widgets[option["name"]].get_rgba()
+ red = int(round(rgba.red * 255))
+ green = int(round(rgba.green * 255))
+ blue = int(round(rgba.blue * 255))
+ value = f"#{red:02x}{green:02x}{blue:02x}"
+ option["value"] = value
+ command.append(value)
+ elif option["type"] == "spinbutton":
+ command.append("--" + option["name"])
+ value = self.widgets[option["name"]].get_value()
+ if value == int(value):
+ value = int(value)
+ option["value"] = value
+ command.append(str(value))
+
+ #Install theme
+ print ("Running..." + " ".join(command))
+ subprocess.run(command, check=True)
+ print("Install finished OK")
+
+ #save settings
+ self.save_config_file(new_theme_dir)
+
+ #apply desktop theme
+ update_theme(self.current_theme_name, new_theme_name)
+ self.applybutton.set_sensitive(False)
+
+ #Relink libadwaita if neccessary
+ if new_theme_name != self.current_theme_name and is_libadwaita_linked(self.current_theme_dir):
+ unlink_libadwaita()
+ link_libadwaita(new_theme_dir)
+
+ #update theme name
+ self.current_theme_dir = new_theme_dir
+ self.current_theme_name = new_theme_name
+
+def is_link_to(link, target):
+ return os.path.islink(link) and os.readlink(link) == target
+
+def is_libadwaita_linked(theme_dir):
+ config_dir = os.path.expanduser('~/.config/gtk-4.0/')
+ return (is_link_to(os.path.join(config_dir, 'assets'), os.path.join(theme_dir, 'gtk-4.0', 'assets')) and
+ is_link_to(os.path.join(config_dir, 'gtk.css'), os.path.join(theme_dir, 'gtk-4.0', 'gtk.css')) and
+ is_link_to(os.path.join(config_dir, 'gtk-dark.css'), os.path.join(theme_dir, 'gtk-4.0', 'gtk-dark.css')))
+
+def link_libadwaita(theme_dir):
+ config_dir = os.path.expanduser('~/.config/gtk-4.0/')
+ os.makedirs(config_dir, exist_ok=True)
+ os.symlink(os.path.join(theme_dir, 'gtk-4.0', 'assets'), os.path.join(config_dir, 'assets'), target_is_directory = True)
+ os.symlink(os.path.join(theme_dir, 'gtk-4.0', 'gtk.css'), os.path.join(config_dir, 'gtk.css'))
+ os.symlink(os.path.join(theme_dir, 'gtk-4.0', 'gtk-dark.css'), os.path.join(config_dir, 'gtk-dark.css'))
+
+def unlink_libadwaita():
+ config_dir = os.path.expanduser('~/.config/gtk-4.0/')
+ subprocess.run(["rm", "-rf", config_dir + "assets"])
+ subprocess.run(["rm", "-rf", config_dir + "gtk.css"])
+ subprocess.run(["rm", "-rf", config_dir + "gtk-dark.css"])
+
+#---------------------------------------------------
+
def gsettings_get(schema, key):
if Gio.SettingsSchemaSource.get_default().lookup(schema, True) is not None:
setting = Gio.Settings.new(schema)
@@ -60,14 +348,11 @@ def gsettings_get(schema, key):
else:
return ""
-def gsettings_set(schema, key, old_value, new_value, reload_only):
- if not reload_only or gsettings_get(schema, key) == old_value:
- if Gio.SettingsSchemaSource.get_default().lookup(schema, True) is not None:
- print ("gsettings resetting " + schema + " " + key)
- setting = Gio.Settings.new(schema)
- if new_value == old_value:
- setting.set_string(key, "")
- setting.set_string(key, new_value)
+def gsettings_set(schema, key, value):
+ if Gio.SettingsSchemaSource.get_default().lookup(schema, True) is not None:
+ print ("gsettings setting " + schema + " " + key + " " + value)
+ setting = Gio.Settings.new(schema)
+ setting.set_string(key, value)
def xfconf_get(channel, key):
try:
@@ -78,53 +363,113 @@ def xfconf_get(channel, key):
output = ""
return output.rstrip("\n")
-def xfconf_set(channel, key, theme_name, reload_only):
- if not reload_only or xfconf_get(channel, key) == theme_name:
+def xfconf_set(channel, key, value):
+ try:
+ print ("xfconf-query setting ", channel, key, value)
+ subprocess.run(["xfconf-query", "-c", channel, "-p", key, "-s", value])
+ except Exception as e:
+ print("xfconf-query error: ", e)
+
+def xfconf_reset(channel, key):
+ try:
print ("xfconf-query resetting ", channel, key)
subprocess.run(["xfconf-query", "-c", channel, "-p", key, "-r"])
- subprocess.run(["xfconf-query", "-c", channel, "-p", key, "-s", theme_name])
+ except Exception as e:
+ print("xfconf-query error: ", e)
def is_current_theme(current_theme_name):
- if desktop_environment in {"GNOME", "pop", "Pantheon", "Budgie", "Unity"}:
+ if desktop_environment in {"GNOME", "ubuntu:GNOME", "pop", "Pantheon", "Budgie", "Unity"}:
return gsettings_get("org.gnome.desktop.interface",
"gtk-theme") == current_theme_name
elif desktop_environment == "Cinnamon":
- return gsettings_get("org.cinnamon.desktop.interface",
- "gtk-theme") == current_theme_name
+ return gsettings_get("org.cinnamon.desktop.interface", "gtk-theme") == current_theme_name
#return gsettings_get("org.cinnamon.theme", "name") == current_theme_name
elif desktop_environment == "XFCE":
return xfconf_get("xsettings", "/Net/ThemeName") == current_theme_name
elif desktop_environment == "MATE":
return gsettings_get("org.mate.interface", "gtk-theme") == current_theme_name
-def set_theme(current_theme_name, new_theme_name, reload_only):
- if desktop_environment in {"GNOME", "pop", "Pantheon"}:
- gsettings_set("org.gnome.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
+def set_theme(theme_name):
+ if desktop_environment in {"ubuntu:GNOME", "GNOME", "pop", "Pantheon"}:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", theme_name)
elif desktop_environment == "Cinnamon":
- gsettings_set("org.cinnamon.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
- gsettings_set("org.cinnamon.theme", "name", current_theme_name,
- new_theme_name, reload_only)
+ gsettings_set("org.cinnamon.desktop.interface", "gtk-theme", theme_name)
elif desktop_environment == "XFCE":
- xfconf_set("xsettings", "/Net/ThemeName", current_theme_name, reload_only)
+ xfconf_set("xsettings", "/Net/ThemeName", theme_name)
#xfconf_set("xfwm4", "/general/theme", current_theme_name, reload_only)
elif desktop_environment == "MATE":
- gsettings_set("org.mate.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
+ gsettings_set("org.mate.interface", "gtk-theme", theme_name)
elif desktop_environment == "Budgie":
setting = Gio.Settings.new("org.gnome.desktop.interface")
current_color_scheme = setting.get_string("color-scheme")
- gsettings_set("org.gnome.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", theme_name)
time.sleep(1)
setting.set_string("color-scheme", current_color_scheme)
elif desktop_environment == "Unity":
- gsettings_set("org.gnome.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
- gsettings_set("org.gnome.desktop.wm.preferences", "theme",
- current_theme_name, new_theme_name, reload_only)
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", theme_name)
+ gsettings_set("org.gnome.desktop.wm.preferences", "theme", theme_name)
+
+def update_theme(current_theme_name, new_theme_name):
+ if desktop_environment in {"ubuntu:GNOME", "GNOME", "pop", "Pantheon"}:
+ if gsettings_get("org.gnome.desktop.interface", "gtk-theme") == current_theme_name:
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", new_theme_name)
+
+ elif desktop_environment == "Cinnamon":
+ def reset_cinnamon_theme():
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.cinnamon.theme", "name", "")
+ gsettings_set("org.cinnamon.theme", "name", new_theme_name)
+ return False
+
+ if gsettings_get("org.cinnamon.desktop.interface", "gtk-theme") == current_theme_name:
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.cinnamon.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.cinnamon.desktop.interface", "gtk-theme", new_theme_name)
+
+ if gsettings_get("org.cinnamon.theme", "name") == current_theme_name:
+ GLib.timeout_add_seconds(1, reset_cinnamon_theme)
+ elif gsettings_get("org.cinnamon.theme", "name") == current_theme_name:
+ reset_cinnamon_theme()
+
+ elif desktop_environment == "XFCE":
+ if xfconf_get("xsettings", "/Net/ThemeName") == current_theme_name:
+ xfconf_reset("xsettings", "/Net/ThemeName")
+ xfconf_set("xsettings", "/Net/ThemeName", new_theme_name)
+ #xfconf_set("xfwm4", "/general/theme", current_theme_name, reload_only)
+
+ elif desktop_environment == "MATE":
+ def set_mate_theme():
+ gsettings_set("org.mate.interface", "gtk-theme", new_theme_name)
+ return False
+
+ if gsettings_get("org.mate.interface", "gtk-theme") == current_theme_name:
+ gsettings_set("org.mate.interface", "gtk-theme", "")
+ GLib.timeout_add_seconds(1, set_mate_theme)
+
+ elif desktop_environment == "Budgie":
+ if gsettings_get("org.gnome.desktop.interface", "gtk-theme") == current_theme_name:
+ setting = Gio.Settings.new("org.gnome.desktop.interface")
+ current_color_scheme = setting.get_string("color-scheme")
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", new_theme_name)
+ time.sleep(1)
+ setting.set_string("color-scheme", current_color_scheme)
+
+ elif desktop_environment == "Unity":
+ if gsettings_get("org.gnome.desktop.interface", "gtk-theme") == current_theme_name:
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.gnome.desktop.wm.preferences", "theme", "")
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", new_theme_name)
+ gsettings_set("org.gnome.desktop.wm.preferences", "theme", new_theme_name)
if __name__ == "__main__":
- config_gui.main(desktop_environment, rename_theme_on_update,
- is_current_theme, set_theme)
+ Gtk.init()
+
+ win = OptionsWindow(desktop_environment, rename_theme_on_update)
+ win.connect("destroy", Gtk.main_quit)
+ win.show_all()
+ Gtk.main()
diff --git a/Fluent/info.json b/Fluent/info.json
index 6bab9ffcf..5a90acd89 100644
--- a/Fluent/info.json
+++ b/Fluent/info.json
@@ -1,6 +1,6 @@
{
"author": "fredcw",
"name": "Fluent",
- "description": "Run options.py in theme folder for options including light/dark, accent color, transparency, etc. Cinnamon, gtk2 - gtk4, and libadwata supported.",
+ "description": "Give execute permissions to and run options.py in theme folder for options including light/dark, accent color, transparency, etc. Cinnamon, gtk2, gtk3, gtk4, and libadwaita supported.",
"license": "GPLv3"
}
diff --git a/Graphite/README.md b/Graphite/README.md
index 4ae290040..a0b3d8ea2 100644
--- a/Graphite/README.md
+++ b/Graphite/README.md
@@ -8,8 +8,8 @@ This is a repackaging of the Graphite theme for convenience of installation and
## Installation
-Most easily installed via Cinnamon's Themes module in Cinnamon settings.
+Install via Cinnamon's Themes module in Cinnamon settings or download from Cinnamon Spices and unzip into your ~/.themes directory.
## Options/Configuration
-Various options are available such as light/dark theme, accent color, etc. Simply go to `~/.themes/Graphite` directory and run `options.py`
+Various options are available such as light/dark theme, accent color, etc. Go to `~/.themes/Graphite` directory and run `options.py`. You may need to give execute permissions to `options.py` first in order to run it (right click on file > Properties > Permissions tab).
diff --git a/Graphite/files/Graphite/config/README.txt b/Graphite/files/Graphite/config/CREDITS
similarity index 100%
rename from Graphite/files/Graphite/config/README.txt
rename to Graphite/files/Graphite/config/CREDITS
diff --git a/Graphite/files/Graphite/config/install.sh b/Graphite/files/Graphite/config/install.sh
index 70d327543..c8548412c 100755
--- a/Graphite/files/Graphite/config/install.sh
+++ b/Graphite/files/Graphite/config/install.sh
@@ -20,7 +20,6 @@ THEME_NAME=$(basename $THEME_DIR)
SASSC_OPT="-M -t expanded"
-THEME_NAME=Graphite
THEME_VARIANTS=('' '-purple' '-pink' '-red' '-orange' '-yellow' '-green' '-teal' '-blue')
COLOR_VARIANTS=('' '-Light' '-Dark')
SIZE_VARIANTS=('' '-compact')
diff --git a/Graphite/files/Graphite/options.py b/Graphite/files/Graphite/options.py
index c47f03d5f..8385e5786 100755
--- a/Graphite/files/Graphite/options.py
+++ b/Graphite/files/Graphite/options.py
@@ -5,7 +5,7 @@
from gi.repository import Gtk
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk
-from gi.repository import Gio
+from gi.repository import Gio, GLib
import json
import os
import subprocess
@@ -14,23 +14,25 @@
import time
'''
-$XDG_CURRENT_DESKTOP values:
-Cinnamon: "X-Cinnamon"
-GNOME: "GNOME"
-MATE: "MATE"
-XFCE: "XFCE"
-pop: "pop:GNOME"
-Pantheon: "Pantheon"
-
-Desktops:
-GNOME, XFCE (xubuntu 23, Manjaro xfce 22), MATE, Unity (Ubuntu Unity 23): Works OK
-Cinnamon, Pantheon (elementaryos-7): Works OK, but don't know how to update wm
- theme without renaming theme
-pop (popOS 22): Treat as GNOME but doesn't seem to affect some gtk3 apps or wm
- theme (and neither does GNOME tweaks)
-Budgie (Ubuntu Budgie 23): Works OK, but don't know how to update wm theme without
- renaming theme and have to set org.gnome.desktop.interface color-scheme as it changes
- to "prefer-dark" each time.
+Dist, $XDG_CURRENT_DESKTOP, $XDG_SESSION_TYPE
+Ubuntu 18.04, ubuntu:GNOME, x11, rename theme.
+Ubuntu 20.04, ubuntu:GNOME, x11, rename theme.
+Ubuntu 22.04, ubuntu:GNOME, x11, rename theme.
+Manjaro gnome 23 GNOME, x11, rename theme.
+Fedora 39, GNOME, wayland, ok
+Ubuntu Unity 23 Unity:Unity7:ubuntu, x11 ok
+xubuntu 23 XFCE, x11, ok
+Manjaro xfce 22 XFCE, x11, ok
+MX Linux 23.2 XFCE, x11,
+Manjaro Cinnamon X-Cinnamon, x11, rename theme.
+Manjaro Cinnamon X-Cinnamon, wayland, ok
+Mint 21.3 cinnamon X-Cinnamon, x11, rename theme
+Mint 21.1 cinnamon X-Cinnamon, x11, rename theme
+Mint 21.3 mate MATE, x11, ok
+elementaryos-7 Pantheon, x11, rename theme. Has no effect on gtk3 apps
+popOS 22, pop:GNOME, x11, rename theme.
+Ubuntu Budgie 23 Budgie:GNOME, x11, rename theme and set org.gnome.desktop.interface
+ color-scheme as it changes to "prefer-dark" each time.
'''
rename_theme_on_update = False
desktop_environment = os.environ.get('XDG_CURRENT_DESKTOP')
@@ -43,11 +45,16 @@
desktop_environment = 'Unity'
elif "pop" in desktop_environment:
desktop_environment = 'pop'
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
+elif "ubuntu:GNOME" in desktop_environment:
+ desktop_environment = 'ubuntu:GNOME'
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "GNOME" in desktop_environment:
desktop_environment = 'GNOME'
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "Cinnamon" in desktop_environment:
desktop_environment = "Cinnamon"
- rename_theme_on_update = True
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "MATE" in desktop_environment:
desktop_environment = "MATE"
elif "XFCE" in desktop_environment:
@@ -55,8 +62,6 @@
elif "Pantheon" in desktop_environment:
desktop_environment = "Pantheon"
rename_theme_on_update = True
-else:
- desktop_environment = "Unknown"
print(f"Desktop environment is: {desktop_environment}...")
@@ -72,11 +77,11 @@ def __init__(self, desktop_environment, rename_theme_on_update):
self.set_default_size(500, 100)
- box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 5)
- box.set_margin_top(15)
- box.set_margin_bottom(15)
- box.set_margin_start(25)
- box.set_margin_end(25)
+ box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 15)
+ box.set_margin_top(20)
+ box.set_margin_bottom(20)
+ box.set_margin_start(35)
+ box.set_margin_end(35)
self.add(box)
self.set_icon_name("applications-graphics")
@@ -90,65 +95,75 @@ def __init__(self, desktop_environment, rename_theme_on_update):
desktops = option["desktop"]
if isinstance(desktops, str):
desktops = [desktops]
- if "all" in desktops or self.desktop_environment in desktops:
- if option["type"] == "combo":
- combobox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- combobox_label = Gtk.Label.new(option["label"])
- combobox_label.set_halign(Gtk.Align.START)
- combobox.pack_start(combobox_label, True, True, 0)
- combo_widget = Gtk.ComboBoxText.new()
- for label in option["labels"]:
- combo_widget.append_text(label)
- combo_widget.set_active(option["value"])
- combo_widget.set_halign(Gtk.Align.END)
- combo_widget.connect("changed", self.on_setting_changed)
- combobox.pack_start(combo_widget, True, True, 0)
- box.pack_start(combobox, False, True, 0)
- self.widgets[option["name"]] = combo_widget
- elif option["type"] == "switch":
- switchbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- switchbox_label = Gtk.Label.new(option["label"])
- switchbox_label.set_halign(Gtk.Align.START)
- switchbox.pack_start(switchbox_label, True, True, 0)
- switch = Gtk.Switch.new()
- switch.set_active(option["value"])
- switch.set_halign(Gtk.Align.END)
- switch.set_valign(Gtk.Align.CENTER)
- switch.connect("state-set", self.on_setting_changed)
- switchbox.pack_start(switch, True, True, 0)
- box.pack_start(switchbox, False, True, 0)
- self.widgets[option["name"]] = switch
- elif option["type"] == "color-chooser":
- colorbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- colorbox_label = Gtk.Label.new(option["label"])
- colorbox_label.set_halign(Gtk.Align.START)
- colorbox.pack_start(colorbox_label, True, True, 0)
- colorButton = Gtk.ColorButton.new()
- color = Gdk.RGBA()
- color.parse(option["value"])
- colorButton.set_rgba(color)
- colorButton.set_halign(Gtk.Align.END)
- colorButton.set_valign(Gtk.Align.CENTER)
- colorButton.connect("color-set", self.on_setting_changed)
- colorbox.pack_start(colorButton, True, True, 0)
- box.pack_start(colorbox, False, True, 0)
- self.widgets[option["name"]] = colorButton
- elif option["type"] == "spinbutton":
- spinbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
- spinbox_label = Gtk.Label.new(option["label"])
- spinbox_label.set_halign(Gtk.Align.START)
- spinbox.pack_start(spinbox_label, True, True, 0)
- spinbutton = Gtk.SpinButton.new_with_range(option["min"],option["max"],option["step"])
- spinbutton.set_value(option["value"])
- spinbutton.set_snap_to_ticks(True)
- spinbutton.set_halign(Gtk.Align.END)
- spinbutton.set_valign(Gtk.Align.CENTER)
- spinbutton.connect("changed", self.on_setting_changed)
- spinbox.pack_start(spinbutton, True, True, 0)
- box.pack_start(spinbox, False, True, 0)
- self.widgets[option["name"]] = spinbutton
+ if not ("all" in desktops or self.desktop_environment in desktops):
+ continue
+
+ if option["type"] == "combo":
+ combobox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ combobox_label = Gtk.Label.new(option["label"])
+ combobox_label.set_halign(Gtk.Align.START)
+ combobox.pack_start(combobox_label, True, True, 0)
+ combo_widget = Gtk.ComboBoxText.new()
+ for label in option["labels"]:
+ combo_widget.append_text(label)
+ combo_widget.set_active(option["value"])
+ combo_widget.set_halign(Gtk.Align.END)
+ combo_widget.connect("changed", self.on_setting_changed)
+ combobox.pack_start(combo_widget, True, True, 0)
+ box.pack_start(combobox, False, True, 0)
+ self.widgets[option["name"]] = combo_widget
+ elif option["type"] == "switch":
+ switchbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ switchbox_label = Gtk.Label.new(option["label"])
+ switchbox_label.set_halign(Gtk.Align.START)
+ switchbox.pack_start(switchbox_label, True, True, 0)
+ switch = Gtk.Switch.new()
+ switch.set_active(option["value"])
+ switch.set_halign(Gtk.Align.END)
+ switch.set_valign(Gtk.Align.CENTER)
+ switch.connect("state-set", self.on_setting_changed)
+ switchbox.pack_start(switch, True, True, 0)
+ box.pack_start(switchbox, False, True, 0)
+ self.widgets[option["name"]] = switch
+ elif option["type"] == "color-chooser":
+ colorbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ colorbox_label = Gtk.Label.new(option["label"])
+ colorbox_label.set_halign(Gtk.Align.START)
+ colorbox.pack_start(colorbox_label, True, True, 0)
+ colorButton = Gtk.ColorButton.new()
+ color = Gdk.RGBA()
+ color.parse(option["value"])
+ colorButton.set_rgba(color)
+ colorButton.set_halign(Gtk.Align.END)
+ colorButton.set_valign(Gtk.Align.CENTER)
+ colorButton.connect("color-set", self.on_setting_changed)
+ colorbox.pack_start(colorButton, True, True, 0)
+ box.pack_start(colorbox, False, True, 0)
+ self.widgets[option["name"]] = colorButton
+ elif option["type"] == "spinbutton":
+ spinbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
+ spinbox_label = Gtk.Label.new(option["label"])
+ spinbox_label.set_halign(Gtk.Align.START)
+ spinbox.pack_start(spinbox_label, True, True, 0)
+ spinbutton = Gtk.SpinButton.new_with_range(option["min"],option["max"],option["step"])
+ spinbutton.set_value(option["value"])
+ spinbutton.set_snap_to_ticks(True)
+ spinbutton.set_halign(Gtk.Align.END)
+ spinbutton.set_valign(Gtk.Align.CENTER)
+ spinbutton.connect("changed", self.on_setting_changed)
+ spinbox.pack_start(spinbutton, True, True, 0)
+ box.pack_start(spinbox, False, True, 0)
+ self.widgets[option["name"]] = spinbutton
#---------------------------
if len(self.widgets) > 0:
+ xfwm_dir = os.path.join(self.current_theme_dir, "xfwm4")
+ if (self.desktop_environment == "XFCE" and os.path.exists(xfwm_dir)):
+ label = Gtk.Label.new("For title bar changes, ensure 'Set matching Xfwm4 theme'"\
+ " in Appearance settings is checked.")
+ label.set_line_wrap(True)
+ label.set_size_request(450, -1)
+ box.pack_start(label, False, True, 0)
+ #---------------------------
self.applybutton = Gtk.Button.new_with_label("Apply")
self.applybutton.set_halign(Gtk.Align.CENTER)
self.applybutton.set_valign(Gtk.Align.END)
@@ -163,7 +178,6 @@ def __init__(self, desktop_environment, rename_theme_on_update):
setthemebox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
self.setthemebox_label = Gtk.Label.new("")
self.setthemebox_label.set_halign(Gtk.Align.START)
- self.setthemebox_label.set_line_wrap(True)
setthemebox.pack_start(self.setthemebox_label, True, True, 0)
self.setthemebox_button = Gtk.Button.new()
self.setthemebox_button.set_label("Set theme")
@@ -178,7 +192,6 @@ def __init__(self, desktop_environment, rename_theme_on_update):
adwaitabox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 10)
self.adwaitabox_label = Gtk.Label.new("")
self.adwaitabox_label.set_halign(Gtk.Align.START)
- self.adwaitabox_label.set_line_wrap(True)
adwaitabox.pack_start(self.adwaitabox_label, True, True, 0)
self.adwaitabox_button = Gtk.Button.new()
self.adwaitabox_button.set_halign(Gtk.Align.END)
@@ -214,7 +227,7 @@ def update_setthemebox(self):
self.setthemebox_button.set_sensitive(True)
def on_setthemebox_button_clicked(self, button):
- set_theme(self.current_theme_name, self.current_theme_name, reload_only = False)
+ set_theme(self.current_theme_name)
self.update_setthemebox()
def on_setting_changed(self, *args):
@@ -235,6 +248,7 @@ def get_new_theme_names(self):
random_chars = "".join(random.choices(string.digits, k=3))
new_theme_name = self.options["theme_name"] + random_chars
new_theme_dir = os.path.join(os.path.dirname(self.current_theme_dir), new_theme_name)
+ print ("Renaming theme to " + new_theme_name + "...")
else: #keep same name
new_theme_dir = self.current_theme_dir
new_theme_name = self.current_theme_name
@@ -247,7 +261,7 @@ def on_apply_button_clicked(self, button):
os.rename(self.current_theme_dir, new_theme_dir)
#prepare install command and store settings
- command = [os.path.join(new_theme_dir, 'config', self.options["script_name"])]
+ command = ['bash', os.path.join(new_theme_dir, 'config', self.options["script_name"])]
for option in self.options["options"]:
desktops = option["desktop"]
@@ -283,19 +297,15 @@ def on_apply_button_clicked(self, button):
command.append(str(value))
#Install theme
- try:
- print ("Running..." + " ".join(command))
- subprocess.run(command, check=True)
- print("Install finished OK")
- except subprocess.CalledProcessError as e:
- print(f"Install script error. Return code: {e.returncode}")
- print(f"Output:\n{e.output.decode('utf-8')}")
+ print ("Running..." + " ".join(command))
+ subprocess.run(command, check=True)
+ print("Install finished OK")
#save settings
self.save_config_file(new_theme_dir)
#apply desktop theme
- set_theme(self.current_theme_name, new_theme_name, reload_only = True)
+ update_theme(self.current_theme_name, new_theme_name)
self.applybutton.set_sensitive(False)
#Relink libadwaita if neccessary
@@ -338,14 +348,11 @@ def gsettings_get(schema, key):
else:
return ""
-def gsettings_set(schema, key, old_value, new_value, reload_only):
- if not reload_only or gsettings_get(schema, key) == old_value:
- if Gio.SettingsSchemaSource.get_default().lookup(schema, True) is not None:
- print ("gsettings resetting " + schema + " " + key)
- setting = Gio.Settings.new(schema)
- if new_value == old_value:
- setting.set_string(key, "")
- setting.set_string(key, new_value)
+def gsettings_set(schema, key, value):
+ if Gio.SettingsSchemaSource.get_default().lookup(schema, True) is not None:
+ print ("gsettings setting " + schema + " " + key + " " + value)
+ setting = Gio.Settings.new(schema)
+ setting.set_string(key, value)
def xfconf_get(channel, key):
try:
@@ -356,52 +363,108 @@ def xfconf_get(channel, key):
output = ""
return output.rstrip("\n")
-def xfconf_set(channel, key, theme_name, reload_only):
- if not reload_only or xfconf_get(channel, key) == theme_name:
+def xfconf_set(channel, key, value):
+ try:
+ print ("xfconf-query setting ", channel, key, value)
+ subprocess.run(["xfconf-query", "-c", channel, "-p", key, "-s", value])
+ except Exception as e:
+ print("xfconf-query error: ", e)
+
+def xfconf_reset(channel, key):
+ try:
print ("xfconf-query resetting ", channel, key)
subprocess.run(["xfconf-query", "-c", channel, "-p", key, "-r"])
- subprocess.run(["xfconf-query", "-c", channel, "-p", key, "-s", theme_name])
+ except Exception as e:
+ print("xfconf-query error: ", e)
def is_current_theme(current_theme_name):
- if desktop_environment in {"GNOME", "pop", "Pantheon", "Budgie", "Unity"}:
+ if desktop_environment in {"GNOME", "ubuntu:GNOME", "pop", "Pantheon", "Budgie", "Unity"}:
return gsettings_get("org.gnome.desktop.interface",
"gtk-theme") == current_theme_name
elif desktop_environment == "Cinnamon":
- return gsettings_get("org.cinnamon.desktop.interface",
- "gtk-theme") == current_theme_name
+ return gsettings_get("org.cinnamon.desktop.interface", "gtk-theme") == current_theme_name
#return gsettings_get("org.cinnamon.theme", "name") == current_theme_name
elif desktop_environment == "XFCE":
return xfconf_get("xsettings", "/Net/ThemeName") == current_theme_name
elif desktop_environment == "MATE":
return gsettings_get("org.mate.interface", "gtk-theme") == current_theme_name
-def set_theme(current_theme_name, new_theme_name, reload_only):
- if desktop_environment in {"GNOME", "pop", "Pantheon"}:
- gsettings_set("org.gnome.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
+def set_theme(theme_name):
+ if desktop_environment in {"ubuntu:GNOME", "GNOME", "pop", "Pantheon"}:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", theme_name)
elif desktop_environment == "Cinnamon":
- gsettings_set("org.cinnamon.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
- gsettings_set("org.cinnamon.theme", "name", current_theme_name,
- new_theme_name, reload_only)
+ gsettings_set("org.cinnamon.desktop.interface", "gtk-theme", theme_name)
elif desktop_environment == "XFCE":
- xfconf_set("xsettings", "/Net/ThemeName", current_theme_name, reload_only)
+ xfconf_set("xsettings", "/Net/ThemeName", theme_name)
#xfconf_set("xfwm4", "/general/theme", current_theme_name, reload_only)
elif desktop_environment == "MATE":
- gsettings_set("org.mate.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
+ gsettings_set("org.mate.interface", "gtk-theme", theme_name)
elif desktop_environment == "Budgie":
setting = Gio.Settings.new("org.gnome.desktop.interface")
current_color_scheme = setting.get_string("color-scheme")
- gsettings_set("org.gnome.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", theme_name)
time.sleep(1)
setting.set_string("color-scheme", current_color_scheme)
elif desktop_environment == "Unity":
- gsettings_set("org.gnome.desktop.interface", "gtk-theme",
- current_theme_name, new_theme_name, reload_only)
- gsettings_set("org.gnome.desktop.wm.preferences", "theme",
- current_theme_name, new_theme_name, reload_only)
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", theme_name)
+ gsettings_set("org.gnome.desktop.wm.preferences", "theme", theme_name)
+
+def update_theme(current_theme_name, new_theme_name):
+ if desktop_environment in {"ubuntu:GNOME", "GNOME", "pop", "Pantheon"}:
+ if gsettings_get("org.gnome.desktop.interface", "gtk-theme") == current_theme_name:
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", new_theme_name)
+
+ elif desktop_environment == "Cinnamon":
+ def reset_cinnamon_theme():
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.cinnamon.theme", "name", "")
+ gsettings_set("org.cinnamon.theme", "name", new_theme_name)
+ return False
+
+ if gsettings_get("org.cinnamon.desktop.interface", "gtk-theme") == current_theme_name:
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.cinnamon.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.cinnamon.desktop.interface", "gtk-theme", new_theme_name)
+
+ if gsettings_get("org.cinnamon.theme", "name") == current_theme_name:
+ GLib.timeout_add_seconds(1, reset_cinnamon_theme)
+ elif gsettings_get("org.cinnamon.theme", "name") == current_theme_name:
+ reset_cinnamon_theme()
+
+ elif desktop_environment == "XFCE":
+ if xfconf_get("xsettings", "/Net/ThemeName") == current_theme_name:
+ xfconf_reset("xsettings", "/Net/ThemeName")
+ xfconf_set("xsettings", "/Net/ThemeName", new_theme_name)
+ #xfconf_set("xfwm4", "/general/theme", current_theme_name, reload_only)
+
+ elif desktop_environment == "MATE":
+ def set_mate_theme():
+ gsettings_set("org.mate.interface", "gtk-theme", new_theme_name)
+ return False
+
+ if gsettings_get("org.mate.interface", "gtk-theme") == current_theme_name:
+ gsettings_set("org.mate.interface", "gtk-theme", "")
+ GLib.timeout_add_seconds(1, set_mate_theme)
+
+ elif desktop_environment == "Budgie":
+ if gsettings_get("org.gnome.desktop.interface", "gtk-theme") == current_theme_name:
+ setting = Gio.Settings.new("org.gnome.desktop.interface")
+ current_color_scheme = setting.get_string("color-scheme")
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", new_theme_name)
+ time.sleep(1)
+ setting.set_string("color-scheme", current_color_scheme)
+
+ elif desktop_environment == "Unity":
+ if gsettings_get("org.gnome.desktop.interface", "gtk-theme") == current_theme_name:
+ if current_theme_name == new_theme_name:
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", "")
+ gsettings_set("org.gnome.desktop.wm.preferences", "theme", "")
+ gsettings_set("org.gnome.desktop.interface", "gtk-theme", new_theme_name)
+ gsettings_set("org.gnome.desktop.wm.preferences", "theme", new_theme_name)
if __name__ == "__main__":
Gtk.init()
@@ -409,4 +472,4 @@ def set_theme(current_theme_name, new_theme_name, reload_only):
win = OptionsWindow(desktop_environment, rename_theme_on_update)
win.connect("destroy", Gtk.main_quit)
win.show_all()
- Gtk.main()
\ No newline at end of file
+ Gtk.main()
diff --git a/Graphite/info.json b/Graphite/info.json
index 33199be2a..4ca3d4903 100644
--- a/Graphite/info.json
+++ b/Graphite/info.json
@@ -1,6 +1,6 @@
{
"author": "fredcw",
"name": "Graphite",
- "description": "Run options.py in theme folder for options including light/dark, accent color, etc. Cinnamon, gtk2, gtk3, gtk4, and libadwaita supported.",
+ "description": "Give execute permissions to and run options.py in theme folder for options including light/dark, accent color, etc. Cinnamon, gtk2, gtk3, gtk4, and libadwaita supported.",
"license": "GPLv3"
}
diff --git a/Material/README.md b/Material/README.md
index c623539c8..e1befc700 100644
--- a/Material/README.md
+++ b/Material/README.md
@@ -6,8 +6,8 @@ This is a repackaging of the Material Gtk theme for convenience of installation
## Installation
-Most easily installed via Cinnamon's Themes module in Cinnamon settings.
+Install via Cinnamon's Themes module in Cinnamon settings or download from Cinnamon Spices and unzip into your ~/.themes directory.
## Options/Configuration
-Two color schemes, and other options are available. Simply go to `~/.themes/Material` directory and run `options.py`
+Two color schemes, and other options are available. Go to `~/.themes/Material` directory and run `options.py`. You may need to give execute permissions to `options.py` first in order to run it (right click on file > Properties > Permissions tab).
diff --git a/Material/files/Material/index.theme b/Material/files/Material/index.theme
index 02d5daf6c..90ffed07a 100644
--- a/Material/files/Material/index.theme
+++ b/Material/files/Material/index.theme
@@ -5,8 +5,8 @@ Comment=An Materia Gtk+ theme based on Elegant Design
Encoding=UTF-8
[X-GNOME-Metatheme]
-GtkTheme=Material975
-MetacityTheme=Material975
+GtkTheme=Material
+MetacityTheme=Material
IconTheme=Material-DeepOcean
CursorTheme=Material-DeepOcean
ButtonLayout=close,minimize,maximize:menu
diff --git a/Material/files/Material/options.py b/Material/files/Material/options.py
index d70707374..8385e5786 100755
--- a/Material/files/Material/options.py
+++ b/Material/files/Material/options.py
@@ -26,7 +26,9 @@
MX Linux 23.2 XFCE, x11,
Manjaro Cinnamon X-Cinnamon, x11, rename theme.
Manjaro Cinnamon X-Cinnamon, wayland, ok
-LinuxMint 21.3 mate MATE, x11, ok
+Mint 21.3 cinnamon X-Cinnamon, x11, rename theme
+Mint 21.1 cinnamon X-Cinnamon, x11, rename theme
+Mint 21.3 mate MATE, x11, ok
elementaryos-7 Pantheon, x11, rename theme. Has no effect on gtk3 apps
popOS 22, pop:GNOME, x11, rename theme.
Ubuntu Budgie 23 Budgie:GNOME, x11, rename theme and set org.gnome.desktop.interface
@@ -43,16 +45,16 @@
desktop_environment = 'Unity'
elif "pop" in desktop_environment:
desktop_environment = 'pop'
- rename_theme_on_update = os.environ["XDG_SESSION_TYPE"] == "x11"
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "ubuntu:GNOME" in desktop_environment:
desktop_environment = 'ubuntu:GNOME'
- rename_theme_on_update = os.environ["XDG_SESSION_TYPE"] == "x11"
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "GNOME" in desktop_environment:
desktop_environment = 'GNOME'
- rename_theme_on_update = os.environ["XDG_SESSION_TYPE"] == "x11"
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "Cinnamon" in desktop_environment:
desktop_environment = "Cinnamon"
- rename_theme_on_update = os.environ["XDG_SESSION_TYPE"] == "x11"
+ rename_theme_on_update = os.environ.get("XDG_SESSION_TYPE") == "x11"
elif "MATE" in desktop_environment:
desktop_environment = "MATE"
elif "XFCE" in desktop_environment:
@@ -259,7 +261,7 @@ def on_apply_button_clicked(self, button):
os.rename(self.current_theme_dir, new_theme_dir)
#prepare install command and store settings
- command = [os.path.join(new_theme_dir, 'config', self.options["script_name"])]
+ command = ['bash', os.path.join(new_theme_dir, 'config', self.options["script_name"])]
for option in self.options["options"]:
desktops = option["desktop"]
diff --git a/Material/info.json b/Material/info.json
index ab32de9c4..3a7e63133 100644
--- a/Material/info.json
+++ b/Material/info.json
@@ -1,6 +1,6 @@
{
"author": "fredcw",
"name": "Material",
- "description": "A configurable dark theme. Run options.py in theme folder for options. Cinnamon, gtk2, gtk3, and gtk4 supported.",
+ "description": "A configurable dark theme. Give execute permissions to and run options.py in theme folder for options. Cinnamon, gtk2, gtk3, and gtk4 supported.",
"license": "GPLv3"
}