detached 4afa706

fix: add engine defaults to config schema for correct migrate diff

Engine config had no defaults registered, causing `dumber config migrate`
to show engine.* settings as "deprecated" and old sections as "new" (inverted).

Add Engine/WebKit defaults to DefaultConfig() and setEngineDefaults() so
the schema diff correctly classifies old sections as deprecated after migration.
commit
4afa706afc4d4fc7b633c47f71ef6131eee9bdb9
author
brice · · 2026-03-15 19:47 UTC
parent
71664a3
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +52 -0
M internal/infrastructure/config/defaults.go +14 -0
@@ -142,6 +142,20 @@ func DefaultConfig() *Config {
142142 Debug: DebugConfig{
143143 EnableDevTools: true,
144144 },
145+ Engine: EngineConfig{
146+ Type: "webkit",
147+ Profile: ProfileDefault,
148+ PoolPrewarmCount: defaultWebViewPoolPrewarmCount,
149+ ZoomCacheSize: defaultZoomCacheSize,
150+ CookiePolicy: CookiePolicyNoThirdParty,
151+ WebKit: WebKitEngineConfig{
152+ ITPEnabled: true,
153+ SkiaCPUPaintingThreads: defaultSkiaCPUPaintingThreads,
154+ SkiaGPUPaintingThreads: defaultSkiaGPUPaintingThreads,
155+ GSKRenderer: GSKRendererAuto,
156+ GLRenderingMode: GLRenderingModeAuto,
157+ },
158+ },
145159 Rendering: RenderingConfig{
146160 Mode: RenderingModeGPU,
147161 DisableDMABufRenderer: false,
@@ -142,6 +142,20 @@ func DefaultConfig() *Config {
142 Debug: DebugConfig{142 Debug: DebugConfig{
143 EnableDevTools: true,143 EnableDevTools: true,
144 },144 },
145+ Engine: EngineConfig{
146+ Type: "webkit",
147+ Profile: ProfileDefault,
148+ PoolPrewarmCount: defaultWebViewPoolPrewarmCount,
149+ ZoomCacheSize: defaultZoomCacheSize,
150+ CookiePolicy: CookiePolicyNoThirdParty,
151+ WebKit: WebKitEngineConfig{
152+ ITPEnabled: true,
153+ SkiaCPUPaintingThreads: defaultSkiaCPUPaintingThreads,
154+ SkiaGPUPaintingThreads: defaultSkiaGPUPaintingThreads,
155+ GSKRenderer: GSKRendererAuto,
156+ GLRenderingMode: GLRenderingModeAuto,
157+ },
158+ },
145 Rendering: RenderingConfig{159 Rendering: RenderingConfig{
146 Mode: RenderingModeGPU,160 Mode: RenderingModeGPU,
147 DisableDMABufRenderer: false,161 DisableDMABufRenderer: false,
M internal/infrastructure/config/loader.go +38 -0
@@ -428,6 +428,7 @@ func (m *Manager) setDefaults() {
428428 m.setLoggingDefaults(defaults)
429429 m.setDebugDefaults(defaults)
430430 m.setAppearanceDefaults(defaults)
431+ m.setEngineDefaults(defaults)
431432 m.setRenderingDefaults(defaults)
432433 m.setPrivacyDefaults(defaults)
433434 m.setWorkspaceDefaults(defaults)
@@ -615,6 +616,43 @@ func (m *Manager) setDownloadsDefaults(defaults *Config) {
615616 m.viper.SetDefault("downloads.path", defaults.Downloads.Path)
616617 }
617618
619+func (m *Manager) setEngineDefaults(defaults *Config) {
620+ e := defaults.Engine
621+ m.viper.SetDefault("engine.type", e.Type)
622+ m.viper.SetDefault("engine.profile", string(e.Profile))
623+ m.viper.SetDefault("engine.pool_prewarm_count", e.PoolPrewarmCount)
624+ m.viper.SetDefault("engine.zoom_cache_size", e.ZoomCacheSize)
625+ m.viper.SetDefault("engine.cookie_policy", string(e.CookiePolicy))
626+
627+ wk := e.WebKit
628+ m.viper.SetDefault("engine.webkit.itp_enabled", wk.ITPEnabled)
629+ m.viper.SetDefault("engine.webkit.skia_cpu_painting_threads", wk.SkiaCPUPaintingThreads)
630+ m.viper.SetDefault("engine.webkit.skia_gpu_painting_threads", wk.SkiaGPUPaintingThreads)
631+ m.viper.SetDefault("engine.webkit.skia_enable_cpu_rendering", wk.SkiaEnableCPURendering)
632+ m.viper.SetDefault("engine.webkit.disable_dmabuf_renderer", wk.DisableDMABufRenderer)
633+ m.viper.SetDefault("engine.webkit.force_compositing_mode", wk.ForceCompositingMode)
634+ m.viper.SetDefault("engine.webkit.disable_compositing_mode", wk.DisableCompositingMode)
635+ m.viper.SetDefault("engine.webkit.gsk_renderer", string(wk.GSKRenderer))
636+ m.viper.SetDefault("engine.webkit.disable_mipmaps", wk.DisableMipmaps)
637+ m.viper.SetDefault("engine.webkit.prefer_gl", wk.PreferGL)
638+ m.viper.SetDefault("engine.webkit.draw_compositing_indicators", wk.DrawCompositingIndicators)
639+ m.viper.SetDefault("engine.webkit.show_fps", wk.ShowFPS)
640+ m.viper.SetDefault("engine.webkit.sample_memory", wk.SampleMemory)
641+ m.viper.SetDefault("engine.webkit.debug_frames", wk.DebugFrames)
642+ m.viper.SetDefault("engine.webkit.force_vsync", wk.ForceVSync)
643+ m.viper.SetDefault("engine.webkit.gl_rendering_mode", string(wk.GLRenderingMode))
644+ m.viper.SetDefault("engine.webkit.gstreamer_debug_level", wk.GStreamerDebugLevel)
645+ m.viper.SetDefault("engine.webkit.prefix", wk.Prefix)
646+ m.viper.SetDefault("engine.webkit.web_process_memory_limit_mb", wk.WebProcessMemoryLimitMB)
647+ m.viper.SetDefault("engine.webkit.web_process_memory_poll_interval_sec", wk.WebProcessMemoryPollIntervalSec)
648+ m.viper.SetDefault("engine.webkit.web_process_memory_conservative_threshold", wk.WebProcessMemoryConservativeThreshold)
649+ m.viper.SetDefault("engine.webkit.web_process_memory_strict_threshold", wk.WebProcessMemoryStrictThreshold)
650+ m.viper.SetDefault("engine.webkit.network_process_memory_limit_mb", wk.NetworkProcessMemoryLimitMB)
651+ m.viper.SetDefault("engine.webkit.network_process_memory_poll_interval_sec", wk.NetworkProcessMemoryPollIntervalSec)
652+ m.viper.SetDefault("engine.webkit.network_process_memory_conservative_threshold", wk.NetworkProcessMemoryConservativeThreshold)
653+ m.viper.SetDefault("engine.webkit.network_process_memory_strict_threshold", wk.NetworkProcessMemoryStrictThreshold)
654+}
655+
618656 // New returns a new default configuration instance.
619657 // This is a convenience function for getting default config without the full manager.
620658 func New() *Config {
@@ -428,6 +428,7 @@ func (m *Manager) setDefaults() {
428 m.setLoggingDefaults(defaults)428 m.setLoggingDefaults(defaults)
429 m.setDebugDefaults(defaults)429 m.setDebugDefaults(defaults)
430 m.setAppearanceDefaults(defaults)430 m.setAppearanceDefaults(defaults)
431+ m.setEngineDefaults(defaults)
431 m.setRenderingDefaults(defaults)432 m.setRenderingDefaults(defaults)
432 m.setPrivacyDefaults(defaults)433 m.setPrivacyDefaults(defaults)
433 m.setWorkspaceDefaults(defaults)434 m.setWorkspaceDefaults(defaults)
@@ -615,6 +616,43 @@ func (m *Manager) setDownloadsDefaults(defaults *Config) {
615 m.viper.SetDefault("downloads.path", defaults.Downloads.Path)616 m.viper.SetDefault("downloads.path", defaults.Downloads.Path)
616 }617 }
617 618
619+func (m *Manager) setEngineDefaults(defaults *Config) {
620+ e := defaults.Engine
621+ m.viper.SetDefault("engine.type", e.Type)
622+ m.viper.SetDefault("engine.profile", string(e.Profile))
623+ m.viper.SetDefault("engine.pool_prewarm_count", e.PoolPrewarmCount)
624+ m.viper.SetDefault("engine.zoom_cache_size", e.ZoomCacheSize)
625+ m.viper.SetDefault("engine.cookie_policy", string(e.CookiePolicy))
626+
627+ wk := e.WebKit
628+ m.viper.SetDefault("engine.webkit.itp_enabled", wk.ITPEnabled)
629+ m.viper.SetDefault("engine.webkit.skia_cpu_painting_threads", wk.SkiaCPUPaintingThreads)
630+ m.viper.SetDefault("engine.webkit.skia_gpu_painting_threads", wk.SkiaGPUPaintingThreads)
631+ m.viper.SetDefault("engine.webkit.skia_enable_cpu_rendering", wk.SkiaEnableCPURendering)
632+ m.viper.SetDefault("engine.webkit.disable_dmabuf_renderer", wk.DisableDMABufRenderer)
633+ m.viper.SetDefault("engine.webkit.force_compositing_mode", wk.ForceCompositingMode)
634+ m.viper.SetDefault("engine.webkit.disable_compositing_mode", wk.DisableCompositingMode)
635+ m.viper.SetDefault("engine.webkit.gsk_renderer", string(wk.GSKRenderer))
636+ m.viper.SetDefault("engine.webkit.disable_mipmaps", wk.DisableMipmaps)
637+ m.viper.SetDefault("engine.webkit.prefer_gl", wk.PreferGL)
638+ m.viper.SetDefault("engine.webkit.draw_compositing_indicators", wk.DrawCompositingIndicators)
639+ m.viper.SetDefault("engine.webkit.show_fps", wk.ShowFPS)
640+ m.viper.SetDefault("engine.webkit.sample_memory", wk.SampleMemory)
641+ m.viper.SetDefault("engine.webkit.debug_frames", wk.DebugFrames)
642+ m.viper.SetDefault("engine.webkit.force_vsync", wk.ForceVSync)
643+ m.viper.SetDefault("engine.webkit.gl_rendering_mode", string(wk.GLRenderingMode))
644+ m.viper.SetDefault("engine.webkit.gstreamer_debug_level", wk.GStreamerDebugLevel)
645+ m.viper.SetDefault("engine.webkit.prefix", wk.Prefix)
646+ m.viper.SetDefault("engine.webkit.web_process_memory_limit_mb", wk.WebProcessMemoryLimitMB)
647+ m.viper.SetDefault("engine.webkit.web_process_memory_poll_interval_sec", wk.WebProcessMemoryPollIntervalSec)
648+ m.viper.SetDefault("engine.webkit.web_process_memory_conservative_threshold", wk.WebProcessMemoryConservativeThreshold)
649+ m.viper.SetDefault("engine.webkit.web_process_memory_strict_threshold", wk.WebProcessMemoryStrictThreshold)
650+ m.viper.SetDefault("engine.webkit.network_process_memory_limit_mb", wk.NetworkProcessMemoryLimitMB)
651+ m.viper.SetDefault("engine.webkit.network_process_memory_poll_interval_sec", wk.NetworkProcessMemoryPollIntervalSec)
652+ m.viper.SetDefault("engine.webkit.network_process_memory_conservative_threshold", wk.NetworkProcessMemoryConservativeThreshold)
653+ m.viper.SetDefault("engine.webkit.network_process_memory_strict_threshold", wk.NetworkProcessMemoryStrictThreshold)
654+}
655+
618 // New returns a new default configuration instance.656 // New returns a new default configuration instance.
619 // This is a convenience function for getting default config without the full manager.657 // This is a convenience function for getting default config without the full manager.
620 func New() *Config {658 func New() *Config {

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