sbo-create(1)

NAME
sbo-create, sbc - SlackBuild Create Tool for SlackBuilds.org.

SYNOPSIS
sbo-create COMMAND [OPTIONS]
sbc COMMAND [OPTIONS]

DESCRIPTION

sbo-create is a command-line tool for creating and managing SlackBuild scripts for the SlackBuilds.org (SBo) repository. It supports generating files from official SBo templates, downloading and verifying sources, validating against SBo submission guidelines, and bumping versions.

The command sbc is provided as a shorter alias for sbo-create .

When run without any arguments, sbo-create prints the help message and exits. The program name defaults to the name of the current working directory.

Templates must be downloaded before first use by running: sbo-create update

Some features require a local clone of the SBo git repository (configured via sbo-create maintainer). To enable them, clone the repository once:

    git clone git://git.slackbuilds.org/slackbuilds.git

Commands that require a local clone: repo diff, repo sync, repo submit, repo copy, repo log, fetch --maintainer.

Commands that use the local clone when configured, falling back to the local package index otherwise (populated by sbo-create update): check, search, fetch, deps, rdeps, validate.

COMMANDS

create [NAME]
    Create all necessary SlackBuild files (<prgnam>.SlackBuild, <prgnam>.info, README, slack-desc) inside a new <prgnam> subdirectory of the current working directory. If the current directory is already named <prgnam>, files are created there directly. When called with no flags, starts an interactive step-by-step prompt asking for the package name, version, template, ARM64 support, strip-comments, and output directory. Pressing Enter at any prompt accepts the shown default. The template is chosen with the left/right arrow keys; the active choice is highlighted.

download
    Download the source files listed in the .info file.

check NAME [NAME ...]
    Check if one or more packages exist in the SBo repository. Prints a color-coded result for each package. If SBO_REPO_PATH is configured, searches the local clone directly; otherwise falls back to the local package index.

search NAME [NAME ...]
    Search for packages in the SBo repository by partial name match. Prints matching package names with their version and category. Supports multiple search terms in a single invocation. If SBO_REPO_PATH is configured, scans the local clone directly; otherwise falls back to the local package index.

clean
    Remove downloaded source tarballs from the current directory. Lists the files to be removed and prompts for confirmation before deleting.

info
    Display the parsed fields of the .info file: PRGNAM, VERSION, HOMEPAGE, DOWNLOAD count, MD5SUM count, REQUIRES, MAINTAINER, and EMAIL.

list
    List available SlackBuild templates and exit.

validate
    Validate all package files against SBo submission guidelines. Checks .info fields, MD5SUM checksums, DOWNLOAD URLs, slack-desc formatting, and .SlackBuild structure. Prints a per-check summary table (pass/fail per group) followed by the full list of errors, if any. If any required file (prgnam.SlackBuild, prgnam.info, slack-desc, README) is missing, only the Required files group is shown and all other checks are skipped.

bump VERSION
    Bump the version string in the .info and .SlackBuild files non-interactively.

package
    Create the submission tarball (<prgnam>.tar.gz). Prompts whether to run strict validation (equivalent to validate --strict) before packaging. If validation fails, packaging is aborted. All files in the package directory are included except downloaded source archives; this covers optional files such as doinst.sh, douninst.sh, patches, and .desktop files.

edit
    Open all package files (prgnam.info, prgnam.SlackBuild, slack-desc, README) in the editor configured in ~/.config/sbo-create/config.conf. Falls back to vim if no editor is configured.

scan TARBALL
    Scan the given source tarball for potential dependencies. Opens the tarball without full extraction and parses known build-system metadata files: PKG-INFO, pyproject.toml, setup.cfg, requirements.txt (Python), Cargo.toml (Rust), META.yml, META.json (Perl), package.yaml (Haskell), Gemfile (Ruby), CMakeLists.txt (CMake), configure.ac (autotools), meson.build (Meson). Prints found dependencies with version specifiers and runtime version requirements (e.g. Python, Rust MSRV, Perl, Ruby) as suggestions. Use -F to limit the scan to a specific ecosystem.

    -F, --format FORMAT
        Limit the scan to a specific ecosystem. FORMAT is one of: python, rust, perl, haskell, ruby, cmake, autotools, meson.

