detached e58fb06

feat(theme): respect color_scheme config in theme detection

commit
e58fb06ab0a1b04a49ab5a650246ba04d0904e0c
author
bnema · · 2025-10-23 20:56 UTC
parent
a417d51
signature
GPG Unverified2B82207D370127A0 The key is unknown
1 file · +18 -2
M pkg/webkit/user_content.go +18 -2
@@ -5,6 +5,7 @@ import (
55 "log"
66
77 "github.com/bnema/dumber/assets"
8+ "github.com/bnema/dumber/internal/config"
89 webkit "github.com/diamondburned/gotk4-webkitgtk/pkg/webkit/v6"
910 )
1011
@@ -39,7 +40,22 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string,
3940
4041 // Inject GTK theme detection SECOND, before color-scheme script
4142 // The color-scheme.ts expects window.__dumber_gtk_prefers_dark to be set
42- prefersDark := PrefersDarkTheme()
43+ // Respect the ColorScheme config setting
44+ cfg := config.Get()
45+ var prefersDark bool
46+ switch cfg.Appearance.ColorScheme {
47+ case "prefer-dark":
48+ prefersDark = true
49+ log.Printf("[webkit] Using config-forced dark theme (color_scheme: prefer-dark)")
50+ case "prefer-light":
51+ prefersDark = false
52+ log.Printf("[webkit] Using config-forced light theme (color_scheme: prefer-light)")
53+ default:
54+ // "default" or empty - follow system GTK preference
55+ prefersDark = PrefersDarkTheme()
56+ log.Printf("[webkit] Using system GTK theme preference (color_scheme: %s)", cfg.Appearance.ColorScheme)
57+ }
58+
4359 gtkThemeScript := fmt.Sprintf(`window.__dumber_gtk_prefers_dark = %t;`, prefersDark)
4460 ucm.AddScript(webkit.NewUserScript(
4561 gtkThemeScript,
@@ -48,7 +64,7 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string,
4864 nil,
4965 nil,
5066 ))
51- log.Printf("[webkit] Injected GTK theme preference: prefersDark=%t", prefersDark)
67+ log.Printf("[webkit] Injected theme preference: prefersDark=%t", prefersDark)
5268
5369 // Inject palette config SECOND, before GUI scripts
5470 // The GUI expects window.__dumber_palette = { "light": {...}, "dark": {...} }
@@ -5,6 +5,7 @@ import (
5 "log"5 "log"
6 6
7 "github.com/bnema/dumber/assets"7 "github.com/bnema/dumber/assets"
8+ "github.com/bnema/dumber/internal/config"
8 webkit "github.com/diamondburned/gotk4-webkitgtk/pkg/webkit/v6"9 webkit "github.com/diamondburned/gotk4-webkitgtk/pkg/webkit/v6"
9 )10 )
10 11
@@ -39,7 +40,22 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string,
39 40
40 // Inject GTK theme detection SECOND, before color-scheme script41 // Inject GTK theme detection SECOND, before color-scheme script
41 // The color-scheme.ts expects window.__dumber_gtk_prefers_dark to be set42 // The color-scheme.ts expects window.__dumber_gtk_prefers_dark to be set
42- prefersDark := PrefersDarkTheme()43+ // Respect the ColorScheme config setting
44+ cfg := config.Get()
45+ var prefersDark bool
46+ switch cfg.Appearance.ColorScheme {
47+ case "prefer-dark":
48+ prefersDark = true
49+ log.Printf("[webkit] Using config-forced dark theme (color_scheme: prefer-dark)")
50+ case "prefer-light":
51+ prefersDark = false
52+ log.Printf("[webkit] Using config-forced light theme (color_scheme: prefer-light)")
53+ default:
54+ // "default" or empty - follow system GTK preference
55+ prefersDark = PrefersDarkTheme()
56+ log.Printf("[webkit] Using system GTK theme preference (color_scheme: %s)", cfg.Appearance.ColorScheme)
57+ }
58+
43 gtkThemeScript := fmt.Sprintf(`window.__dumber_gtk_prefers_dark = %t;`, prefersDark)59 gtkThemeScript := fmt.Sprintf(`window.__dumber_gtk_prefers_dark = %t;`, prefersDark)
44 ucm.AddScript(webkit.NewUserScript(60 ucm.AddScript(webkit.NewUserScript(
45 gtkThemeScript,61 gtkThemeScript,
@@ -48,7 +64,7 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string,
48 nil,64 nil,
49 nil,65 nil,
50 ))66 ))
51- log.Printf("[webkit] Injected GTK theme preference: prefersDark=%t", prefersDark)67+ log.Printf("[webkit] Injected theme preference: prefersDark=%t", prefersDark)
52 68
53 // Inject palette config SECOND, before GUI scripts69 // Inject palette config SECOND, before GUI scripts
54 // The GUI expects window.__dumber_palette = { "light": {...}, "dark": {...} }70 // The GUI expects window.__dumber_palette = { "light": {...}, "dark": {...} }

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close