Compare commits
3 Commits
9056b40bc4
...
4c5a39a77c
Author | SHA1 | Date | |
---|---|---|---|
4c5a39a77c | |||
d3c1054ec0 | |||
4d6446d47d |
|
@ -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)])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user