| icon | list-check |
|---|---|
| description | Worked recipes |
Every recipe here is a real one from soarpkgs, trimmed only where a long list would get in the way. Start from whichever is closest to the package you are adding.
The common case. Upstream publishes a musl tarball per architecture, the recipe globs it, and [source.install] takes out the binary along with the manual page, the completions and the licences.
[pkg]
name = "ripgrep"
type = "static"
description = "A search tool that combines the usability of ag with the raw speed of grep"
homepage = ["https://github.com/BurntSushi/ripgrep"]
license = ["MIT", "Unlicense"]
maintainer = ["QaidVoid (contact@qaidvoid.dev)"]
category = ["ConsoleOnly", "Utility"]
repology = ["ripgrep"]
[host]
supported = ["x86_64-linux", "aarch64-linux"]
[update]
strategy = "github-releases"
repo = "BurntSushi/ripgrep"
[source]
github = "BurntSushi/ripgrep"
glob = "ripgrep-${version}-${arch}-unknown-linux-musl.tar.gz"
[source.install]
"*/COPYING" = "COPYING"
"*/LICENSE-MIT" = "LICENSE-MIT"
"*/UNLICENSE" = "UNLICENSE"
"*/rg" = "bin/rg"
"*/complete/rg.bash" = "share/bash-completion/completions/rg"
"*/complete/rg.fish" = "share/fish/vendor_completions.d/rg.fish"
"*/doc/rg.1" = "share/man/man1/rg.1"
"*/complete/_rg" = "share/zsh/site-functions/_rg"Note the glob in the install paths. */ matches whatever the tarball's top directory is called, which saves repeating the version in every line.
[arch] maps our host names onto upstream's, and ${arch} picks up the mapped value. The licence is not in the archive, so [[extra]] fetches it. It is served from a branch, so it is pinned by URL but not by hash.
[pkg]
name = "fzf"
type = "static"
description = "A command-line fuzzy finder"
homepage = ["https://github.com/junegunn/fzf"]
license = ["MIT"]
category = ["ConsoleOnly", "Utility"]
repology = ["fzf"]
[host]
supported = ["aarch64-linux", "x86_64-linux", "riscv64-linux"]
[arch]
aarch64 = "arm64"
x86_64 = "amd64"
riscv64 = "riscv64"
[update]
strategy = "github-releases"
repo = "junegunn/fzf"
strip-prefix = "v"
[source]
github = "junegunn/fzf"
glob = "*linux_${arch}.tar.gz"
[source.install]
"fzf" = "bin/fzf"
[[extra]]
url = "https://raw.githubusercontent.com/junegunn/fzf/master/LICENSE"
to = "LICENSE"
verify = falsefnm publishes fnm-linux.zip and fnm-arm64.zip. No template and no [arch] mapping produces both, so each host names its own URL.
[source]
[source.url]
x86_64-linux = "https://github.com/Schniz/fnm/releases/download/v${version}/fnm-linux.zip"
aarch64-linux = "https://github.com/Schniz/fnm/releases/download/v${version}/fnm-arm64.zip"
[source.install]
"fnm" = "bin/fnm"The artifact is the package, so there is nothing to install out of it. When the AppImage should land under a different command name, or carry aliases, the long form says so without naming a source path.
[pkg]
name = "dunst"
type = "appimage"
description = "Lightweight and customizable notification daemon"
homepage = [
"https://dunst-project.org",
"https://github.com/pkgforge-dev/dunst-AppImage",
]
license = ["BSD-3-Clause"]
maintainer = ["Samueru-sama (github.com/Samueru-sama)"]
category = ["System", "Utility"]
repology = ["dunst"]
[host]
supported = ["x86_64-linux", "aarch64-linux"]
[update]
strategy = "github-releases"
repo = "pkgforge-dev/dunst-AppImage"
tag-suffix = "strip"
[source]
github = "pkgforge-dev/dunst-AppImage"
glob = "*${arch}*.appimage"
[[source.install]]
to = "bin/dunst"
symlink_as = ["dunstctl", "dunstify"]Upstream serves x86_64 and aarch64, but not riscv64, so that host is served from pkgforge/builds. Three things follow. [update] tracks our repository rather than upstream, so the version pinned is one every host can download. [pkg] src keeps naming the real upstream. And riscv64 names its own install list, because our archive does not unpack the way upstream's does.
[pkg]
name = "nushell"
type = "static"
description = "A new type of shell"
src = ["https://github.com/nushell/nushell"]
homepage = ["https://www.nushell.sh"]
license = ["MIT"]
[host]
supported = ["x86_64-linux", "aarch64-linux", "riscv64-linux"]
[update]
strategy = "github-releases"
repo = "pkgforge/builds"
tag-prefix = "nushell-"
[source]
[source.url]
x86_64-linux = "https://github.com/nushell/nushell/releases/download/${version}/nu-${version}-${arch}-unknown-linux-musl.tar.gz"
aarch64-linux = "https://github.com/nushell/nushell/releases/download/${version}/nu-${version}-${arch}-unknown-linux-musl.tar.gz"
riscv64-linux = "https://github.com/pkgforge/builds/releases/download/nushell-${version}/nushell-${version}-riscv64-linux.tar.gz"
[source.install]
"nu-${version}-${arch}-unknown-linux-musl/LICENSE" = "LICENSE"
"nu-${version}-${arch}-unknown-linux-musl/nu" = "bin/nu"
[source.install.riscv64-linux]
"nu" = "bin/nu"
"LICENSE" = "LICENSE"Naming riscv64 replaces the shared list for that host alone. The other two keep it.
Written by sbuild resolve and sbuild hashfill, not by hand.
version = "0.11.5"
date = "2026-07-28T10:51:15Z"
[url]
x86_64-linux = "https://github.com/pkgforge/builds/releases/download/amdgpu_top-0.11.5/amdgpu_top-0.11.5-x86_64-linux.tar.gz"
[blake3]
x86_64-linux = "0be0c51861271fe75f5d5e8e7b28d6658497ade369b41b02ae525b27a5e76d87"
[sha256]
x86_64-linux = "b09045fca42665bdb944d85bbb30627939f992b56d5df3e45a1ba17e54a38901"
[size]
x86_64-linux = 9746766