Skip to content

dev-tools

Recipe card from the charly-coder plugin (Images — the deployable catalog).

Property Value
Install files charly.yml, plan:

RPM (with --setopt=tsflags=noscripts): android-tools, apptainer, apptainer-suid, arch-install-scripts, asciinema, bat, bcc, bpftop, bpftrace, bridge-utils, debootstrap, direnv, dislocker, ecryptfs-utils, fastfetch, fd-find, fdupes, fuse-devel, fuse-dislocker, fuse3-devel, html2text, htop, jdupes, mosh, neovim, podman-compose, podman-machine, podman-remote, podman-tui, qemu-kvm, qemu-user-binfmt, qemu-user-static, rclone, restic, ripgrep, ShellCheck, squashfuse, strace, sysstat, thefuck, yamllint, yq, zoxide

rpm: (Fedora), pac: (Arch), deb: (Debian + generic Ubuntu), with a ubuntu:24.04: tag-section override. Not every package is available everywhere; per-distro drops are documented inline in charly.yml.

Packages dropped per distro (non-exhaustive):

  • Arch: apptainer-suid, dislocker, ecryptfs-utils, fuse-dislocker, podman-machine, podman-remote, podman-tui — not packaged.
  • Debian: same drops as Arch, plus arch-install-scripts (obviously) and apptainer itself (only in bookworm-backports, skipped on trixie).
  • Ubuntu: additionally drops fastfetch — package not in noble main. Because the distro-specificity cascade unions packages (it cannot subtract), fastfetch is simply omitted from every Ubuntu package level rather than removed by an override.

Both Debian and Ubuntu rename batbatcat in their archives to avoid a namespace collision with a legacy bacula utility. The bat package installs only /usr/bin/batcat; nothing lives at /usr/bin/bat. To keep downstream scripts, docs, and declarative tests portable, the candy ships a distro-tolerant symlink plan step:

# a plan step under the dev-tools candy's plan: list
plan:
- run: symlink batcat to bat on Debian/Ubuntu
command: |
if [ -f /usr/bin/batcat ] && [ ! -e /usr/bin/bat ]; then
ln -sf /usr/bin/batcat /usr/bin/bat
fi
run_as: root

No-op on Fedora/Arch (where /usr/bin/bat already exists from the distro package) — the guard short-circuits. Creates the symlink on Debian/Ubuntu. Idempotent across rebuilds.

fastfetch test — exclude_distro: [ubuntu]

Section titled “fastfetch test — exclude_distro: [ubuntu]”

The fastfetch-binary test is declared with an exclude_distro: filter:

# a plan step in the dev-tools candy's plan: list
plan:
- check: the fastfetch binary is installed (skipped on Ubuntu)
id: fastfetch-binary
exclude_distro:
- ubuntu
file:
file: /usr/bin/fastfetch
exists: true

On images whose ai.opencharly.platform.distro OCI label includes ubuntu, the test runner skips this check with a reason — see /charly-check:checkexclude_distro: field”. fastfetch is omitted from the Ubuntu package set, so the baked test probe would otherwise false-fail on Ubuntu.

dev-tools does NOT install gh, git, or git-lfs — those belong exclusively to /charly-coder:gh, the dedicated GitHub / git tooling candy. That keeps ownership unambiguous (one candy installs and tests them). If you want the git tooling, compose /charly-coder:gh alongside /charly-coder:dev-tools.

# charly.yml — compose the candy as an inline list in the box body
my-dev:
candy:
base: fedora
candy: [dev-tools]
  • (none currently enabled)

Use when the user asks about:

  • Developer tools in containers
  • CLI utilities (bat, ripgrep, fd-find, neovim, etc.)
  • Podman tooling inside containers
  • The dev-tools candy or its packages