Compare commits

...

3 Commits

View File

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