fetch NAME [NAME ...]
    Fetch and extract a SlackBuild package into a <NAME> subdirectory of the current working directory. If the directory already exists, prompts for confirmation before overwriting. If SBO_REPO_PATH is configured (see maintainer) and the package directory exists there, the files are copied directly from the local repository without any network access. Otherwise the package is downloaded from slackbuilds.org.

deps NAME [NAME ...]
    Display the dependencies for a package, resolved recursively from REQUIRES using the local package index (or the local clone when configured). Circular dependencies are detected and silently stopped. Special values such as %README% are ignored. By default prints a flat list: direct dependencies with a branch connector, transitive dependencies indented without connectors, followed by a summary line.

rdeps NAME [NAME ...]
    Show which packages in the SBo repository depend on NAME (reverse dependencies). Scans the local package index (or the local clone when configured). Circular dependencies are detected and silently stopped. By default prints a flat list: direct dependees with a branch connector, transitive dependees indented without connectors, followed by a summary line.

rename NAME
    Rename prgnam.SlackBuild and prgnam.info to the new name. Updates PRGNAM= in both files, the # Slackware build script for header in .SlackBuild, and all occurrences of the package name in slack-desc (prefix and body) using word-boundary matching. The current name is auto-detected from the .info file. Shows a preview of all affected files and prompts for confirmation before renaming.

repo
    Group of subcommands for local SBo repository operations. All subcommands require SBO_REPO_PATH to be configured (except repo submit, which falls back to the SBo web form when unconfigured).

    repo diff [NAME ...]
        Show a unified diff between local package files and the corresponding files in the SBo repository (SBO_REPO_PATH/category/prgnam/). Only files present in both locations are compared. When one or more NAME arguments are given, each package is looked up by name and its files are compared against the matching subdirectory of the current working directory (./NAME/). When no NAME is given, the current directory is used. Prints No differences found when all compared files are identical. Source tarballs found in the repository directory are silently skipped.

    repo sync
        Synchronise the local SBo git repository after a weekly public update. Performs the following steps in order:

        1.  git checkout <main> — switch to the main branch (configured as GIT_MAIN_BRANCH, default master).

        2.  git pull — fetch and merge the latest changes from the remote. The SSH passphrase prompt (if any) is passed through to the terminal.

        3.  git branch -D <branch> — delete the old working branch. This step is skipped automatically if the branch does not yet exist (first-time use).

        4.  git checkout -B <branch> — create a fresh working branch based on the updated main branch.

    Requires GIT_BRANCH to be set in config.conf. Run sbo-create maintainer to configure it.

    repo submit
        Commit and push the current package to the SBo git repository, or open the SBo web submission page if no git repository is configured.

        If SBO_REPO_PATH is not set in config.conf, repo submit opens https://slackbuilds.org/submit/ in the default browser (via xdg-open) and exits.

        If SBO_REPO_PATH is configured, repo submit performs the following:

        1.  Checks whether the working branch is behind the main branch. If it is, a warning is printed with a suggestion to run sbo-create repo sync first. The user may choose to continue anyway.

        2.  Detects which packages have been modified by running git diff --name-only. If no changes are found, the command exits with an error.

        3.  For each modified package, reads the .info file to obtain the version and proposes a commit message of the form category/prgnam: Updated for version X.Y.Z.. When only one package is modified, the user may edit the message or press Enter to accept the default.

        4.  Asks whether to push after committing.

        5.  Displays the files changed in each package (from git status --short) with a single-character status indicator: M (modified), A (added), D (deleted), or ? (untracked). Only files that have actually changed are listed.

        6.  Displays the exact git commands that will be run and asks for final confirmation before executing.

        7.  For each package runs git add category/prgnam/ followed by a commit. When multiple packages are modified a separate commit is created for each. A single push is performed at the end if requested.

        The -a flag is stripped from GIT_COMMIT_CMD automatically, since files are staged explicitly with git add. The push command is taken from GIT_PUSH_CMD (default git push). On the first push of a new branch (no upstream configured), the push command is automatically changed to git push --set-upstream origin <branch> using the value of GIT_BRANCH.

        All git commands are run with the working directory set to SBO_REPO_PATH.

    repo copy
        Copy local package files from the current directory to the corresponding package directory in the SBo repository (SBO_REPO_PATH/category/prgnam/). The package name is auto-detected from the .info file. Source tarballs are excluded from the copy. Lists the files to be copied and prompts for confirmation before proceeding.

    repo log
        Show packages committed on the current branch since the last public SBo update. Parses commit subjects of the form category/prgnam: Updated for version X.Y.Z. and prints a table with the package path and version. Commits that do not match the expected format are shown as-is.

