1
1
forked from extern/flakelight

Allow devShells to be directly set to derivations

This commit is contained in:
Archit Gupta 2024-02-25 18:40:05 -08:00
parent 610cc3b0c4
commit 360fd2099d
3 changed files with 24 additions and 8 deletions

View File

@ -439,7 +439,7 @@ To use the first example, but manually specify the package name:
``` ```
Type: Type:
devShell: Cfg | (Pkgs -> Cfg) | PackageDef devShell: Cfg | (Pkgs -> Cfg) | PackageDef | Derivation | (Pkgs -> Derivation)
Cfg.packages: [Derivation] | (Pkgs -> [Derivation]) Cfg.packages: [Derivation] | (Pkgs -> [Derivation])
Cfg.inputsFrom: [Derivation] | (Pkgs -> [Derivation]) Cfg.inputsFrom: [Derivation] | (Pkgs -> [Derivation])
Cfg.shellHook: Str | (Pkgs -> Str) Cfg.shellHook: Str | (Pkgs -> Str)
@ -451,11 +451,11 @@ The devshell options allow you to configure `devShells.${system}.default`. It is
split up into options in order to enable multiple modules to contribute to its split up into options in order to enable multiple modules to contribute to its
configuration. configuration.
`devShell` can alternatively be set to a package definition, which is then used `devShell` can alternatively be set to a package definition or derivation, which
as the default shell, overriding other options. is then used as the default shell, overriding other options.
`devShell` can also be set to a function that takes the package set and returns `devShell` can also be set to a function that takes the package set and returns
an attrSet of the devShell configuration options. an attrSet of the devShell configuration options or a derivation.
The options available are as follows: The options available are as follows:

View File

@ -47,10 +47,13 @@ let
let val = pkgs.callPackage fn { }; in let val = pkgs.callPackage fn { }; in
if (functionArgs fn == { }) || !(package.check val) if (functionArgs fn == { }) || !(package.check val)
then fn pkgs then fn pkgs
else { overrideShell = val; }; else val;
packageOverride = p: { overrideShell = p; };
devShellType = coercedTo function wrapFn devShellType = coercedTo function wrapFn
(optFunctionTo (submodule devShellModule)); (optFunctionTo (coercedTo package packageOverride
(submodule devShellModule)));
genDevShell = pkgs: cfg: genDevShell = pkgs: cfg:
if cfg.overrideShell != null then cfg.overrideShell if cfg.overrideShell != null then cfg.overrideShell

View File

@ -324,13 +324,13 @@ in
}) })
(f: lib.isDerivation f.devShells.x86_64-linux.default); (f: lib.isDerivation f.devShells.x86_64-linux.default);
devShell-override = test devShell-pkgDef = test
(flakelight ./empty { (flakelight ./empty {
devShell = { mkShell }: mkShell { }; devShell = { mkShell }: mkShell { };
}) })
(f: lib.isDerivation f.devShells.x86_64-linux.default); (f: lib.isDerivation f.devShells.x86_64-linux.default);
devShell-override-empty = test devShell-pkgDef-empty = test
(flakelight ./empty { (flakelight ./empty {
disabledModules = [ "builtinFormatters.nix" ]; disabledModules = [ "builtinFormatters.nix" ];
devShell = { mkShell }: mkShell { }; devShell = { mkShell }: mkShell { };
@ -365,6 +365,19 @@ in
}) })
(f: lib.isDerivation f.devShells.x86_64-linux.default); (f: lib.isDerivation f.devShells.x86_64-linux.default);
devShell-pkg = test
(flakelight ./empty ({ inputs, ... }: {
systems = [ "x86_64-linux" ];
devShell = inputs.nixpkgs.legacyPackages.x86_64-linux.hello;
}))
(f: lib.isDerivation f.devShells.x86_64-linux.default);
devShell-pkg-fn = test
(flakelight ./empty {
devShell = pkgs: pkgs.hello;
})
(f: lib.isDerivation f.devShells.x86_64-linux.default);
devShells = test devShells = test
(flakelight ./empty { (flakelight ./empty {
devShell.inputsFrom = pkgs: [ pkgs.emacs ]; devShell.inputsFrom = pkgs: [ pkgs.emacs ];