Lios
Lios is a polished Rust GTK4/VTE terminal emulator by KnottDynamics and Trevor Knott. It keeps the terminal core reliable by using VTE, then focuses on what should feel better day to day: beautiful built-in themes, glass/background controls, fast same-directory windows, simple config, and an opt-in GPU renderer switch without making unstable GPU paths the default.
Why Lios
- Uses VTE for real terminal behavior instead of a toy parser.
- Keeps Cairo as the reliable default renderer, with explicit opt-in GPU modes for GTK auto, OpenGL, or Vulkan.
- Treats theming as a core feature, not a plugin: built-in palettes, opacity, background images, accent tint, and live preferences are baked in.
- Opens new windows in the active terminal directory, which keeps shell workflows smooth.
- Stays small: SSH and other extra workflows belong in optional
lios-*helpers, not the core terminal. - Avoids telemetry, background downloads, and secret storage.
Features
- GTK4 window with a VTE terminal widget.
- Spawns
$SHELL, with common Unix shell fallbacks. - Optional
-- COMMAND ...and--command "..."launch modes. - Dark readable defaults: white-on-black palette, opaque dark backing layer,
Monospace 12, block cursor, 1,000 lines of scrollback. - Built-in themes:
xfce,xterm,green-on-black,white-on-black,dark-pastels,solarized-dark,solarized-light,black-on-white. - Slider-based master/full-window opacity plus nested image, terminal shade, and accent opacity controls.
- Background image support with
~path expansion, fixed color tint, or per-launch random accent tint. - Explicit visible mouse pointer over the terminal instead of VTE's dark text cursor shape.
- GPU acceleration toggle: reliable
cairoby default, with opt-inauto, OpenGL (gl), or Vulkan (vulkan) throughGSK_RENDERERbefore GTK starts. - Desktop launcher install with
lios --installorlios ---install. - App icon installed from
assets/logo.png. - Optional window decoration/topbar removal.
- Slim topbar with a collapsible in-window preferences drawer for common live theme/background changes.
Ctrl+Shift+NandNew Windowopen a borderless terminal in the active terminal directory.- Right-click appearance submenus for background images, terminal glass, accent presets, random tint, and themes.
- Right-click diagnostics for active windows, RSS, scrollback, theme, background, and config path.
- Terminal-driven config commands for theming from a shell or script.
- Clipboard/context actions for copy, copy as HTML, paste, select all.
- Keyboard shortcuts for
Ctrl+Shift+C,Ctrl+Shift+V,Ctrl+Shift+A,Ctrl+Shift+N,Ctrl+Shift+Q,Ctrl+Shift+,,Ctrl++,Ctrl+-, andCtrl+0.
System Dependencies
Install Rust plus GTK4/VTE libraries and headers.
Debian/Ubuntu names:
Arch names:
Run
Install from crates.io:
Run from source:
Optional Plugins
Core Lios stays small. Optional helpers use separate lios-* packages.
lios-ssh launches OpenSSH inside Lios without storing hosts, passwords, keys, or SSH config:
The helper wraps lios -- ssh ... using argv. OpenSSH still handles ~/.ssh/config, SSH agent, known hosts, keys, jump hosts, and verification.
Configuration
Lios reads ~/.config/lios/config.toml by default when it exists. Use --config path/to/config.toml to load another file.
[]
= "Lios"
= 960
= 640
= true # set false to remove the topbar/window decorations
= "cairo" # cairo disables GPU; auto, gl, or vulkan enable GPU
= 1.00 # master/full-window opacity
[]
= "Monospace 12"
= 1000 # max 100000
[]
= "xfce"
# Optional custom overrides:
# foreground = "#ffffff"
# background = "#000000"
# cursor = "#ffffff"
# palette = ["#000000", "#aa0000", "#00aa00", "#aa5500", "#0000aa", "#aa00aa", "#00aaaa", "#aaaaaa", "#555555", "#ff5555", "#55ff55", "#ffff55", "#5555ff", "#ff55ff", "#55ffff", "#ffffff"]
[]
= "/home/example/Pictures/wallpaper.jpg"
= 1.00
= 0.50
# Use lower values for more glass/desktop transparency.
# overlay_color = "#7c3aed"
= 0.00
= false
CLI flags override the config file for one run. Use --gpu for GTK GPU auto-selection, --gpu-mode gl or --gpu-mode vulkan to force a GPU backend, and --no-gpu to force the reliable Cairo renderer. The text config stores this as window.renderer so older configs remain valid.
Use window.opacity or --opacity as the main full-window opacity. This affects the whole terminal UI and is the primary control for app transparency.
Background images are rendered against the theme background and composited below a transparent VTE terminal. image_opacity controls how strongly the image blends into the theme-colored base. terminal_opacity is the nested terminal shade layer over that image; lower values show more image while preserving readable text. Without an image, use the master opacity for reliable transparent-terminal behavior, then use terminal_opacity only as the inner shade. If an older config has an image with terminal_opacity = 1.00, Lios uses the image shade at runtime so the image is not hidden by a fully opaque terminal background.
The default topbar includes a Customize button when decorated = true. It opens a collapsible in-window drawer rather than a separate dialog. Ctrl+Shift+, toggles the same drawer, which is useful when the topbar is hidden. Ctrl+Shift+N opens another borderless terminal window in the active terminal directory using the current live settings. Ctrl+Shift+Q closes the current window. The drawer can change GPU acceleration mode, theme, font, topbar visibility, background image path, master opacity, terminal shade opacity, image opacity, accent opacity, overlay color, and random overlay. Opacity controls are sliders. The background row includes a Choose Image button with an image-file picker; chosen images apply immediately and lower terminal shade opacity if needed so the image is visible. Theme/background/font changes apply live; renderer changes are saved and apply on the next launch. Changes are written back to ~/.config/lios/config.toml when a config path is available.
Right-click inside the terminal for quick actions. New Window opens a borderless terminal in the active terminal directory. Close Window manages terminal windows. Diagnostics prints resource state into the terminal. Reset to Dark Default returns the current window to the plain dark default look. The Opacity submenu starts with master/full-window opacity controls, then nests terminal shade controls under Terminal Shade. The Background submenu changes/clears images, adjusts image brightness, or resets the whole background. Accent switches fixed accent presets (Violet, Cyan, Emerald, Amber, Rose), toggles random accent tint, and adjusts accent strength. The Theme submenu switches built-in terminal themes. These actions apply live and persist to the active config path when one is available.
Desktop Launcher
Install or build the binary first, then run lios --install to add Lios to the desktop app menu without launching it from another terminal. lios ---install is also accepted.
The command writes dev.lios.Terminal.desktop under $XDG_DATA_HOME/applications or ~/.local/share/applications with Terminal=false and Exec pointing at the exact binary that ran the command. It also installs the app icon from assets/logo.png as dev.lios.Terminal under the user icon theme and requests a desktop/icon cache refresh when the standard desktop tools are available. Normal GUI startup also makes the packaged icon available to GTK so direct cargo run launches can resolve the same icon name. Running cargo run -- --install creates a launcher for target/debug/lios; use the installed lios --install command for a stable app-menu entry. Use lios --uninstall or lios ---uninstall to remove that launcher and icon.
Resource Policy
- Terminal scrollback is bounded.
scrollback_linesmust be between0and100000; the default is1000. - Runtime diagnostics show active windows, process RSS, scrollback limit, renderer, theme, background image, opacity, overlay state, and config path.
- GTK callbacks that can outlive their parent window use weak window references to avoid reference cycles during repeated open/close cycles.
- Segmented preference controls store weak button references internally, avoiding self-cycles between buttons and their click closures.
- No Tokio tasks or channels are used; child processes are owned by VTE and tied to the terminal widget/window lifecycle.
Rust 1.88.0 can ICE while compiling generated GTK binding crates with heavy debug or optimization settings. Cargo.toml keeps the workaround scoped to the affected GTK crates. If cargo install still crashes while compiling GTK dependencies with a rustc stack trace, retry with a larger compiler stack:
RUST_MIN_STACK=16777216
Terminal config commands:
Useful keys include gpu, gpu_mode, renderer, theme, font, opacity, background.image, background_opacity, background_image_opacity, overlay_color, overlay_opacity, random_overlay, and topbar.
Package
The Cargo package is named lios and includes crate metadata for packaging.