Nullkia: A Pipeline-Driven Desktop Environment
Nullkia is a lightweight, Wayland-native desktop environment written entirely in Lateralus. Tiling and floating modes, GPU-accelerated compositor, and pipeline-based widgets — all in under 50 MB RAM.
◉ Why Nullkia?
Existing desktop environments are either:
- Heavy — GNOME/KDE use 500MB+ RAM just sitting idle
- Unconfigurable — Hard-coded behaviors you can't change
- X11-bound — Still using a protocol from 1987
Nullkia is different: lightweight (~40MB idle), fully configurable via pipelines, and Wayland-native from the ground up.
◉ Pipeline Widgets
Status bar widgets are Lateralus pipelines. CPU usage, network stats, volume — all streaming data transformations:
// ~/.config/nullkia/widgets.ltl
// CPU widget - samples every 500ms, smooths, formats
widget cpu_widget {
interval: 500,
pipeline: cpu_samples()
|> window(10)
|> map(avg)
|> format("CPU: {:.1}%")
}
// Memory widget
widget mem_widget {
interval: 1000,
pipeline: mem_info()
|> map(fn(m) { m.used / m.total * 100.0 })
|> format("RAM: {:.0}%")
}
// Network throughput
widget net_widget {
interval: 1000,
pipeline: net_stats()
|> map(fn(n) { n.rx_bytes / 1024.0 })
|> diff() // Delta from previous
|> format("↓ {:.1} KB/s")
}
// Battery with color coding
widget battery_widget {
interval: 5000,
pipeline: battery_info()
|> map(fn(b) {
let color = match b.percent {
p if p < 20 => "#ff5555",
p if p < 50 => "#ffcc00",
_ => "#55ff55",
}
{ text: "⚡ " + str(b.percent) + "%", color: color }
})
}
◉ Hybrid Window Management
Switch between tiling and floating modes per-workspace:
// ~/.config/nullkia/config.toml
[workspaces]
count = 9
[workspace.1]
name = "dev"
layout = "tiling"
master_ratio = 0.55
[workspace.2]
name = "web"
layout = "floating"
[workspace.3]
name = "term"
layout = "tiling"
layout_type = "columns" # or "rows", "spiral"
[tiling]
gap = 8
border_width = 2
border_color = "#00ff88"
border_focus = "#ff66ff"
Layout Rules
// Window rules are pipeline expressions
[rules]
// Firefox always on workspace 2
[[rule]]
match = { app_id = "firefox" }
action = { workspace = 2, floating = false }
// Terminals tile on workspace 3
[[rule]]
match = { app_id = "kitty|alacritty|foot" }
action = { workspace = 3 }
// Dialogs float
[[rule]]
match = { type = "dialog" }
action = { floating = true, center = true }
// Picture-in-picture
[[rule]]
match = { title = "*Picture in Picture*" }
action = { floating = true, sticky = true, size = [400, 225] }
◉ Keyboard Bindings
[keybindings]
"Super+Return" = "spawn kitty"
"Super+d" = "spawn wofi --show drun"
"Super+q" = "close_window"
"Super+f" = "toggle_fullscreen"
"Super+Space" = "toggle_floating"
# Focus
"Super+h" = "focus left"
"Super+j" = "focus down"
"Super+k" = "focus up"
"Super+l" = "focus right"
# Move
"Super+Shift+h" = "move left"
"Super+Shift+j" = "move down"
"Super+Shift+k" = "move up"
"Super+Shift+l" = "move right"
# Workspaces
"Super+1" = "workspace 1"
"Super+2" = "workspace 2"
"Super+Shift+1" = "move_to_workspace 1"
"Super+Shift+2" = "move_to_workspace 2"
# Layout
"Super+t" = "layout tiling"
"Super+y" = "layout floating"
"Super+[" = "resize shrink"
"Super+]" = "resize grow"
◉ Plugin System
v1.1 introduces plugins — load Lateralus modules to extend the desktop:
// ~/.config/nullkia/plugins/auto_tile.ltl
plugin auto_tile {
// Automatically tile new windows based on content
on window_open(win: Window) {
let should_tile = win.app_id
|> matches_any(["code", "kitty", "firefox"])
if should_tile {
win.set_tiled(true)
}
}
// Smart resize based on content
on window_resize(win: Window, new_size: Size) {
if win.is_terminal() && new_size.width < 400 {
win.set_font_size(win.font_size - 2)
}
}
}
// Enable in config.toml:
// [plugins]
// enabled = ["auto_tile", "workspace_history"]
◉ Notifications
// Notification styling and behavior
[notifications]
position = "top-right"
width = 350
timeout = 5000
max_visible = 5
// Filter notifications
[[notification_rule]]
match = { app = "Slack", urgency = "low" }
action = { timeout = 2000 }
[[notification_rule]]
match = { app = "Discord" }
action = { sound = false }
[[notification_rule]]
match = { urgency = "critical" }
action = { timeout = 0, sticky = true }
◉ Theming
// ~/.config/nullkia/theme.toml
[colors]
background = "#0a0a0f"
foreground = "#e0e0e0"
accent = "#00ff88"
warning = "#ffcc00"
error = "#ff5555"
[bar]
height = 28
background = "#0a0a0f"
font = "JetBrains Mono"
font_size = 12
[window]
border_width = 2
border_radius = 0
shadow = true
shadow_color = "#000000aa"
[cursor]
theme = "Adwaita"
size = 24
◉ Performance
- Memory — ~40MB idle, ~60MB with 20 windows
- CPU — <1% idle, GPU-accelerated compositing
- Startup — <200ms to usable desktop
- Latency — <8ms input-to-display
◉ Installation
# NullSec Linux (pre-installed)
# Already your default desktop
# Arch Linux
yay -S nullkia
# Debian/Ubuntu
sudo add-apt-repository ppa:nullsec/nullkia
sudo apt install nullkia
# From source
git clone https://github.com/bad-antics/nullkia
cd nullkia
lateralus build --release
sudo make install
Nullkia ships with NullSec Linux and is available as a standalone download. Source on GitHub.