Skip to content

boxcli,flakegen: add generate flake-wrapper subcommand (#2717)#2822

Open
tm-michael wants to merge 1 commit intojetify-com:mainfrom
tm-michael:main
Open

boxcli,flakegen: add generate flake-wrapper subcommand (#2717)#2822
tm-michael wants to merge 1 commit intojetify-com:mainfrom
tm-michael:main

Conversation

@tm-michael
Copy link
Copy Markdown
Contributor

Summary

Devbox's package syntax expects a flake, which makes it awkward to consume a locally-authored .nix expression (e.g. a default.nix written with pkgs.callPackage). As a non-flake user myself, the world of flakes is very foreign and lacking in documentation. Having to learn flakes to be able to inject my packages in to devbox is thus a big hindrance. Today users have to hand-write a boilerplate wrapper flake before they can reference the directory as "./my-pkg": "" or "path:./mypackage" in devbox.json.

This adds a new devbox generate flake-wrapper [path] command that scaffolds that wrapper for them:

  • New internal/devbox/flakegen package renders a small embedded template (flake-wrapper.nix.tmpl) that imports a target .nix file via pkgs.callPackage and exposes it under packages.${system}.<attr>.
  • boxcli wires it up as a subcommand of generate with flags for --force, --nixpkgs, --attr, and --print. When run inside a devbox project the command defaults --nixpkgs to the project's stdenv so the wrapper stays in sync; otherwise it falls back to nixpkgs-unstable. The subcommand skips the parent generate command's ensureNixInstalled hook since it is pure text templating.
  • Adds unit tests for flakegen (template rendering, path resolution, --force, --print) and a CLI-level test for the new subcommand.
  • Adds an examples/nix/hello example showing the end-to-end flow.

Closes #2717

How was it tested?

  • Tests added
  • Example added with README that has commands to execute. Commands executed manually (flake.nix generated and devbox shell opened to execute command therein

Community Contribution License

All community contributions in this pull request are licensed to the project
maintainers under the terms of the
Apache 2 License.

By creating this pull request, I represent that I have the right to license the
contributions to the project maintainers under the Apache 2 License as stated in
the
Community Contribution License.

…2717)

Devbox's package syntax expects a flake, which makes it awkward to
consume a locally-authored .nix expression (e.g. a `default.nix`
written with `pkgs.callPackage`). Today users have to hand-write a
boilerplate wrapper flake before they can reference the directory as
`"./my-pkg": ""` or `"path:./mypackage"` in devbox.json.

This adds a new `devbox generate flake-wrapper [path]` command that
scaffolds that wrapper for them:

  - New `internal/devbox/flakegen` package renders a small embedded
    template (`flake-wrapper.nix.tmpl`) that imports a target .nix
    file via `pkgs.callPackage` and exposes it under
    `packages.${system}.<attr>`.
  - `boxcli` wires it up as a subcommand of `generate` with flags for
    `--force`, `--nixpkgs`, `--attr`, and `--print`. When run inside a
    devbox project the command defaults `--nixpkgs` to the project's
    stdenv so the wrapper stays in sync; otherwise it falls back to
    `nixpkgs-unstable`. The subcommand skips the parent `generate`
    command's ensureNixInstalled hook since it is pure text templating.
  - Adds unit tests for `flakegen` (template rendering, path
    resolution, `--force`, `--print`) and a CLI-level test for the new
    subcommand.
  - Adds an `examples/nix/hello` example showing the end-to-end flow.

Closes jetify-com#2717
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

[Feature request] Allow adding custom classic nix packages

1 participant