[Nix-dev] How to version-bump haskell package in nix-shell?
roconnor at theorem.ca
roconnor at theorem.ca
Sun Dec 14 14:12:24 CET 2014
I'll be curious as to what the offical answer is, but in the meantime the
following somewhat akward expression appears to work:
haskellPackages.purescript.override (oldargs:
{ cabal = oldargs.cabal.override (oldargs:
{ extension = self: super: (oldargs.extension self super) //
{ version = "0.6.2";
sha256 = "1zf2yyk3rdwk5992fhvqyd7b5w7mkzjcc0iyp75bscnjsggs31k0";
buildDepends = super.buildDepends ++ [ haskellPackages.optparseApplicative ];
};
});
})
Note that 0.6.2 has removed the dependency on cmdtheline and replaced it
with optparseApplicative. Filtering out cmdtheline from
super.buildDepends can be done but it is so akward that I didn't bother.
After all, having extra unused buildDepends isn't so terrible.
If you do go this route you'll probably want to abstract the above with a
helper function that takes a derivation and your set of version, sha256,
etc. overrides and does all this. Maybe call it cabalOverride.
let cabalOverride = drv: newAttrs:
drv.override (oldargs:
{ cabal = oldargs.cabal.override (oldargs:
{ extension = self: super:
(oldargs.extension self super) // (newAttrs self super);
});
});
in cabalOverride haskellPackages.purescript (self: super:
{ version = "0.6.2";
sha256 = "1zf2yyk3rdwk5992fhvqyd7b5w7mkzjcc0iyp75bscnjsggs31k0";
buildDepends = super.buildDepends ++ [ haskellPackages.optparseApplicative ];
})
On Sun, 14 Dec 2014, Alex Berg wrote:
> I have a shell.nix file to give me a shell which has PureScript in it. I sometimes want to version-bump that. How do I do that? I pasted my shell.nix file at the bottom of this
> message, which includes a few attempts at doing this.
>
> I see that boothead is doing what I want in his shell.nix [1], but not in the way I want to do it. He is redefining the *entire* package in a local file, but I want to just
> edit the "version" and "sha256" attributes of the central nix expression.
>
> The "Modifying Packages" wiki page [2] says we can use an "override" attribute to add custom values to attributes, which sounds like exactly what I want to do. However, all the
> examples I see, including the "Haskell" wiki page [3], teach us to redefine the entire package in a local file. Surely we are also able to use the "override" attribute here,
> can't we? The "override" technique seems so much simpler and needs less boilerplate.
>
> I did some source-code reading, which isn't fun, and I found a function called "makeOverridable" [4]. If we add that function to the cabal builder here [5], will this allow us
> to use this "override" technique?
>
> If I add "stdenv.lib.makeOverridable" here, will I be able to do "haskellPackages.somePackage.override { version = "1.2.4" }" ?
>
> [1] https://github.com/boothead/purescript-nix/blob/master/shell.nix
> [2] https://nixos.org/wiki/Nix_Modifying_Packages#Overriding_Existing_Packages
> [3] https://nixos.org/wiki/Haskell#Maintaining_your_own_set_of_additional_Haskell_packages
> [4] https://github.com/NixOS/nixpkgs/blob/492dd14e78aebea0722dcb6becb2d6601ad51dc8/lib/customisation.nix
> [5] https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/cabal/default.nix#L312
>
>
> ----- shell.nix -----
>
> { }:
>
> with import <nixpkgs> {};
>
> #let purescript = pkgs.stdenv.lib.overrideDerivation pkgs.haskellPackages.purescript ( oldAttrs : {
> # src = {
> # version = "0.6.2";
> # sha256 = "";
> # };
> #});
> let purescript = pkgs.haskellPackages.purescript.override {
> version = "0.6.2";
> sha256 = "";
> };
> #let haskellPackages = pkgs.haskellPackages.override {
> # extension = self: super: {
> # #purescript = self.callPackage ./purescript.nix {
> # purescript = self.purescript.override {
> # version = "0.6.2";
> # sha256 = "";
> # };
> # };
> #};
> in rec {
> pursEnv = stdenv.mkDerivation rec {
> name = "purescript-env";
> version = "1.1.1.1";
> src = ./.;
> buildInputs = [
> #haskellPackages.purescript
> purescript
> pkgs.nodePackages.grunt-cli
> pkgs.nodePackages.bower
> git
> which
> vim
> tree
> ];
> shellHook =
> ''
> echo "Patching NODE_PATH"
> export NODE_PATH=$NODE_PATH:/nix/store/hhpwgi9k2j3c0r4q6rn0l0cf1r8vf98q-node-es5-ext-0.10.4/lib/node_modules
> '';
> };
>
>
>
--
Russell O'Connor <http://r6.ca/>
``All talk about `theft,''' the general counsel of the American Graphophone
Company wrote, ``is the merest claptrap, for there exists no property in
ideas musical, literary or artistic, except as defined by statute.''
More information about the nix-dev
mailing list