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 40-character Git commit SHA (or version tag), and at least one install step, then open a Pull Request. CI validates the Zod schema, screenshot hosts, {{ref}} checkout steps, and any optional script SHA-256 hash.
- Fork the 0xTsoarepository on GitHub.
- Create the file
configs/<your-handle>/<slug>.json. - Validate locally with
npm run validate. - Open your Pull Request towards
dev.
Method 2 • GitHub Issue Form
ZERO_CODEFill out the structured GitHub Issue Form (desktop part, screenshots, install commands). The issue-to-config Action computes any optional 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.External install scripts: If you provide an optional install script URL (
.sh), it must point to a raw URL at a 40-character commit SHA or version tag and include its 64-charactersha256digest (checked by CI). - 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 source reference:
source.refmust be a 40-character commit SHA or a version tag (never a branch name); only a 40-character commit SHA cannot be moved upstream and earns the "Source pinned" badge. Anygit clonestep must check out{{ref}}. - 4.Installation is required:
install.stepsneeds at least adepsstep (packages or clone);dotfilesandreloadare optional. They render as "02. Installation & Deployment". Lists & guides (category: "resource") leaveinstallout and get a "Read online" link instead. - 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, tuned for a laptop.",
"description": "Optional long description: layout philosophy, workflow, ergonomics tips.",
"license": "MIT",
"version": "v1.0.0",
"updatedAt": "2026-10-15",
"distros": ["arch", "fedora"],
"category": "dotfiles",
"wm": "hyprland",
"themeStyle": "monochrome",
"displayServer": "wayland",
"tags": ["waybar", "kitty", "rofi", "laptop"],
"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": "Hyprland desktop with Waybar and two Kitty windows",
"caption": "01_DESKTOP.RAW"
}
],
"source": {
"repo": "https://github.com/my-handle/dots",
"ref": "v1.0.0",
"readme": "README.md"
},
"install": {
"steps": [
{
"id": "deps",
"title": "Install dependencies",
"commands": [
"sudo pacman -S --needed hyprland waybar kitty rofi-wayland dunst",
"git clone --filter=blob:none https://github.com/my-handle/dots ~/dots",
"git -C ~/dots checkout {{ref}}"
]
},
{
"id": "dotfiles",
"title": "Deploy dotfiles",
"commands": [
"mkdir -p ~/.config",
"cp -r ~/dots/hypr ~/dots/waybar ~/dots/kitty ~/.config/"
]
},
{
"id": "reload",
"title": "Reload Hyprland",
"commands": [
"hyprctl reload"
]
}
]
},
"keybindings": [
{
"keys": "SUPER + Return",
"action": "exec, kitty",
"effect": "Open terminal"
},
{
"keys": "SUPER + Q",
"action": "killactive",
"effect": "Close window"
}
]
}