Skip to content

Home

sysc-greet logo

sysc-greet is a graphical console greeter for greetd, written in Go with the Bubble Tea framework.

sysc-greet preview

Features

  • Multiple Themes: Dracula, Gruvbox, Material, Nord, Tokyo Night, Catppuccin, Solarized, Monochrome, TransIsHardJob, Eldritch, RAMA, Dark (plus custom themes)
  • Background Effects: Fire (DOOM PSX), Matrix rain, ASCII rain, Fireworks, Aquarium
  • ASCII Effects: Typewriter, Print, Beams, and Pour effects for session text
  • Border Styles: Classic, Modern, Minimal, ASCII-1, ASCII-2, Wave, Pulse
  • Screensaver: Configurable idle timeout with ASCII art cycling
  • Video Wallpapers: Multi-monitor support via gSlapper
  • Security Features: Failed attempt counter with account lockout warnings, optional username caching

Installation

Quick Install Script

One-line install for most systems:

curl -fsSL https://raw.githubusercontent.com/Nomadcxx/sysc-greet/master/install.sh | sudo bash

Manual Build

The installer lets you choose your compositor and handles all configuration:

git clone https://github.com/Nomadcxx/sysc-greet
cd sysc-greet
go run ./cmd/installer/

Arch Linux (AUR)

sysc-greet provides four AUR packages for different greeter compositors:

# niri (default)
yay -S sysc-greet

# Cagebreak variant (the Hyprland replacement)
yay -S sysc-greet-cagebreak

# Sway variant
yay -S sysc-greet-sway

# Hyprland variant (deprecated, replaced by cagebreak)
yay -S sysc-greet-hyprland

The packages conflict with each other — install exactly one. sysc-greet-cagebreak pulls in cagebreak and socat from the AUR.

Pre-built Packages (.deb / .rpm)

Download from GitHub Releases:

Debian/Ubuntu:

wget https://github.com/Nomadcxx/sysc-greet/releases/download/v1.1.8/sysc-greet_1.1.8_amd64.deb
sudo apt install ./sysc-greet_1.1.8_amd64.deb

Fedora:

wget https://github.com/Nomadcxx/sysc-greet/releases/download/v1.1.8/sysc-greet-1.1.8-1.x86_64.rpm
sudo dnf install ./sysc-greet-1.1.8-1.x86_64.rpm

Package configs use conservative syntax for stable distro compatibility. For bleeding-edge compositor features, use the install script or AUR instead.

NixOS (Flake)

Add sysc-greet to your NixOS configuration using the flake:

flake.nix:

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    sysc-greet = {
      url = "github:Nomadcxx/sysc-greet";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, sysc-greet, ... }: {
    nixosConfigurations.your-hostname = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        sysc-greet.nixosModules.default
      ];
    };
  };
}

configuration.nix:

{
  services.sysc-greet = {
    enable = true;
    compositor = "niri";  # or "cagebreak", "sway", "hyprland" (deprecated)
  };

  # Optional: Set initial session for auto-login
  services.sysc-greet.settings.initial_session = {
    command = "Hyprland";
    user = "your-username";
  };
}

By default, the NixOS module does not install niri, cagebreak, hyprland, or sway. Install your chosen backend yourself, or set niriPackage, cagebreakPackage, hyprlandPackage, or swayPackage if you want the module to install and use a specific package. If your compositor is managed elsewhere, set compositorCommand to the exact command greetd should run.

Then rebuild your system:

sudo nixos-rebuild switch --flake .#your-hostname

Advanced: Manual Build from Source

Requirements: - Go 1.25+ - greetd - Wayland compositor: niri (default), cagebreak, sway, or hyprland (deprecated) - socat (cagebreak only — quits the compositor after login) - kitty (terminal) - gSlapper (wallpaper daemon) - swww (legacy wallpaper daemon, optional fallback)

Build and install:

git clone https://github.com/Nomadcxx/sysc-greet
cd sysc-greet
go build -o sysc-greet ./cmd/sysc-greet/
sudo install -Dm755 sysc-greet /usr/local/bin/sysc-greet

Install assets:

