veil

Version: v2.0.0 Status: Flagship Stable Author: viewerofall

Veil is a high-performance Wayland compositor built to run standalone on bare TTYs or nested inside existing terminals and compositors. Features dwindle tiling, full input integration, bidirectional clipboard sync, and direct GPU hardware rendering.

Quick Install (Arch Linux / AUR)
yay -S veil-host-bin velogin-bin

Key Features

Dwindle Tiling
Dynamic 2×2 grid layout. Resize, swap, rotate splits with Super keybinds.
Kitty Graphics
Pixel-perfect rendering via Kitty Graphics Protocol on Kitty and WezTerm.
32MB Memory Footprint
Ultra-lean RAM consumption built on Smithay & Rust.
DRM/KMS Output
Direct TTY framebuffer rendering without requiring a terminal emulator.
Multi-Compositor Nesting
Run Niri and Hyprland simultaneously as separate nested windows.
GPU Pipeline
Vulkan GPU compute shader encoding for low-latency rendering.

Installation

Curl Script (Recommended)

curl -fsSL https://viewerofall.pages.dev/install/veil/install.sh | bash

Manual Download

curl -fsSL https://github.com/viewerofall/veil/releases/download/v2.0.0/veil-host-x86_64.tar.gz | tar xz
sudo install -m755 veil-host /usr/local/bin/

Usage & Keybinds

# Launch an app inside Veil
veil-host run firefox

# Append another app to running compositor instance
veil-host append nautilus

Keybindings

KeybindAction
Super + H / J / K / LFocus left / down / up / right
Super + = / -Resize window (grow / shrink)
Super + SSwap focused window
Super + RRotate split axis
Super + QExit Veil
Ctrl + CTerminate active app

Abyss (Velogin) Login Manager

Graphical TTY login manager running on bare DRM/KMS with PAM auth and session management.

sudo systemctl enable seatd.service
sudo systemctl disable getty@tty1.service
sudo systemctl enable abyss.service

Architecture

App (Firefox, Nautilus, etc.)
  ↓ Wayland Protocol
veil-host (Smithay compositor)
  ├─ Dwindle layout engine
  ├─ GPU compute pipeline (wgpu Vulkan)
  └─ DRM/KMS or Terminal escape rendering

Configuration

Create ~/.config/veil/config.lua:

keybinds = {
  mod_key = "super",
  focus_left  = "h",
  focus_right = "l",
  focus_up    = "k",
  focus_down  = "j",
  quit = "q",
}
render_mode = "auto"
gpu_encode = true

Roadmap