Commit Graph
1873 Commits
Author SHA1 Message Date
Luca Di Maio 8d96cce479 docs: switch usage and man pages to v2 subcommand syntax
Rewrite distrobox-*.md to `distrobox <cmd>`, reconcile flag tables with
internal/cli, refresh README+useful_tips, regenerate man/man1/*.1.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 13:39:47 +02:00
Luca Di Maio a4d2217a57 feat(install): make install/uninstall scripts work with v2
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 13:39:47 +02:00
Luca Di Maio 4acf784a7d feat(completion): add bash and zsh shell completion
Wrappers in completions/ call --generate-shell-completion; a Go
ShellComplete callback emits flag names so urfave's default response
(subcommands only) is replaced with the full candidate set.

This replaces old hard-coded way to auto-complete using shell script's
parsing.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 13:39:47 +02:00
Luca Di Maio c71075124b chore(commands): tidy error paths and drop v1-comparability code
Fix "contaiers" typo (list, rm), route the upgrade error through the
printer, and simplify joinHooks now that tests/compare.sh is gone.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 13:39:47 +02:00
Luca Di Maio b31ea49e91 chore(cleanup): remove v1 file leftovers
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 13:39:47 +02:00
Luca Di Maio c574800e72 refactor(create): align flag Value with displayed default
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:26 +02:00
Luca Di Maio bdc2576f2c refactor(config): centralize DBX_* env-var resolution
Env vars were read in three layers — cli.EnvVars on flags, os.Getenv
in CLI actions, and the podman provider — leaving library users no
single override point. Funnelling every DBX_* through pkg/config gives
consumers one injection point, lets the container manager receive its
configuration instead of sniffing for it, and fixes the create flags
whose Usage advertised a default the env-set value was already
shadowing.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:25 +02:00
Luca Di Maio 9ab96ee1e0 refactor(rm): route command-layer prints through ui.Printer
Replace four fmt.Print*/Fprintf calls in pkg/commands/rm.go with a
printer field on RmCommand, converting warnUnknownContainers and
findExportedDesktopApps to methods. cli/rm, assemble, and ephemeral
propagate the new constructor arg so library users can control output.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:25 +02:00
Luca Di Maio 9a3b768385 chore(lint): clear golangci-lint findings
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:25 +02:00
Luca Di Maio b9b46b685a fix(test): mock the manager in generate-entry single-mode tests
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:25 +02:00
Luca Di Maio 3a4fc6a89e fix(rm): wire DBX_CONTAINER_RM_CUSTOM_HOME into --rm-home
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:25 +02:00
Luca Di Maio bdc86bbdb9 fix(rm): print 'Cannot find container' for unknown explicit names
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:25 +02:00
Luca Di Maio d0bc6af01b fix(stop): honor DBX_CONTAINER_NAME when no positional given
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:25 +02:00
Luca Di Maio cd2021d247 fix(create): word-split --volume values for shell parity
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:24 +02:00
Luca Di Maio 00514a8ef0 fix(create): strip trailing slashes from --home
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:24 +02:00
Luca Di Maio f89b8dc8d7 fix(create): show the host's hostname in --hostname Usage
Shell distrobox-create:204 prints `default: $(uname -n)`. Compute it
via os.Hostname() at command-build time so --help mirrors the shell.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:24 +02:00
Luca Di Maio a1037e6094 fix(create): drop --image Value default so the empty-check survives
Value: cfg.DefaultContainerImage made cmd.String("image") never empty,
which killed the `containerImage == ""` branch in makeContainerImage
and spuriously triggered the `name == default` fallback for `--name foo`
alone. The Usage string already shows the default.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:24 +02:00
Luca Di Maio ecd155afb1 fix(test): align test with new enter behaviour
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:24 +02:00
Luca Di Maio 333e28ae56 chore(enter): fix gofmt alignment
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:24 +02:00
Luca Di Maio 699a6eba75 fix(rm): use Container.IsRunning() for the force prompt
strings.Contains(container.Status, "Up") missed podman's lowercase
"running" status, leaving the force prompt unreachable under podman.
IsRunning() matches both docker ("Up …") and podman ("running").

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:24 +02:00
Luca Di Maio 556c8bb2ec fix(create): honor positional container_name argument
`distrobox create --image alpine my-box` silently ignored the
positional; only --name was read. Override ContainerName from
cmd.Args().First() to match the shell (distrobox-create:453-461).

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:23 +02:00
Luca Di Maio 07df5ad96b fix(assemble): skip rm step in dry-run mode
dryRun was misrouted into RmOptions.NoTTY, so `assemble rm --dry-run`
and `assemble create --replace --dry-run` actually deleted containers.
Match the shell which skips rm entirely (distrobox-assemble:316-319).

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:23 +02:00
Luca Di Maio 9860650b3d chore(lint): tweak golangci-lint
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:23 +02:00
Luca Di Maio 662edb4d49 fix(upgrade): print a per-container 'Upgrading <name>...' banner
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:23 +02:00
Luca Di Maio 9872c58ab9 fix(create): honor DBX_USERNS_NOLIMIT to drop the keep-id size cap
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:23 +02:00
Luca Di Maio c30b4589b1 fix(create): drop rslave bind propagation on macOS
Centralize in bindPropagation()/roBindPropagation(); Linux output unchanged.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:23 +02:00
Luca Di Maio bc26dfcd35 fix(enter): build --dry-run command without a live container
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:22 +02:00
Luca Di Maio cc11c2d48b fix(generate-entry): refuse a container that does not exist
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:22 +02:00
Luca Di Maio 348b79050f fix(enter): set PWD=<workdir> and stop forwarding the host PWD
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:22 +02:00
Luca Di Maio 8f22547e2b fix(entry): reuse local icons if present, before attempting downloads
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:22 +02:00
Luca Di Maio b7b0537b5b fix(create): request icon auto-detection so entries aren't icon-less
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:22 +02:00
Luca Di Maio cba73c8f04 fix(generate-entry): detect distro from the image, not the box name
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:22 +02:00
Luca Di Maio ca404a285d fix(enter): reorder PATH so /usr/local/{s,}bin precede /usr/{s,}bin
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:22 +02:00
Luca Di Maio 5a3c65bb62 fix(rm): fix(rm): confirm deletions once and default the prompts to yes, match shell behaviour
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:21 +02:00
Luca Di Maio 6388503959 fix(upgrade): match shell prompting
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:21 +02:00
Luca Di Maio 7ccdd55cf6 fix(assemble): an existing box is not an error, it should be simpl skipped
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:21 +02:00
Luca Di Maio 8c5b5658b9 fix(enter): support noworkdir flag
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:21 +02:00
Luca Di Maio 9844159d0f fix(enter): match shell version, prompt user to create missing container if not existing
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:21 +02:00
Luca Di Maio 3b03c847cb fix(create): mount the rootless marker so init doesn't misdetect rootful
Rootless podman/docker create now mounts /dev/null:/run/.distrobox.rootless:ro
(distrobox-create:577), so distrobox-init skips the /etc/shadow heuristic that
false-positives on Docker Desktop/macOS.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:21 +02:00
Luca Di Maio 0026ca068c fix(rm): honor --rm-home and gate the custom-home prompt on it
Thread RemoveHome into removeContainer; only prompt to delete the custom
home when --rm-home is set, interactive, and it differs from the host
home matching the shell. Without the flag the home is never touched.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:21 +02:00
Luca Di Maio c662a153cb fix(assemble): accept the volume manifest key and split values
Map the reference key `volume` (alongside `volumes`) and whitespace-split
the value so `volume="/a:/b /c:/d"` becomes separate mounts, matching
distrobox-assemble.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:20 +02:00
Luca Di Maio 1f2e769fb9 feat(cli): add SUDO/DOAS guard to match shell distrobox
Restore the reference shell's refusal of `sudo distrobox`.

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:20 +02:00
Luca Di Maio 6328b71aa4 docs: clarify go rewrite use of config file
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
2026-06-25 09:07:20 +02:00
Luca Di Maio d0a94a9c27 fix(create): default name to my-distrobox when using the default image
Match the shell: an argument-less distrobox create produces my-distrobox instead of fedora-toolbox-latest.
2026-06-25 09:07:20 +02:00
Luca Di Maio a4618cdbb4 fix(compat): honor DBX_* env vars, autodetect, prompt, root parity
Wire per-command DBX_* env sources, default container_manager to autodetect, reject invalid prompt input, and treat uid 0 as rootful.
2026-06-25 09:07:20 +02:00
Alessio Biancalana 3d59d11ab5 fix(enter,ephemeral): support -e/--exec marker for custom command 2026-06-25 09:07:20 +02:00
balanza ab1b3ac660 chore(ci): remove references to branch next 2026-06-14 13:04:28 +02:00
balanza 8e676666b7 feat(create): implement --compatibility to fetch supported image list
Ports show_compatibility from bash distrobox-create. Downloads
docs/compatibility.md from upstream and caches the parsed list
in the user cache dir.
2026-06-14 13:04:28 +02:00
Pedro Rabello Sato 94f1c5e807 fix(export): match running apps with exported .desktop entry (#2118)
The DE (at least Gnome and KDE) tries to match the app_id of
the running application with the corresponding .desktop file in this order:
 - find ${app_id}.desktop
 - if not found, tries to find a .desktop with StartupWMClass=${app_id}
Because when exporting a application we change the name of the .desktop
file, the DE can't match the running app, displaying a generic icon.

To solve this, change StartupWMClass key of the exported .desktop file
to the name of the .desktop inside distrobox (minus the .desktop extension).
2026-06-14 13:04:28 +02:00
Alessio Biancalana 24b31ed834 fix(list): detect containers with overridden manager label (#2116)
When `--additional-flags --label=manager=...` overrides the manager
label at creation time, `distrobox list` would hide the container and
`distrobox rm` would silently no-op (it filters through the same list).
Match the distrobox.* label set alongside `manager` so containers
remain detectable when the manager label is overridden, restoring v1's
loose `*distrobox*` substring behavior.
2026-06-14 13:04:28 +02:00