sudo mkdir -p /usr/share/sysc-greet/{ascii_configs,fonts,wallpapers}
sudo cp -r ascii_configs/* /usr/share/sysc-greet/ascii_configs/
sudo cp -r fonts/* /usr/share/sysc-greet/fonts/
sudo cp -r wallpapers/* /usr/share/sysc-greet/wallpapers/
sudo cp config/kitty-greeter.conf /etc/greetd/kitty.conf

Configure greetd (/etc/greetd/config.toml):

Choose your compositor and update the command below:

[terminal]
vt = 1

[default_session]
# Pick one:
command = "niri -c /etc/greetd/niri-greeter-config.kdl"
# command = "cagebreak -e -c /etc/greetd/cagebreak-greeter-config"
# command = "sway --unsupported-gpu -c /etc/greetd/sway-greeter-config"
# command = "start-hyprland -- -c /etc/greetd/hyprland-greeter-config.conf"
user = "greeter"

Create compositor config:

Copy the appropriate config file to /etc/greetd/:

# For niri:
sudo cp config/niri-greeter-config.kdl /etc/greetd/

# For cagebreak:
sudo cp config/cagebreak-greeter-config /etc/greetd/

# For sway:
sudo cp config/sway-greeter-config /etc/greetd/

# For hyprland (deprecated):
sudo cp config/hyprland-greeter-config.conf /etc/greetd/

Create greeter user:

sudo useradd -M -d /var/lib/greeter -G video,render,input -s /usr/bin/nologin greeter
sudo mkdir -p /var/cache/sysc-greet /var/lib/greeter/Pictures/wallpapers \
    /var/lib/greeter/.cache /var/lib/greeter/.config /var/lib/greeter/.local/state
sudo chown -R greeter:greeter /var/cache/sysc-greet /var/lib/greeter
sudo chmod 755 /var/lib/greeter

Enable service:

sudo systemctl enable greetd.service

Usage

Key Bindings

  • F1 - Settings menu (themes, borders, backgrounds)
  • F2 - Session selection
  • F3 - Release notes
  • F4 - Power menu (shutdown/reboot)
  • Page Up/Down - Cycle ASCII variants
  • Tab - Navigate fields
  • Enter - Submit/Continue
  • Esc - Cancel/Return to previous screen

Test Mode

Test the greeter without locking your session:

sysc-greet --test

# Test in fullscreen (recommended for accurate preview)
kitty --start-as=fullscreen sysc-greet --test

Additional Options

sysc-greet --theme dracula          # Start with specific theme
sysc-greet --screensaver            # Enable screensaver in test mode
sysc-greet --remember-username      # Cache username across sessions
sysc-greet --debug                  # Enable debug logging
sysc-greet --version                # Show version information

Configuration

sysc-greet stores user preferences in /var/cache/sysc-greet/. The following settings are cached:

  • Theme - Selected color theme
  • Background - Selected background effect or video wallpaper
  • Border Style - Selected border style
  • Session - Last selected session
  • Username - Last entered username (if --remember-username enabled)
  • ASCII Index - Last selected ASCII variant

Themes

sysc-greet includes multiple built-in themes:

Theme Primary Color Description
Dracula #bd93f9 Dark purple-blue theme
Gruvbox #fe8019 Warm dark theme
Material #80cbc4 Material Design dark theme
Nord #81a1c1 Arctic blue-toned dark theme
Tokyo Night #7aa2f7 Modern dark theme
Catppuccin #cba6f7 Soft pastel dark theme
Solarized #268bd2 Solarized dark theme
Monochrome #ffffff Black and white minimal theme
TransIsHardJob #5BCEFA Transgender flag colors
Eldritch #37f499 Purple and green theme
RAMA #ef233c RAMA keyboard aesthetics
Dark #ffffff True black and white minimal theme

Custom themes can be added via TOML files in /usr/share/sysc-greet/themes/ or ~/.config/sysc-greet/themes/. See Themes Configuration for details.

Background Effects

sysc-greet supports several background effects:

  • Fire - DOOM PSX fire effect
  • Matrix - Matrix rain effect
  • ASCII Rain - Falling ASCII characters
  • Fireworks - Firework explosions
  • Aquarium - Swimming fish animation

Wallpapers

sysc-greet supports two types of wallpapers:

  1. Themed Wallpapers - Static images that match selected theme (stored in /usr/share/sysc-greet/wallpapers/)
  2. Video Wallpapers - Video backgrounds managed by gSlapper (stored in /var/lib/greeter/Pictures/wallpapers/)

For detailed configuration, see Wallpapers Feature.

ASCII Art

Each session can have custom ASCII art with multiple variants. Press Page Up/Down at the greeter to cycle through variants.

ASCII art configurations are stored in /usr/share/sysc-greet/ascii_configs/. Each session has a .conf file containing:

  • name - Display name for the session
  • ascii_1, ascii_2, etc. - Multiple ASCII art variants
  • colors - Optional hex colors for rainbow effect
  • roasts - Custom roast messages separated by character

For more details, see ASCII Art Feature.

Screensaver

The screensaver activates after a configurable idle timeout and displays:

  • Current time and date
  • ASCII art cycling
  • Optional print animation effect

Screensaver configuration is in /usr/share/sysc-greet/ascii_configs/screensaver.conf.

Compositor Setup

sysc-greet runs its greeter session under niri (default), cagebreak, Sway, or Hyprland (deprecated — support ends in ~3 months, migrate to cagebreak). This only affects the boot greeter; your desktop session is unrelated. For detailed setup instructions, see:

Development

Building

make build

Testing

make test

Running in Test Mode

./sysc-greet --test --debug

For development details, see Development Guide.

Troubleshooting

Greeter won't start:

sudo systemctl status greetd
journalctl -u greetd -n 50

Check gSlapper status:

# Check if gSlapper is running
ps aux | grep gslapper

# View gSlapper debug log
cat /tmp/sysc-greet-wallpaper.log

Debug logging:

# Run with debug flag
sysc-greet --debug

# View debug log
cat /tmp/sysc-greet-debug.log

For more troubleshooting, see Troubleshooting Guide.

If you like ASCII animations, CLI and TUI terminal aesthetics check out these projects:

  • sysc-Go - Terminal animation library for Go
  • sysc-walls - Terminal-based screensaver for Wayland/X11
  • gSlapper - Video wallpaper manager for Wayland

Acknowledgments

  • tuigreet by apognu - Original inspiration and base
  • Bubble Tea by Charm - TUI framework
  • Lipgloss by Charm - Terminal styling
  • greetd by kennylevinsen - Login manager

License

GPL-3.0