update
    Download and update SlackBuild templates from slackbuilds.org into ~/.local/share/sbo-create/templates/, and generate the local package index in ~/.local/share/sbo-create/repo/. Must be run before first use. The SBo repository publishes updates approximately once a week; run sbo-create update after each public release to keep the local package index current.

maintainer
    Create or update the maintainer configuration file at ~/.config/sbo-create/config.conf. Launches an interactive prompt where existing values are shown as defaults; pressing Enter keeps the current value, and typing ! clears a field to empty. The configuration directory is created automatically if it does not exist.

repology
    Query repology.org for package version status by maintainer e-mail. Fetches all packages associated with the configured (or supplied) e-mail and prints a table showing the package name, version, and status. When none of -n, -o, -p is given, all status categories are shown. Rate-limiting (HTTP 429) is handled automatically: the command waits for the Retry-After interval (default 10 s) and retries once.

GLOBAL OPTIONS

-N, --no-color
    Disable colored output. May be placed before or after the subcommand.

-v, --version
    Show version and exit.

-h, --help
    Show this help message and exit.

OPTIONS

  create

NAME
    Package name (positional). Shorthand for -n; -n takes precedence if both are given. If omitted, the name of the current working directory is used.

-n NAME, --prgnam NAME
    Set the name of the SlackBuild (overrides positional NAME).

-r VERSION, --prg-version VERSION
    Set the version of the SlackBuild.

-t TEMPLATE, --template TEMPLATE
    Set the SlackBuild template. Available templates: autotools, cmake, perl, python, rubygem, haskell, meson.

-a, --arm64
    Enable ARM64 architecture support in the .info file.

-o DIR, --output DIR
    Parent directory in which the <prgnam> subdirectory is created. Defaults to the current working directory. Created automatically if it does not exist.

-D, --dry-run
    Show the files that would be created without writing anything to disk.

-s, --strip-comments
    Remove all comment lines and inline comments from the .SlackBuild body, keeping only the shebang line and the copyright/license header block. Shell parameter expansions containing # (e.g. ${var##pattern}) are preserved.

  download

-u, --check-urls
    Perform HTTP HEAD requests on all DOWNLOAD URLs to verify accessibility without downloading any files. Reports OK, WARN (HEAD not supported), REDIRECT, or FAILED per URL.

  validate

-s, --strict
    Run additional pre-submission checks, each reported as a separate pass/fail entry: source tarballs must not be present, all DOWNLOAD URLs must use HTTPS, VERSION must not contain spaces, HOMEPAGE must use HTTPS and be accessible (HTTP HEAD request), the Homepage: URL in slack-desc (if present) must also use HTTPS and be accessible, the .SlackBuild file must not be executable, slack-desc must have exactly 19 lines, and MAINTAINER / EMAIL in the .info file must match the configured maintainer values. Combining --strict with --fix runs all fixers: in addition to the standard --fix repairs, it also corrects HOMEPAGE http→https, corrects the Homepage: URL in slack-desc http→https, removes the executable bit from .SlackBuild, removes source tarballs (with confirmation), and corrects MAINTAINER / EMAIL mismatches. Note that some strict checks — VERSION spaces, HOMEPAGE accessibility, and slack-desc line count — require manual correction and cannot be auto-fixed.

