feat: add missing keys to config schema provider
- commit
- 0e75391be0605ae35ecd7b4f6138e51cc8531a14
- author
- brice · · 2026-01-06 13:05 UTC
- parent
- f1d0f96
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +139 -0
M internal/infrastructure/config/schema_provider.go +139 -0
| @@ -14,6 +14,7 @@ const ( | |||
| 14 | 14 | SectionWorkspace = "Workspace" | |
| 15 | 15 | SectionSession = "Session" | |
| 16 | 16 | SectionOmnibox = "Omnibox" | |
| 17 | + | SectionClipboard = "Clipboard" | |
| 17 | 18 | SectionContentFiltering = "Content Filtering" | |
| 18 | 19 | SectionRendering = "Rendering" | |
| 19 | 20 | SectionMedia = "Media" | |
| @@ -64,6 +65,9 @@ func (p *SchemaProvider) GetSchema() []entity.ConfigKeyInfo { | |||
| 64 | 65 | // Omnibox section | |
| 65 | 66 | keys = append(keys, p.getOmniboxKeys(defaults)...) | |
| 66 | 67 | ||
| 68 | + | // Clipboard section | |
| 69 | + | keys = append(keys, p.getClipboardKeys(defaults)...) | |
| 70 | + | ||
| 67 | 71 | // Content Filtering section | |
| 68 | 72 | keys = append(keys, p.getContentFilteringKeys(defaults)...) | |
| 69 | 73 | ||
| @@ -459,6 +463,34 @@ func (*SchemaProvider) getWorkspaceKeys(defaults *Config) []entity.ConfigKeyInfo | |||
| 459 | 463 | Description: "Global shortcut to switch to previous tab", | |
| 460 | 464 | Section: SectionWorkspace, | |
| 461 | 465 | }, | |
| 466 | + | { | |
| 467 | + | Key: "workspace.shortcuts.consume_or_expel_left", | |
| 468 | + | Type: "string", | |
| 469 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelLeft, | |
| 470 | + | Description: "Consume into left sibling stack or expel left (alpha)", | |
| 471 | + | Section: SectionWorkspace, | |
| 472 | + | }, | |
| 473 | + | { | |
| 474 | + | Key: "workspace.shortcuts.consume_or_expel_right", | |
| 475 | + | Type: "string", | |
| 476 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelRight, | |
| 477 | + | Description: "Consume into right sibling stack or expel right (alpha)", | |
| 478 | + | Section: SectionWorkspace, | |
| 479 | + | }, | |
| 480 | + | { | |
| 481 | + | Key: "workspace.shortcuts.consume_or_expel_up", | |
| 482 | + | Type: "string", | |
| 483 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelUp, | |
| 484 | + | Description: "Consume into upper sibling stack or expel up (alpha)", | |
| 485 | + | Section: SectionWorkspace, | |
| 486 | + | }, | |
| 487 | + | { | |
| 488 | + | Key: "workspace.shortcuts.consume_or_expel_down", | |
| 489 | + | Type: "string", | |
| 490 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelDown, | |
| 491 | + | Description: "Consume into lower sibling stack or expel down (alpha)", | |
| 492 | + | Section: SectionWorkspace, | |
| 493 | + | }, | |
| 462 | 494 | // Popups | |
| 463 | 495 | { | |
| 464 | 496 | Key: "workspace.popups.behavior", | |
| @@ -679,6 +711,18 @@ func (*SchemaProvider) getContentFilteringKeys(defaults *Config) []entity.Config | |||
| 679 | 711 | } | |
| 680 | 712 | } | |
| 681 | 713 | ||
| 714 | + | func (*SchemaProvider) getClipboardKeys(defaults *Config) []entity.ConfigKeyInfo { | |
| 715 | + | return []entity.ConfigKeyInfo{ | |
| 716 | + | { | |
| 717 | + | Key: "clipboard.auto_copy_on_selection", | |
| 718 | + | Type: "bool", | |
| 719 | + | Default: fmt.Sprintf("%t", defaults.Clipboard.AutoCopyOnSelection), | |
| 720 | + | Description: "Auto-copy selected text to clipboard (zellij-style)", | |
| 721 | + | Section: SectionClipboard, | |
| 722 | + | }, | |
| 723 | + | } | |
| 724 | + | } | |
| 725 | + | ||
| 682 | 726 | func (*SchemaProvider) getRenderingKeys(defaults *Config) []entity.ConfigKeyInfo { | |
| 683 | 727 | return []entity.ConfigKeyInfo{ | |
| 684 | 728 | { | |
| @@ -853,6 +897,14 @@ func (*SchemaProvider) getDebugKeys(defaults *Config) []entity.ConfigKeyInfo { | |||
| 853 | 897 | ||
| 854 | 898 | func (*SchemaProvider) getPerformanceKeys(defaults *Config) []entity.ConfigKeyInfo { | |
| 855 | 899 | return []entity.ConfigKeyInfo{ | |
| 900 | + | { | |
| 901 | + | Key: "performance.profile", | |
| 902 | + | Type: "string", | |
| 903 | + | Default: string(defaults.Performance.Profile), | |
| 904 | + | Description: "Performance profile preset (custom enables manual tuning)", | |
| 905 | + | Values: []string{"default", "lite", "max", "custom"}, | |
| 906 | + | Section: SectionPerformance, | |
| 907 | + | }, | |
| 856 | 908 | { | |
| 857 | 909 | Key: "performance.zoom_cache_size", | |
| 858 | 910 | Type: "int", | |
| @@ -869,6 +921,93 @@ func (*SchemaProvider) getPerformanceKeys(defaults *Config) []entity.ConfigKeyIn | |||
| 869 | 921 | Range: ">=0", | |
| 870 | 922 | Section: SectionPerformance, | |
| 871 | 923 | }, | |
| 924 | + | { | |
| 925 | + | Key: "performance.skia_cpu_painting_threads", | |
| 926 | + | Type: "int", | |
| 927 | + | Default: fmt.Sprintf("%d", defaults.Performance.SkiaCPUPaintingThreads), | |
| 928 | + | Description: "Skia CPU rendering threads (0=unset, custom profile only)", | |
| 929 | + | Range: ">=0", | |
| 930 | + | Section: SectionPerformance, | |
| 931 | + | }, | |
| 932 | + | { | |
| 933 | + | Key: "performance.skia_gpu_painting_threads", | |
| 934 | + | Type: "int", | |
| 935 | + | Default: fmt.Sprintf("%d", defaults.Performance.SkiaGPUPaintingThreads), | |
| 936 | + | Description: "Skia GPU rendering threads (-1=unset, 0=disable, custom profile only)", | |
| 937 | + | Range: ">=-1", | |
| 938 | + | Section: SectionPerformance, | |
| 939 | + | }, | |
| 940 | + | { | |
| 941 | + | Key: "performance.skia_enable_cpu_rendering", | |
| 942 | + | Type: "bool", | |
| 943 | + | Default: fmt.Sprintf("%t", defaults.Performance.SkiaEnableCPURendering), | |
| 944 | + | Description: "Force CPU rendering (custom profile only)", | |
| 945 | + | Section: SectionPerformance, | |
| 946 | + | }, | |
| 947 | + | { | |
| 948 | + | Key: "performance.web_process_memory_limit_mb", | |
| 949 | + | Type: "int", | |
| 950 | + | Default: fmt.Sprintf("%d", defaults.Performance.WebProcessMemoryLimitMB), | |
| 951 | + | Description: "Web process memory limit in MB (0=unset, custom profile only)", | |
| 952 | + | Range: ">=0", | |
| 953 | + | Section: SectionPerformance, | |
| 954 | + | }, | |
| 955 | + | { | |
| 956 | + | Key: "performance.web_process_memory_poll_interval_sec", | |
| 957 | + | Type: "float64", | |
| 958 | + | Default: fmt.Sprintf("%.1f", defaults.Performance.WebProcessMemoryPollIntervalSec), | |
| 959 | + | Description: "Memory check interval in seconds (0=default 30s, custom profile only)", | |
| 960 | + | Range: ">=0", | |
| 961 | + | Section: SectionPerformance, | |
| 962 | + | }, | |
| 963 | + | { | |
| 964 | + | Key: "performance.web_process_memory_conservative_threshold", | |
| 965 | + | Type: "float64", | |
| 966 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.WebProcessMemoryConservativeThreshold), | |
| 967 | + | Description: "Conservative memory cleanup threshold (0-1, custom profile only)", | |
| 968 | + | Range: "0-1", | |
| 969 | + | Section: SectionPerformance, | |
| 970 | + | }, | |
| 971 | + | { | |
| 972 | + | Key: "performance.web_process_memory_strict_threshold", | |
| 973 | + | Type: "float64", | |
| 974 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.WebProcessMemoryStrictThreshold), | |
| 975 | + | Description: "Strict memory cleanup threshold (0-1, custom profile only)", | |
| 976 | + | Range: "0-1", | |
| 977 | + | Section: SectionPerformance, | |
| 978 | + | }, | |
| 979 | + | { | |
| 980 | + | Key: "performance.network_process_memory_limit_mb", | |
| 981 | + | Type: "int", | |
| 982 | + | Default: fmt.Sprintf("%d", defaults.Performance.NetworkProcessMemoryLimitMB), | |
| 983 | + | Description: "Network process memory limit in MB (0=unset, custom profile only)", | |
| 984 | + | Range: ">=0", | |
| 985 | + | Section: SectionPerformance, | |
| 986 | + | }, | |
| 987 | + | { | |
| 988 | + | Key: "performance.network_process_memory_poll_interval_sec", | |
| 989 | + | Type: "float64", | |
| 990 | + | Default: fmt.Sprintf("%.1f", defaults.Performance.NetworkProcessMemoryPollIntervalSec), | |
| 991 | + | Description: "Network memory check interval in seconds (custom profile only)", | |
| 992 | + | Range: ">=0", | |
| 993 | + | Section: SectionPerformance, | |
| 994 | + | }, | |
| 995 | + | { | |
| 996 | + | Key: "performance.network_process_memory_conservative_threshold", | |
| 997 | + | Type: "float64", | |
| 998 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.NetworkProcessMemoryConservativeThreshold), | |
| 999 | + | Description: "Network conservative memory threshold (0-1, custom profile only)", | |
| 1000 | + | Range: "0-1", | |
| 1001 | + | Section: SectionPerformance, | |
| 1002 | + | }, | |
| 1003 | + | { | |
| 1004 | + | Key: "performance.network_process_memory_strict_threshold", | |
| 1005 | + | Type: "float64", | |
| 1006 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.NetworkProcessMemoryStrictThreshold), | |
| 1007 | + | Description: "Network strict memory threshold (0-1, custom profile only)", | |
| 1008 | + | Range: "0-1", | |
| 1009 | + | Section: SectionPerformance, | |
| 1010 | + | }, | |
| 872 | 1011 | } | |
| 873 | 1012 | } | |
| 874 | 1013 | ||
| @@ -14,6 +14,7 @@ const ( | |||||
| 14 | SectionWorkspace = "Workspace" | 14 | SectionWorkspace = "Workspace" | ||
| 15 | SectionSession = "Session" | 15 | SectionSession = "Session" | ||
| 16 | SectionOmnibox = "Omnibox" | 16 | SectionOmnibox = "Omnibox" | ||
| 17 | + | SectionClipboard = "Clipboard" | |||
| 17 | SectionContentFiltering = "Content Filtering" | 18 | SectionContentFiltering = "Content Filtering" | ||
| 18 | SectionRendering = "Rendering" | 19 | SectionRendering = "Rendering" | ||
| 19 | SectionMedia = "Media" | 20 | SectionMedia = "Media" | ||
| @@ -64,6 +65,9 @@ func (p *SchemaProvider) GetSchema() []entity.ConfigKeyInfo { | |||||
| 64 | // Omnibox section | 65 | // Omnibox section | ||
| 65 | keys = append(keys, p.getOmniboxKeys(defaults)...) | 66 | keys = append(keys, p.getOmniboxKeys(defaults)...) | ||
| 66 | 67 | ||||
| 68 | + | // Clipboard section | |||
| 69 | + | keys = append(keys, p.getClipboardKeys(defaults)...) | |||
| 70 | + | ||||
| 67 | // Content Filtering section | 71 | // Content Filtering section | ||
| 68 | keys = append(keys, p.getContentFilteringKeys(defaults)...) | 72 | keys = append(keys, p.getContentFilteringKeys(defaults)...) | ||
| 69 | 73 | ||||
| @@ -459,6 +463,34 @@ func (*SchemaProvider) getWorkspaceKeys(defaults *Config) []entity.ConfigKeyInfo | |||||
| 459 | Description: "Global shortcut to switch to previous tab", | 463 | Description: "Global shortcut to switch to previous tab", | ||
| 460 | Section: SectionWorkspace, | 464 | Section: SectionWorkspace, | ||
| 461 | }, | 465 | }, | ||
| 466 | + | { | |||
| 467 | + | Key: "workspace.shortcuts.consume_or_expel_left", | |||
| 468 | + | Type: "string", | |||
| 469 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelLeft, | |||
| 470 | + | Description: "Consume into left sibling stack or expel left (alpha)", | |||
| 471 | + | Section: SectionWorkspace, | |||
| 472 | + | }, | |||
| 473 | + | { | |||
| 474 | + | Key: "workspace.shortcuts.consume_or_expel_right", | |||
| 475 | + | Type: "string", | |||
| 476 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelRight, | |||
| 477 | + | Description: "Consume into right sibling stack or expel right (alpha)", | |||
| 478 | + | Section: SectionWorkspace, | |||
| 479 | + | }, | |||
| 480 | + | { | |||
| 481 | + | Key: "workspace.shortcuts.consume_or_expel_up", | |||
| 482 | + | Type: "string", | |||
| 483 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelUp, | |||
| 484 | + | Description: "Consume into upper sibling stack or expel up (alpha)", | |||
| 485 | + | Section: SectionWorkspace, | |||
| 486 | + | }, | |||
| 487 | + | { | |||
| 488 | + | Key: "workspace.shortcuts.consume_or_expel_down", | |||
| 489 | + | Type: "string", | |||
| 490 | + | Default: defaults.Workspace.Shortcuts.ConsumeOrExpelDown, | |||
| 491 | + | Description: "Consume into lower sibling stack or expel down (alpha)", | |||
| 492 | + | Section: SectionWorkspace, | |||
| 493 | + | }, | |||
| 462 | // Popups | 494 | // Popups | ||
| 463 | { | 495 | { | ||
| 464 | Key: "workspace.popups.behavior", | 496 | Key: "workspace.popups.behavior", | ||
| @@ -679,6 +711,18 @@ func (*SchemaProvider) getContentFilteringKeys(defaults *Config) []entity.Config | |||||
| 679 | } | 711 | } | ||
| 680 | } | 712 | } | ||
| 681 | 713 | ||||
| 714 | + | func (*SchemaProvider) getClipboardKeys(defaults *Config) []entity.ConfigKeyInfo { | |||
| 715 | + | return []entity.ConfigKeyInfo{ | |||
| 716 | + | { | |||
| 717 | + | Key: "clipboard.auto_copy_on_selection", | |||
| 718 | + | Type: "bool", | |||
| 719 | + | Default: fmt.Sprintf("%t", defaults.Clipboard.AutoCopyOnSelection), | |||
| 720 | + | Description: "Auto-copy selected text to clipboard (zellij-style)", | |||
| 721 | + | Section: SectionClipboard, | |||
| 722 | + | }, | |||
| 723 | + | } | |||
| 724 | + | } | |||
| 725 | + | ||||
| 682 | func (*SchemaProvider) getRenderingKeys(defaults *Config) []entity.ConfigKeyInfo { | 726 | func (*SchemaProvider) getRenderingKeys(defaults *Config) []entity.ConfigKeyInfo { | ||
| 683 | return []entity.ConfigKeyInfo{ | 727 | return []entity.ConfigKeyInfo{ | ||
| 684 | { | 728 | { | ||
| @@ -853,6 +897,14 @@ func (*SchemaProvider) getDebugKeys(defaults *Config) []entity.ConfigKeyInfo { | |||||
| 853 | 897 | ||||
| 854 | func (*SchemaProvider) getPerformanceKeys(defaults *Config) []entity.ConfigKeyInfo { | 898 | func (*SchemaProvider) getPerformanceKeys(defaults *Config) []entity.ConfigKeyInfo { | ||
| 855 | return []entity.ConfigKeyInfo{ | 899 | return []entity.ConfigKeyInfo{ | ||
| 900 | + | { | |||
| 901 | + | Key: "performance.profile", | |||
| 902 | + | Type: "string", | |||
| 903 | + | Default: string(defaults.Performance.Profile), | |||
| 904 | + | Description: "Performance profile preset (custom enables manual tuning)", | |||
| 905 | + | Values: []string{"default", "lite", "max", "custom"}, | |||
| 906 | + | Section: SectionPerformance, | |||
| 907 | + | }, | |||
| 856 | { | 908 | { | ||
| 857 | Key: "performance.zoom_cache_size", | 909 | Key: "performance.zoom_cache_size", | ||
| 858 | Type: "int", | 910 | Type: "int", | ||
| @@ -869,6 +921,93 @@ func (*SchemaProvider) getPerformanceKeys(defaults *Config) []entity.ConfigKeyIn | |||||
| 869 | Range: ">=0", | 921 | Range: ">=0", | ||
| 870 | Section: SectionPerformance, | 922 | Section: SectionPerformance, | ||
| 871 | }, | 923 | }, | ||
| 924 | + | { | |||
| 925 | + | Key: "performance.skia_cpu_painting_threads", | |||
| 926 | + | Type: "int", | |||
| 927 | + | Default: fmt.Sprintf("%d", defaults.Performance.SkiaCPUPaintingThreads), | |||
| 928 | + | Description: "Skia CPU rendering threads (0=unset, custom profile only)", | |||
| 929 | + | Range: ">=0", | |||
| 930 | + | Section: SectionPerformance, | |||
| 931 | + | }, | |||
| 932 | + | { | |||
| 933 | + | Key: "performance.skia_gpu_painting_threads", | |||
| 934 | + | Type: "int", | |||
| 935 | + | Default: fmt.Sprintf("%d", defaults.Performance.SkiaGPUPaintingThreads), | |||
| 936 | + | Description: "Skia GPU rendering threads (-1=unset, 0=disable, custom profile only)", | |||
| 937 | + | Range: ">=-1", | |||
| 938 | + | Section: SectionPerformance, | |||
| 939 | + | }, | |||
| 940 | + | { | |||
| 941 | + | Key: "performance.skia_enable_cpu_rendering", | |||
| 942 | + | Type: "bool", | |||
| 943 | + | Default: fmt.Sprintf("%t", defaults.Performance.SkiaEnableCPURendering), | |||
| 944 | + | Description: "Force CPU rendering (custom profile only)", | |||
| 945 | + | Section: SectionPerformance, | |||
| 946 | + | }, | |||
| 947 | + | { | |||
| 948 | + | Key: "performance.web_process_memory_limit_mb", | |||
| 949 | + | Type: "int", | |||
| 950 | + | Default: fmt.Sprintf("%d", defaults.Performance.WebProcessMemoryLimitMB), | |||
| 951 | + | Description: "Web process memory limit in MB (0=unset, custom profile only)", | |||
| 952 | + | Range: ">=0", | |||
| 953 | + | Section: SectionPerformance, | |||
| 954 | + | }, | |||
| 955 | + | { | |||
| 956 | + | Key: "performance.web_process_memory_poll_interval_sec", | |||
| 957 | + | Type: "float64", | |||
| 958 | + | Default: fmt.Sprintf("%.1f", defaults.Performance.WebProcessMemoryPollIntervalSec), | |||
| 959 | + | Description: "Memory check interval in seconds (0=default 30s, custom profile only)", | |||
| 960 | + | Range: ">=0", | |||
| 961 | + | Section: SectionPerformance, | |||
| 962 | + | }, | |||
| 963 | + | { | |||
| 964 | + | Key: "performance.web_process_memory_conservative_threshold", | |||
| 965 | + | Type: "float64", | |||
| 966 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.WebProcessMemoryConservativeThreshold), | |||
| 967 | + | Description: "Conservative memory cleanup threshold (0-1, custom profile only)", | |||
| 968 | + | Range: "0-1", | |||
| 969 | + | Section: SectionPerformance, | |||
| 970 | + | }, | |||
| 971 | + | { | |||
| 972 | + | Key: "performance.web_process_memory_strict_threshold", | |||
| 973 | + | Type: "float64", | |||
| 974 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.WebProcessMemoryStrictThreshold), | |||
| 975 | + | Description: "Strict memory cleanup threshold (0-1, custom profile only)", | |||
| 976 | + | Range: "0-1", | |||
| 977 | + | Section: SectionPerformance, | |||
| 978 | + | }, | |||
| 979 | + | { | |||
| 980 | + | Key: "performance.network_process_memory_limit_mb", | |||
| 981 | + | Type: "int", | |||
| 982 | + | Default: fmt.Sprintf("%d", defaults.Performance.NetworkProcessMemoryLimitMB), | |||
| 983 | + | Description: "Network process memory limit in MB (0=unset, custom profile only)", | |||
| 984 | + | Range: ">=0", | |||
| 985 | + | Section: SectionPerformance, | |||
| 986 | + | }, | |||
| 987 | + | { | |||
| 988 | + | Key: "performance.network_process_memory_poll_interval_sec", | |||
| 989 | + | Type: "float64", | |||
| 990 | + | Default: fmt.Sprintf("%.1f", defaults.Performance.NetworkProcessMemoryPollIntervalSec), | |||
| 991 | + | Description: "Network memory check interval in seconds (custom profile only)", | |||
| 992 | + | Range: ">=0", | |||
| 993 | + | Section: SectionPerformance, | |||
| 994 | + | }, | |||
| 995 | + | { | |||
| 996 | + | Key: "performance.network_process_memory_conservative_threshold", | |||
| 997 | + | Type: "float64", | |||
| 998 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.NetworkProcessMemoryConservativeThreshold), | |||
| 999 | + | Description: "Network conservative memory threshold (0-1, custom profile only)", | |||
| 1000 | + | Range: "0-1", | |||
| 1001 | + | Section: SectionPerformance, | |||
| 1002 | + | }, | |||
| 1003 | + | { | |||
| 1004 | + | Key: "performance.network_process_memory_strict_threshold", | |||
| 1005 | + | Type: "float64", | |||
| 1006 | + | Default: fmt.Sprintf("%.2f", defaults.Performance.NetworkProcessMemoryStrictThreshold), | |||
| 1007 | + | Description: "Network strict memory threshold (0-1, custom profile only)", | |||
| 1008 | + | Range: "0-1", | |||
| 1009 | + | Section: SectionPerformance, | |||
| 1010 | + | }, | |||
| 872 | } | 1011 | } | ||
| 873 | } | 1012 | } | ||
| 874 | 1013 | ||||