LinuxChat now supports an advanced user config file at:
~/.config/LinuxChat/.config/config.json
If the file does not exist, LinuxChat creates it automatically on first startup. After editing this file, restart LinuxChat and the new configuration will take effect.
config.json is the advanced appearance and behavior layer for LinuxChat. It is intended for users who want more control than the built-in light/dark toggle.
It currently controls:
- theme startup mode
- custom colors
- transparency
- window border on or off
- corner radius
- animation on or off
- extra CSS injection
At startup, LinuxChat applies settings in this order:
- built-in defaults
- saved app state and DB settings
config.jsonoverrides
That means config.json is the final appearance override layer.
{
"version": 1,
"ui": {
"transparency": 0.92,
"show_window_border": true,
"window_radius": 14,
"enable_blur_hint": false,
"animation_enabled": true
},
"theme": {
"mode": "dark",
"background_color": "#0b0b0b",
"surface_color": "#111111",
"sidebar_color": "#101010",
"text_color": "#f5f5f5",
"muted_text_color": "#a0a0a0",
"accent_color": "#4da3ff",
"user_bubble_color": "#1a1a1a",
"assistant_bubble_color": "#151515",
"input_background_color": "#101010",
"code_block_background_color": "#161616",
"code_block_text_color": "#f0f0f0",
"border_color": "#2a2a2a"
},
"custom_css": {
"enabled": true,
"inject_css": ""
},
"advanced": {
"reload_theme_on_startup": true,
"strict_config_validation": false
}
}"version": 1Config schema version. Keep this as 1 for the current release.
"transparency": 0.92Controls the alpha value used by the main window surfaces.
Recommended range:
1.0= fully opaque0.85to0.95= balanced translucent look0.15= minimum supported clamp
If you set a value outside the supported range, LinuxChat clamps it internally.
"show_window_border": truetrue: show the outer window borderfalse: remove the outer border
"window_radius": 14Controls the global corner radius used by the window and many rounded UI surfaces.
Recommended range:
0= square8to18= balanced24+ = very rounded
LinuxChat currently clamps this field into a safe range.
"enable_blur_hint": falseReserved compatibility flag for compositor-related styling experiments. It is safe to leave this off.
"animation_enabled": trueControls a small set of UI transitions such as sidebar reveal animation and some style transitions.
true: keep transitionsfalse: prefer snappier no-animation behavior
All theme color fields expect a color string GTK can parse. The safest format is standard hex:
"background_color": "#0b0b0b"Recommended format:
#RRGGBB
"mode": "dark"Startup theme mode.
Allowed values:
"dark""light"
Main window background.
Main content surface background.
Sidebar background.
Primary text color.
Status text, meta text, elapsed text, and muted labels.
Focus and accent color used by selected elements and focus borders.
User message bubble background.
Assistant message bubble background.
Message input and dropdown background.
Code block background.
Code block text color.
Shared border color for window and many UI surfaces.
"enabled": truetrue: applyinject_cssfalse: ignoreinject_css
"inject_css": ".assistant-bubble { border-width: 2px; }"Extra GTK CSS appended after the built-in theme CSS. This is the most powerful advanced field.
Use this when the existing JSON fields are not enough.
Example:
"inject_css": ".assistant-bubble { border-width: 2px; }\n.user-bubble { border-style: dashed; }"Currently reserved for future expansion. Keep it set to true.
Currently reserved for future expansion. Keep it set to false unless you are testing config behavior.
{
"version": 1,
"ui": {
"transparency": 0.88,
"show_window_border": true,
"window_radius": 16,
"enable_blur_hint": false,
"animation_enabled": true
},
"theme": {
"mode": "dark",
"background_color": "#080b12",
"surface_color": "#0f1420",
"sidebar_color": "#0c111b",
"text_color": "#edf3ff",
"muted_text_color": "#8ea0c0",
"accent_color": "#62a0ff",
"user_bubble_color": "#16233a",
"assistant_bubble_color": "#121827",
"input_background_color": "#0d1320",
"code_block_background_color": "#0b1220",
"code_block_text_color": "#f3f6ff",
"border_color": "#273246"
},
"custom_css": {
"enabled": true,
"inject_css": ""
},
"advanced": {
"reload_theme_on_startup": true,
"strict_config_validation": false
}
}{
"version": 1,
"ui": {
"transparency": 0.94,
"show_window_border": false,
"window_radius": 14,
"enable_blur_hint": false,
"animation_enabled": false
},
"theme": {
"mode": "dark",
"background_color": "#0b0b0b",
"surface_color": "#111111",
"sidebar_color": "#101010",
"text_color": "#f5f5f5",
"muted_text_color": "#9a9a9a",
"accent_color": "#4da3ff",
"user_bubble_color": "#171717",
"assistant_bubble_color": "#141414",
"input_background_color": "#101010",
"code_block_background_color": "#161616",
"code_block_text_color": "#f0f0f0",
"border_color": "#2a2a2a"
},
"custom_css": {
"enabled": true,
"inject_css": ""
},
"advanced": {
"reload_theme_on_startup": true,
"strict_config_validation": false
}
}{
"version": 1,
"ui": {
"transparency": 0.98,
"show_window_border": true,
"window_radius": 12,
"enable_blur_hint": false,
"animation_enabled": true
},
"theme": {
"mode": "light",
"background_color": "#f4f7fb",
"surface_color": "#ffffff",
"sidebar_color": "#edf2f9",
"text_color": "#101828",
"muted_text_color": "#667085",
"accent_color": "#3b82f6",
"user_bubble_color": "#dbeafe",
"assistant_bubble_color": "#ffffff",
"input_background_color": "#ffffff",
"code_block_background_color": "#f8fafc",
"code_block_text_color": "#0f172a",
"border_color": "#d0d7e2"
},
"custom_css": {
"enabled": true,
"inject_css": ""
},
"advanced": {
"reload_theme_on_startup": true,
"strict_config_validation": false
}
}- After editing
config.json, restart LinuxChat. - Invalid color strings are ignored and LinuxChat keeps the default value for that field.
- This file is for advanced appearance control. It does not replace normal chat data storage.
- The current implementation is intended to be stable and restart-driven, not hot-reload driven.
- edit
~/.config/LinuxChat/.config/config.json - save the file
- restart LinuxChat
- verify the result
- tune values gradually
If your custom config looks bad, replace it with the default file contents from this document and restart LinuxChat.