devshell icon indicating copy to clipboard operation
devshell copied to clipboard

Allow specifying commands as packages without the attrset

Open lilyball opened this issue 2 years ago • 2 comments

Is your feature request related to a problem? Please describe.

When listing commands, most of my commands are just packages that don't need additional attributes. Having to repeat the package key is tedious. In my Nix config that ends up looking like

{
  commands = with pkgs; [
    { package = cargo-deny; }
    { package = cargo-insta; }
    { package = vagrant; }
    { package = jq; }
  ];
}

Describe the solution you'd like

I'd prefer to be able to write this like

{
  commands = with pkgs; [ cargo-deny cargo-insta vagrant jq ];
}

This can be done by changing the type for commands, which is currently listOf (submodule { options = commadOptions; }), to use either or coercedTo to accept a strOrPackage in addition to the submodule. coercedTo is probably better in that you wouldn't have to change any of the code that consumes it.

Describe alternatives you've considered

A library function could be provided instead that takes a list of packages and wraps each package in the appropriate attrset, but that seems unnecessarily awkward.

lilyball avatar Aug 31 '22 04:08 lilyball

Sounds good! (I mean, happy to get a PR for that)

zimbatm avatar Aug 31 '22 08:08 zimbatm

Something similar is implemented in https://github.com/numtide/devshell/pull/290.

"category 1" = [
  {
    prefix = "nix run .#";
    prefixes.a.b.yq-1 = "nix run ../#";
    packages = {
      a.b = {
        jq-1 = [ "[package] jq description" pkgs.jq ];
        yq-1 = pkgs.yq-go;
        yq-2 = pkgs.yq-go;
      };
      npm = "nodePackages.npm";
    };
  }
]

deemp avatar Jan 13 '24 23:01 deemp