numtide / devshell

Per project developer environments
https://numtide.github.io/devshell/
MIT License
1.22k stars 87 forks source link

Allow specifying commands as packages without the attrset #216

Open lilyball opened 2 years ago

lilyball commented 2 years ago

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.

zimbatm commented 2 years ago

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

deemp commented 7 months ago

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";
    };
  }
]