Contribution Guide
SUBMIT A CONFIGURATION TO 0xTsoa
Zero-database submission pipeline: submit a GitHub Issue Form or open a Pull Request against configs/<author>/<slug>.json.
Method 1 • Direct Pull Request
DEV_RECOMMENDEDAdd configs/<github-handle>/<slug>.json with a category, a pinned Git commit or tag and at least one install step, then open a Pull Request. CI validates the Zod schema, image hosts, and script checksums.
- Fork the 0xTsoarepository on GitHub.
- Create the file
configs/<your-handle>/<slug>.json. - Validate locally with
npm run validate. - Open your Pull Request towards
main.
Method 2 • GitHub Issue Form
ZERO_CODEFill out the structured GitHub Issue Form (desktop part, screenshots, install commands). The issue-to-config Action computes the script SHA-256 digest, validates the JSON entry, and opens a Pull Request.
Pick the desktop part, paste your install commands (dependencies, deploy, reload) and screenshots. Our GitHub Action builds the JSON, computes the SHA-256 of any install script, and opens the Pull Request with CI validation.
CI VALIDATION & SECURITY RULES
- 1.Reproducible install scripts: If you provide an install script URL (
.sh), it must point to a full 40-character commit SHA or immutable tag, and include a verifiedsha256checksum. - 2.Allowed screenshot hosts: Screenshots must be hosted on:
raw.githubusercontent.com, user-images.githubusercontent.com, private-user-images.githubusercontent.com, github.com, i.imgur.com, i.redd.it, codeberg.org, gitlab.com. - 3.Pinned README reference: The
source.refproperty must be a fixed tag or commit for deterministic builds and historical preservation. - 4.Installation is required:
install.stepsneeds at least adepsstep (packages or clone);dotfilesandreloadare optional. They render as "02. Installation & Deployment". - 5.Desktop part & tags: set
categoryto one ofdotfiles, wm, bar, widgets, launcher, notifications, dock, icons, cursors, gtk-theme, colorscheme, login, lockscreen, boot, extension, tool, resource. Tags name components and features, never the WM, distro or theme style (those are filters already).
Standardized JSON Format Example
{
"$schema": "../../schema/config.schema.json",
"name": "My Clean Setup",
"author": {
"name": "My Name",
"github": "my-handle"
},
"lang": "en",
"summary": "Minimal Hyprland desktop with Waybar and Kitty on Arch Linux.",
"description": "Optional long description: layout philosophy, workflow, ergonomics tips.",
"license": "MIT",
"version": "v1.0.0",
"updatedAt": "2026-10-15",
"distros": [
"arch"
],
"category": "dotfiles",
"wm": "hyprland",
"themeStyle": "monochrome",
"displayServer": "wayland",
"tags": [
"hyprland",
"arch"
],
"specs": {
"bar": "Waybar",
"terminal": "Kitty",
"launcher": "Rofi",
"notifications": "Dunst",
"theme": "Paper Monochrome",
"shell": "zsh",
"editor": "Neovim"
},
"screenshots": [
{
"url": "https://raw.githubusercontent.com/my-handle/dots/v1.0.0/preview.png",
"alt": "Screenshot of my desktop",
"caption": "01_DESKTOP.RAW"
}
],
"source": {
"repo": "https://github.com/my-handle/dots",
"ref": "v1.0.0",
"readme": "README.md"
},
"install": {
"script": {
"url": "https://raw.githubusercontent.com/my-handle/dots/v1.0.0/install.sh",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"shell": "bash"
},
"steps": [
{
"id": "deps",
"title": "Install dependencies",
"commands": [
"sudo pacman -S --needed hyprland waybar kitty rofi-wayland dunst"
]
},
{
"id": "dotfiles",
"title": "Deploy dotfiles",
"commands": [
"git clone --branch v1.0.0 https://github.com/my-handle/dots ~/dots",
"cp -r ~/dots/.config/* ~/.config/"
]
},
{
"id": "reload",
"title": "Reload Hyprland",
"commands": [
"hyprctl reload"
]
}
],
"packages": []
},
"keybindings": [
{
"keys": "SUPER + Return",
"action": "exec, kitty",
"effect": "Open terminal"
},
{
"keys": "SUPER + Q",
"action": "killactive",
"effect": "Close window"
}
]
}