-f, --fix
    Auto-fix common issues across all package files (.info, README, .SlackBuild, slack-desc). Fixes applied per file:

    •   Trailing whitespace on any line (all files)

    •   Missing or malformed double quotes around .info field values, including empty fields and multi-line values

    •   Missing final newline or trailing blank lines in any submission file (.info, .SlackBuild, slack-desc, README): missing newline is added; extra trailing blank lines are stripped to exactly one \n. An error is reported by validate for either condition in any of these files

    •   Corrupted or misnamed field names in .info (fuzzy-matched and corrected; PRGNAM is also corrected to match the package directory name)

    •   Mismatched VERSION default in .SlackBuild (${VERSION:-x.y.z}) synced to the VERSION in .info

    •   Wrong package name prefix, missing colon, or incorrect spacing after name: in slack-desc description lines

    •   Misaligned or missing handy-ruler line in slack-desc

    •   Outdated copyright year in .SlackBuild (only when the maintainer name is configured and matches the copyright line)

    •   MD5SUM mismatch when the source tarball is already present locally: prompts whether to recompute the checksum from the local file and update .info accordingly
Reports FIXED or OK per check, then runs validation on the corrected files. Some checks — including non-ASCII characters in files — require manual correction and cannot be auto-fixed by either --fix or --strict --fix.

-m, --md5
    Show detailed warnings for each missing or untracked source tarball.

-A, --all
    Scan every package under the configured local SBo repository path and validate those whose MAINTAINER= field matches the configured maintainer name. Prints a one-line summary per package: category/name followed by OK or the number of errors and warnings found. Exits with code 1 if any package fails. Requires SBO_REPO_PATH to be set (see maintainer), unless overridden with --path. Can be combined with --maintainer and --path.

-M NAME, --maintainer NAME
    Override the configured maintainer name when used with --all.

-p PATH, --path PATH
    Validate the specified directory instead of the current working directory. When combined with --all, use PATH as the repository root to scan instead of the configured SBO_REPO_PATH.

  bump

-W, --with-sources
    Replace the old version string in DOWNLOAD URLs, download the new source files, and recompute MD5SUM / MD5SUM_x86_64 in the .info file. Each step is reported with OK, FAILED, or WARN.

  package

-o DIR, --output DIR
    Output directory for the tarball. Defaults to the parent of the current directory.

  edit

-e EDITOR, --editor EDITOR
    Override the configured editor for this invocation.

  fetch

-V VERSION, --slackware-version VERSION
    Slackware version to use when building the download URL (e.g. 14.1, 15.0). Defaults to the version detected from /etc/slackware-version. Ignored when reading from a local repository.

-l, --list
    List the files inside a package without downloading it. The package name is given as the positional NAME argument (e.g. sbc myapp --list). Uses the local repository when available, otherwise fetches from slackbuilds.org.

-f FILE [...], --file  FILE [...]"
    Display one or more files from a package without downloading it. The package name is given as the positional NAME argument (e.g. sbc myapp -f myapp.info or sbc myapp -f myapp.info README). Uses the local repository when available, otherwise fetches from slackbuilds.org.

-M NAME, --maintainer
    List all packages whose maintainer field contains NAME (case-insensitive, partial match). A first name or partial string is sufficient; quotes are only needed for names with spaces when passed directly to the shell. Requires SBO_REPO_PATH to be configured.

-W, --wide
    Print the maintainer package list in a multi-column layout fitted to the terminal width instead of one package per line. Only meaningful with --maintainer.

  deps

-t, --tree
    Show the full recursive dependency tree with branch connectors instead of the default flat list.

  rdeps

