Compare commits

...

3 Commits

View File

@ -1,7 +1,6 @@
from std/osproc import execProcess, ProcessOption, startProcess, waitForExit, close from std/osproc import execProcess, ProcessOption, startProcess, waitForExit, close
from std/os import symlinkExists, getConfigDir, putEnv, `/` from std/os import symlinkExists, getConfigDir, putEnv, `/`
from std/strutils import split, endsWith, strip from std/strutils import split, endsWith
from std/algorithm import fill
from std/strformat import fmt from std/strformat import fmt
import owlkettle import owlkettle
@ -58,37 +57,25 @@ proc setTheme(themeName: string) =
if symlinkExists(getConfigDir() / "gtk-4.0"): if symlinkExists(getConfigDir() / "gtk-4.0"):
putEnv("XDG_CONFIG_HOME", "/dev/null") putEnv("XDG_CONFIG_HOME", "/dev/null")
var
lastClickedButton: array[2, int]
# Display the GTK-4 GUI using owlkettle # Display the GTK-4 GUI using owlkettle
viewable App: viewable App:
# 2D array storing the style for each button highlightButton: array[2, string]
buttonStyles: array[themeStyles.len(),array[themeColors.len(), StyleClass]]
hooks: hooks:
build: build:
# Make all buttons flat by default
for index in 0..state.buttonStyles.high():
fill(state.buttonStyles[index], ButtonFlat)
let currentTheme: string = execProcess("/usr/bin/xfconf-query", let currentTheme: string = execProcess("/usr/bin/xfconf-query",
args=["--channel=xsettings", "--property=/Net/ThemeName"], args=["--channel=xsettings", "--property=/Net/ThemeName"],
options={}).strip(leading=false, trailing=true, chars={'\n'}) options={})[0 .. ^2]
let currentThemeSplit: seq[string] = currentTheme.split('-', 2) let currentThemeSplit: seq[string] = currentTheme.split('-', 2)
if currentThemeSplit.len() < 3 or currentThemeSplit[0] != "Colloid": if currentThemeSplit.len() < 3 or currentThemeSplit[0] != "Colloid":
return return
let currentThemeColorIndex = find(themeColors, currentThemeSplit[1]) let currentThemeColor = currentThemeSplit[1]
let currentThemeStyleIndex = find(themeStyles, currentThemeSplit[2]) let currentThemeStyle = currentThemeSplit[2]
if -1 in [currentThemeColorIndex, currentThemeStyleIndex]:
return
# Highlight current theme button # Highlight current theme button
state.buttonStyles[currentThemeStyleIndex][currentThemeColorIndex] = ButtonSuggested state.highlightButton = [currentThemeColor, currentThemeStyle]
lastClickedButton = [currentThemeStyleIndex, currentThemeColorIndex]
method view(app: AppState): Widget = method view(app: AppState): Widget =
result = gui: result = gui:
@ -103,26 +90,24 @@ method view(app: AppState): Widget =
Label {.vAlign: AlignStart.}: Label {.vAlign: AlignStart.}:
useMarkup = true useMarkup = true
text="<span size='small'>NOTE: Some apps need to be reopened for the theme to be applied.</span>" text="<span size='small'>NOTE: Some apps need to be reopened for the theme to be applied.</span>"
for y, themeStyle in themeStyles: for themeStyle in themeStyles:
# Horizontal box # Horizontal box
Box(orient = OrientX, spacing = 5): Box(orient = OrientX, spacing = 5):
for x, themeColor in themeColors: for themeColor in themeColors:
Button {.vAlign: AlignCenter, hAlign: AlignCenter.}: Button {.vAlign: AlignCenter, hAlign: AlignCenter.}:
icon = fmt"Colloid-{themeColor}-{themeStyle}" icon = fmt"Colloid-{themeColor}-{themeStyle}"
# Teal-Dark-Nord theme will have "(default)" added to its tooltip # Teal-Dark-Nord theme will have "(default)" added to its tooltip
tooltip = if (themeColor, themeStyle) == ("Teal", "Dark-Nord"): tooltip = if (themeColor, themeStyle) == ("Teal", "Dark-Nord"):
fmt"{themeColor}-{themeStyle} (default)" fmt"{themeColor}-{themeStyle} (default)"
else: else:
fmt"{themeColor}-{themeStyle}" fmt"{themeColor}-{themeStyle}"
style = app.buttonStyles[y][x] style = if [themeColor, themeStyle] == app.highlightButton:
ButtonSuggested
else:
ButtonFlat
proc clicked() = proc clicked() =
var thisButton = [y, x]
setTheme(fmt"Colloid-{themeColor}-{themeStyle}") setTheme(fmt"Colloid-{themeColor}-{themeStyle}")
# Highlight this button # Highlight this button
app.buttonStyles[y][x] = ButtonSuggested app.highlightButton = [themeColor, themeStyle]
if lastClickedButton != thisButton:
# Remove highlight from lastClickedButton
app.buttonStyles[lastClickedButton[0]][lastClickedButton[1]] = ButtonFlat
lastClickedButton = thisButton
brew("com.tromjaro.ThemeSwitcher", gui(App()), icons=[iconsDir], stylesheets=[newStylesheet(gtkCSS)]) brew("com.tromjaro.ThemeSwitcher", gui(App()), icons=[iconsDir], stylesheets=[newStylesheet(gtkCSS)])