
Athena OS is a Arch/Nix-based distro focused on Cybersecurity. Learn, practice and enjoy with any hacking tool!

Packages in this repository are kept up to date automatically via a daily GitHub Actions workflow powered by nvchecker.
The automation runs every day (and can also be triggered manually) and goes through the following steps:
Config generation — .nvchecker/generate-nvchecker-config.py scans every PKGBUILD under src/ and auto-generates .nvchecker/nvchecker.toml. Each package is classified as one of:
pkgver= and a remote source URL. Tracked by latest tag/release on the hosting platform.pkgver() function and a git+https:// source. Tracked by latest upstream commit.Version check — nvchecker queries the upstream of every tracked package and writes the results to .nvchecker/newver.json. This is compared against .nvchecker/oldver.json (committed in the repo) to find packages that have a new version available.
PKGBUILD update & PR — for each outdated package the workflow:
The config generator and the CI workflow both resolve shell variable references in source= lines so that indirect URLs like the following are handled correctly:
_pkgname=${pkgname#athena-}
source=("git+https://github.com/Athena-OS/$_pkgname.git")
The following bash parameter expansion forms are supported:
The following bash constructs are not resolved by the automation. PKGBUILDs that rely on them will be skipped gracefully with an informational note — no error is raised, and they can always be updated manually.
If your PKGBUILD uses any of the above and the automation skips it, you can either rewrite the assignment as a plain var=value line or open a PR updating the version manually.
auto-update/<pkgname>-<newver>.pkgver and resets pkgrel to 1 in the PKGBUILD.updpkgsums.pkgver() function locally to compute the real Arch-style version string (e.g. 131.940a5d3), and keeps sha512sums=('SKIP') as is.auto-update for human review before anything lands on main.State save — .nvchecker/oldver.json is updated with the versions seen in this run and committed back to main, so the next run only opens PRs for genuinely new changes.
| Platform | Detection |
|---|
| GitHub | github.com/<user>/<repo> |
| GitLab (gitlab.com + self-hosted) | gitlab.*/<user>/<repo> |
| Codeberg | codeberg.org/<user>/<repo> |
| Gitea (self-hosted) | gitea.*/<user>/<repo> |
| Sourcehut | git.sr.ht/~<user>/<repo> |
| Syntax | Meaning | Example |
|---|
$var / ${var} | Simple substitution | $pkgname → athena-settings |
${var#prefix} | Strip shortest matching prefix | ${pkgname#athena-} → settings |
${var%suffix} | Strip shortest matching suffix | ${pkgname%-git} → athena-settings |
| Unsupported syntax | Example | Reason |
|---|
## greedy prefix strip | ${var##*/} | Only non-greedy # is implemented |
%% greedy suffix strip | ${var%%.*} | Only non-greedy % is implemented |
| Substring extraction | ${var:0:3} | Different operator, rare in PKGBUILDs |
| Pattern substitution | ${var//foo/bar} | Different operator, rare in PKGBUILDs |
| Arithmetic expansion | $((pkgver + 1)) | Out of scope for version tracking |
| Nested expansions | ${${var}#prefix} | Not valid POSIX; not used in practice |