-t, --tree
    Show the full recursive reverse dependency tree with branch connectors instead of the default flat list.

  repo diff

-U N, --unified N
    Number of context lines around each change (default: 3, same as diff(1)).

  maintainer

-S, --show
    Print the current maintainer configuration and exit without prompting.

  repology

-n, --newest
    Show only packages that are up-to-date.

-o, --outdated
    Show only packages that are outdated.

-p, --problematic
    Show only packages with problematic status.

-m EMAIL, --maintainer EMAIL
    Override the configured maintainer e-mail for this query.

EXAMPLES

Create all SlackBuild files for a Python package:

    sbo-create create myapp -r 1.0.0 -t python
    sbo-create create -n myapp -r 1.0.0 -t python

Validate package files and auto-fix common issues:

    sbo-create validate
    sbo-create validate --fix

Bump version and update sources and checksums:

    sbo-create bump 2.0.0 -W

Create submission tarball:

    sbo-create package

Create files interactively (no flags):

    sbo-create create

Open package files in the configured editor:

    sbo-create edit

Open package files with a specific editor (overrides config):

    sbo-create edit --editor subl

Rename package files to a new name:

    sbo-create rename newname

Fetch a SlackBuild package from SBo and edit it:

    sbo-create fetch myapp
    cd myapp
    sbo-create edit

Sync the SBo repository after a weekly public update:

    sbo-create repo sync

Submit a package update via git (commit and push):

    sbo-create repo submit

Show packages committed on the current branch:

    sbo-create repo log

Show dependency tree for a package:

    sbo-create deps neovim-qt
    sbo-create deps neovim-qt --tree

Show which packages depend on a given package:

    sbo-create rdeps python3-tomlkit

Update templates from slackbuilds.org:

    sbo-create update

Check all package statuses via repology.org:

    sbo-create repology

Show only outdated packages for a specific maintainer e-mail:

    sbo-create repology --outdated -m user@example.com

FILES

~/.config/sbo-create/config.conf
    Maintainer configuration file. Read automatically on startup. Contains the following fields:

    NAME, EMAIL, LOCATION
        Maintainer identity used in generated SlackBuild files.

    EDITOR, EDITOR_OPTIONS
        Preferred editor and options used by sbo-create edit.

    SBO_VERSION
        Slackware version used when fetching packages.

    SBO_REPO_PATH
        Absolute path to the local SBo git repository clone. Required for repo sync, repo submit, repo copy, repo log. Also used by fetch (including --list and --file), check, and search to read files directly from the local clone instead of downloading from the network. Leave empty to use the web fallback.

    GIT_BRANCH
        Name of the maintainer's working branch (e.g. user/dslackw/updates). Required for repo sync and used by repo submit when setting the upstream on the first push.

    GIT_MAIN_BRANCH
        Name of the upstream main branch (default: master). Used by repo sync and repo submit.

    GIT_COMMIT_CMD
        Git commit command used by repo submit (default: git commit -sm). The -a flag is not needed and is stripped automatically if present, since repo submit stages files explicitly with git add before each commit.

    GIT_PUSH_CMD
        Git push command used by repo submit (default: git push). Overridden automatically with --set-upstream on the first push of a new branch.

~/.local/share/sbo-create/templates/
    Directory containing the SlackBuild template files downloaded by sbo-create update.

~/.local/share/sbo-create/repo/
    Directory containing the slackbuilds.json package index, used for dependency and existence checks when no local clone is configured.

EXIT STATUS

0   Successful execution.

1   Error: invalid arguments or missing required input.

REPORT BUGS

Please report any found to: https://gitlab.com/dslackw/sbo-create/-/issues.

SEE ALSO
slackbuilds.org(7)

AUTHOR

Dimitris Zlatanidis <dslackw@gmail.com>

COPYRIGHT
Copyright © 2015-2026 Dimitris Zlatanidis. Licensed under the GNU General Public License v3 (GPLv3).