Veila
Themes

Kitty

Playful anime-style theme on a warm pink background with a centered clock and pill input

Kitty theme preview

Background Image

The background image comes from Wallhaven. If you'd like to use this specific image as your lock screen background, download it here

Use This Theme

You do not need to copy the full config below just to activate Kitty. The preset is already bundled into Veila.

Use either of these:

theme = "kitty"

Or from the CLI:

veila theme set kitty

If the daemon is already running, veila theme set also tries to reload the config immediately.

Minimal Overrides

The Kitty theme already works without extra config. Use a small ~/.config/veila/config.toml like this only when you want to change personal details such as avatar, wallpaper, weather, now playing, or clock or date format.

theme = "kitty" # Use the bundled Kitty theme

[visuals.outputs]
ui_mode = "single" # Show the full UI on one monitor. Use "all" for every monitor

[background]
mode = "file" # Background source (accepts "file", "gradient", "layered", "radial", or "solid")
path = "/path/to/wallpaper.jpg" # Wallpaper image path used when mode = "file"

[weather]
enabled = true # Enable background weather fetching (accepts true or false)
location = "Tokyo" # Place name used for weather lookup (accepts any geocodable city or place name)
unit = "celsius" # Temperature unit (accepts "celsius" or "fahrenheit")

[visuals.now_playing]
enabled = true # Show the now-playing widget when MPRIS media metadata is available (accepts true or false)

[visuals.clock]
format = "24h" # Clock format (accepts "24h" or "12h")

You can keep this file minimal. Any key you do not set continues to come from the bundled Kitty theme

By default, ui_mode is single, so the full lock UI appears on the primary or selected monitor while other monitors stay protected by secure background curtains.

If you want the full UI on every monitor, set [visuals.outputs].ui_mode to all. See Monitor Output for the full configuration reference.

Fonts

Veila can use both bundled fonts and fonts installed on your system.

Bundled fonts work out of the box and do not require extra setup:

  • Geom
  • Google Sans Flex
  • Nunito

Kitty uses Yoruka for the clock and date. Yoruka is not bundled with Veila, so install it as a system font first or replace it with one of the bundled font families above.

For a font you downloaded manually, install it into your local font directory and rebuild the font cache:

mkdir -p ~/.local/share/fonts
cp ~/Downloads/Yoruka.ttf ~/.local/share/fonts/
fc-cache -fv

Then verify the exact family name your system sees:

fc-match Yoruka
fc-list | rg -i yoruka

Use that exact family name in the theme:

[visuals.clock]
font_family = "Yoruka"
font_weight = 400
font_style = "normal"

Font weight and style matter. If the installed font only provides a regular 400 face but the config asks for 700, or if the font is italic but the config asks for normal, Veila may pick a fallback font instead of the one you expected. When a font appears to not work, first check the real family name, available weight, and whether the face is normal or italic.

Preset Reference

The config below shows the bundled Kitty preset as a reference. It is useful when you want to understand how the theme is built, copy it into ~/.config/veila/themes/, or override only selected parts in your own config.toml.

You do not need to paste this whole block unless you want to customize it.

[background]
mode = "file"
path = "/path/to/wallpaper.jpg"
color = "#49323E"
dim_strength = 20

[battery]
enabled = true

[weather]
enabled = false

[visuals.clock]
format = "12h"
style = "standard"
meridiem_font_size = 22
meridiem_x = 6
meridiem_y = 7
font_family = "Yoruka"
font_weight = 400
color = "rgba(255, 255, 255, 0.8)"
font_size = 124
halign = "center"
valign = "top"
x = 0
y = 0
relative_to = "auth_panel"

[visuals.date]
format = "long"
font_family = "Yoruka"
font_weight = 400
color = "rgba(255, 255, 255, 0.9)"
font_size = 22
halign = "center"
valign = "center"
x = 0
y = 20
relative_to = "auth_panel"

[visuals.input]
placeholder = "Password"
background_color = "rgba(255, 255, 255, 0.2)"
border_color = "rgba(255, 255, 255, 0.2)"
border_width = 3
width = 310
height = 54
radius = 50
mask_color = "#ffffff"
font_family = "Google Sans Flex"
font_weight = 400
font_size = 16
halign = "center"
valign = "bottom"
x = 0
y = 0
relative_to = "auth_panel"

[visuals.status]
mode = "inline"
rejected_color = "#FF4D4D"
pending_color = "#FFFFFF"

[visuals.eye]
color = "rgba(255, 255, 255, 0.72)"

[visuals.placeholder]
color = "rgba(255, 255, 255, 0.95)"

[visuals.caps_lock]
color = "rgba(255, 255, 255, 0.52)"

[visuals.avatar]
enabled = false

[visuals.username]
enabled = false

[visuals.keyboard]
background_size = 46
radius = 23
background_color = "rgba(255, 255, 255, 0.1)"
color = "rgba(255, 255, 255, 0.9)"
size = 16
halign = "right"
valign = "top"
x = -24
y = 21

[visuals.battery]
background_color = "rgba(255, 255, 255, 0.1)"
background_size = 46
radius = 23
color = "rgba(255, 255, 255, 0.9)"
size = 20
halign = "right"
valign = "top"
x = -78
y = 21

[visuals.weather.icon]
size = 40
opacity = 80
halign = "left"
valign = "bottom"
x = 40
y = -112

[visuals.weather.temperature]
font_size = 40
font_family = "Geom"
font_weight = 600
letter_spacing = 0
color = "rgba(255, 255, 255, 0.73)"
halign = "left"
valign = "bottom"
x = 40
y = -70

[visuals.weather.location]
font_size = 22
font_family = "Google Sans Flex"
font_weight = 400
color = "rgba(214, 227, 255, 0.58)"
halign = "left"
valign = "bottom"
x = 40
y = -44

[visuals.now_playing]
enabled = true
fade_duration_ms = 320

[visuals.now_playing.artwork]
size = 44
radius = 8
opacity = 90
halign = "left"
valign = "center"
x = 10
y = 0
relative_to = "now_playing"

[visuals.now_playing.artist]
width = 318
color = "rgba(255, 255, 255, 0.39)"
font_family = "Google Sans Flex"
font_size = 16
font_weight = 400
halign = "left"
valign = "top"
x = 65
y = 10
relative_to = "now_playing"

[visuals.now_playing.title]
width = 318
color = "rgba(255, 255, 255, 0.69)"
font_family = "Google Sans Flex"
font_size = 16
font_weight = 400
halign = "left"
valign = "bottom"
x = 65
y = -10
relative_to = "now_playing"

# Now playing backdrop
[[visuals.backdrop]]
enabled = true
name = "now_playing"
show_when = "now_playing"
mode = "blur"
color = "rgba(255, 255, 255, 0.05)"
blur_strength = 12
radius = 10
border_color = "#FFFFFF18"
width = 400
height = 60
halign = "right"
valign = "bottom"
x = -40
y = -40
z = 1

# Auth stack Background
[[visuals.backdrop]]
enabled = true
name = "auth_panel"
mode = "solid"
color = "#00000000"
blur_strength = 24
radius = 50
width = 540
height = 250
halign = "center"
valign = "center"
x = -180
y = 0
z = 0

Kitty uses the system font Yoruka for the clock and date. If it is not installed, either install it locally or override the clock and date font family with a bundled font such as Geom.

On this page