Skip to content

Instantly share code, notes, and snippets.

@dmalikov
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmalikov/5bb11ba16ccab975e4ff to your computer and use it in GitHub Desktop.
Save dmalikov/5bb11ba16ccab975e4ff to your computer and use it in GitHub Desktop.
nix-shell behaves assimetrically pointing at local default.nix and using global ~/.nixpkgs/config.nix tree
name: abc
version: 0.1.0.0
license-file: LICENSE
build-type: Simple
cabal-version: >=1.10
executable abc
main-is: Main.hs
build-depends: base >=4.7 && <4.8
default-language: Haskell2010
# ~/.nixpkgs/config.nix
pkgs : {
packageOverrides = pkgs : rec {
myHaskellPackages =
let
callPackage = pkgs.lib.callPackageWith myHaskellPackages;
in
pkgs.recurseIntoAttrs (pkgs.haskellPackages.override {
extension = self : _ : {
abc = self.callPackage ../path/to/package { haskellPackages = myHaskellPackages; };
};
});
};
}
{ haskellPackages ? (import <nixpkgs> {}).haskellPackages }:
haskellPackages.cabal.mkDerivation (self: {
pname = "abc";
version = "0.1.0.0";
src = ./.;
isLibrary = false;
isExecutable = true;
meta = {
license = self.stdenv.lib.licenses.mit;
platforms = self.ghc.meta.platforms;
};
})
main = print 1
>> nix-shell default.nix --command 'abc'
bash: abc: command not found
>> nix-shell -p myHaskellPackages.abc --command 'abc'
1
@dmalikov
Copy link
Author

dmalikov commented Dec 4, 2014

It's all about -p flag.

So the solution is

>>  nix-shell -p '(haskellPackages.callPackage ./default.nix { haskellPackages = haskellPackages; })' --command 'abc'
1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment