haskellPackages.cabal2nix-unstable: override with unstable dependencies (#438290)

This commit is contained in:
Malte Ott
2025-09-01 14:30:43 +02:00
committed by GitHub
8 changed files with 171 additions and 22 deletions

View File

@@ -12,8 +12,16 @@ head_info="$(curl -H "Accept: application/vnd.github.v3+json" https://api.github
commit="$(jq -r .commit.sha <<< "$head_info")" commit="$(jq -r .commit.sha <<< "$head_info")"
# extract commit timestamp and convert to date # extract commit timestamp and convert to date
date="$(date "--date=$(jq -r .commit.commit.committer.date <<< "$head_info")" +%F)" date="$(date "--date=$(jq -r .commit.commit.committer.date <<< "$head_info")" +%F)"
# generate nix expression from cabal file, replacing the version with the commit date # generate nix expression from cabal file, replacing the version with the commit date
output=pkgs/development/haskell-modules/cabal2nix-unstable.nix function mkPackage() {
echo '# This file defines cabal2nix-unstable, used by maintainers/scripts/haskell/regenerate-hackage-packages.sh.' > "$output" output=pkgs/development/haskell-modules/cabal2nix-unstable/$1.nix
cabal2nix --subpath cabal2nix "https://github.com/NixOS/cabal2nix/archive/$commit.tar.gz" | sed -e 's/version = ".*"/version = "'"unstable-$date"'"/' >> "$output" echo "# This file defines $1-unstable, used by maintainers/scripts/haskell/regenerate-hackage-packages.sh." > "$output"
nixfmt "$output" cabal2nix --subpath "$1" "https://github.com/NixOS/cabal2nix/archive/$commit.tar.gz" | sed -Ee 's/version = "(.*)"/version = "\1-unstable-'"$date"'"/' >> "$output"
nixfmt "$output"
}
mkPackage "cabal2nix"
mkPackage "distribution-nixpkgs"
mkPackage "hackage-db"
mkPackage "language-nix"

View File

@@ -35,7 +35,7 @@
}: }:
mkDerivation { mkDerivation {
pname = "cabal2nix"; pname = "cabal2nix";
version = "unstable-2025-08-10"; version = "2.20.1-unstable-2025-08-10";
src = fetchzip { src = fetchzip {
url = "https://github.com/NixOS/cabal2nix/archive/31c6db234a905bbf4e8f34c5a986f294b231de0a.tar.gz"; url = "https://github.com/NixOS/cabal2nix/archive/31c6db234a905bbf4e8f34c5a986f294b231de0a.tar.gz";
sha256 = "1ifbmcm5k8mxcpq4kscfc5ddcknawxz6a4ak30jmf0kk1lrfsikf"; sha256 = "1ifbmcm5k8mxcpq4kscfc5ddcknawxz6a4ak30jmf0kk1lrfsikf";

View File

@@ -0,0 +1,53 @@
# This file defines distribution-nixpkgs-unstable, used by maintainers/scripts/haskell/regenerate-hackage-packages.sh.
{
mkDerivation,
aeson,
base,
bytestring,
Cabal,
containers,
deepseq,
directory,
fetchzip,
hspec,
language-nix,
lens,
lib,
pretty,
process,
}:
mkDerivation {
pname = "distribution-nixpkgs";
version = "1.7.1.1-unstable-2025-08-10";
src = fetchzip {
url = "https://github.com/NixOS/cabal2nix/archive/31c6db234a905bbf4e8f34c5a986f294b231de0a.tar.gz";
sha256 = "1ifbmcm5k8mxcpq4kscfc5ddcknawxz6a4ak30jmf0kk1lrfsikf";
};
postUnpack = "sourceRoot+=/distribution-nixpkgs; echo source root reset to $sourceRoot";
enableSeparateDataOutput = true;
libraryHaskellDepends = [
aeson
base
bytestring
Cabal
containers
deepseq
language-nix
lens
pretty
process
];
testHaskellDepends = [
aeson
base
Cabal
deepseq
directory
hspec
language-nix
lens
];
homepage = "https://github.com/NixOS/cabal2nix/tree/master/distribution-nixpkgs#readme";
description = "Types and functions to manipulate the Nixpkgs distribution";
license = lib.licenses.bsd3;
}

View File

@@ -0,0 +1,44 @@
# This file defines hackage-db-unstable, used by maintainers/scripts/haskell/regenerate-hackage-packages.sh.
{
mkDerivation,
aeson,
base,
bytestring,
Cabal,
containers,
directory,
exceptions,
fetchzip,
filepath,
lib,
tar,
time,
utf8-string,
}:
mkDerivation {
pname = "hackage-db";
version = "2.1.3-unstable-2025-08-10";
src = fetchzip {
url = "https://github.com/NixOS/cabal2nix/archive/31c6db234a905bbf4e8f34c5a986f294b231de0a.tar.gz";
sha256 = "1ifbmcm5k8mxcpq4kscfc5ddcknawxz6a4ak30jmf0kk1lrfsikf";
};
postUnpack = "sourceRoot+=/hackage-db; echo source root reset to $sourceRoot";
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [
aeson
base
bytestring
Cabal
containers
directory
exceptions
filepath
tar
time
utf8-string
];
homepage = "https://github.com/NixOS/cabal2nix/tree/master/hackage-db#readme";
description = "Access cabal-install's Hackage database via Data.Map";
license = lib.licenses.bsd3;
}

View File

@@ -0,0 +1,32 @@
# This file defines language-nix-unstable, used by maintainers/scripts/haskell/regenerate-hackage-packages.sh.
{
mkDerivation,
base,
deepseq,
fetchzip,
lens,
lib,
parsec-class,
pretty,
QuickCheck,
}:
mkDerivation {
pname = "language-nix";
version = "2.2.0-unstable-2025-08-10";
src = fetchzip {
url = "https://github.com/NixOS/cabal2nix/archive/31c6db234a905bbf4e8f34c5a986f294b231de0a.tar.gz";
sha256 = "1ifbmcm5k8mxcpq4kscfc5ddcknawxz6a4ak30jmf0kk1lrfsikf";
};
postUnpack = "sourceRoot+=/language-nix; echo source root reset to $sourceRoot";
libraryHaskellDepends = [
base
deepseq
lens
parsec-class
pretty
QuickCheck
];
homepage = "https://github.com/NixOS/cabal2nix/tree/master/language-nix#readme";
description = "Data types and functions to represent the Nix language";
license = lib.licenses.bsd3;
}

View File

@@ -191,6 +191,7 @@ with haskellLib;
# cabal2nix depends on hpack which doesn't support Cabal >= 3.16 # cabal2nix depends on hpack which doesn't support Cabal >= 3.16
cabal2nix-unstable = super.cabal2nix-unstable.override ( cabal2nix-unstable = super.cabal2nix-unstable.override (
prev:
# Manually override the relevant dependencies to reduce rebuild amount # Manually override the relevant dependencies to reduce rebuild amount
let let
cabalOverride = { cabalOverride = {
@@ -199,7 +200,7 @@ with haskellLib;
in in
cabalOverride cabalOverride
// lib.mapAttrs (_: drv: drv.override cabalOverride) { // lib.mapAttrs (_: drv: drv.override cabalOverride) {
inherit (self) inherit (prev)
distribution-nixpkgs distribution-nixpkgs
hackage-db hackage-db
hpack hpack

View File

@@ -341,22 +341,24 @@ self: super:
# after verifying they are indeed erroneous (e.g. cabal2nix) or just disable # after verifying they are indeed erroneous (e.g. cabal2nix) or just disable
# the check, sticking with the status quo. Ideally there'll be zero cases of # the check, sticking with the status quo. Ideally there'll be zero cases of
# the latter in the future! # the latter in the future!
inherit cabal2nix = overrideCabal (old: {
(lib.mapAttrs ( postInstall = ''
_: remove-references-to -t ${self.hpack} "$out/bin/cabal2nix"
overrideCabal (old: { # Note: The `data` output is needed at runtime.
postInstall = '' remove-references-to -t ${self.distribution-nixpkgs.out} "$out/bin/hackage2nix"
remove-references-to -t ${self.hpack} "$out/bin/cabal2nix"
# Note: The `data` output is needed at runtime.
remove-references-to -t ${self.distribution-nixpkgs.out} "$out/bin/hackage2nix"
${old.postInstall or ""} ${old.postInstall or ""}
''; '';
}) }) super.cabal2nix;
) super) cabal2nix-unstable = overrideCabal (old: {
cabal2nix postInstall = ''
cabal2nix-unstable remove-references-to -t ${self.hpack} "$out/bin/cabal2nix"
; # Note: The `data` output is needed at runtime.
remove-references-to -t ${self.distribution-nixpkgs-unstable.out} "$out/bin/hackage2nix"
${old.postInstall or ""}
'';
}) super.cabal2nix-unstable;
# https://github.com/fpco/unliftio/issues/87 # https://github.com/fpco/unliftio/issues/87
unliftio = dontCheck super.unliftio; unliftio = dontCheck super.unliftio;

View File

@@ -28,7 +28,16 @@ self: super:
# Used by maintainers/scripts/regenerate-hackage-packages.sh, and generated # Used by maintainers/scripts/regenerate-hackage-packages.sh, and generated
# from the latest master instead of the current version on Hackage. # from the latest master instead of the current version on Hackage.
cabal2nix-unstable = self.callPackage ./cabal2nix-unstable.nix { }; cabal2nix-unstable = self.callPackage ./cabal2nix-unstable/cabal2nix.nix {
distribution-nixpkgs = self.distribution-nixpkgs-unstable;
hackage-db = self.hackage-db-unstable;
language-nix = self.language-nix-unstable;
};
distribution-nixpkgs-unstable = self.callPackage ./cabal2nix-unstable/distribution-nixpkgs.nix {
language-nix = self.language-nix-unstable;
};
hackage-db-unstable = self.callPackage ./cabal2nix-unstable/hackage-db.nix { };
language-nix-unstable = self.callPackage ./cabal2nix-unstable/language-nix.nix { };
ghc-settings-edit = self.callPackage ../tools/haskell/ghc-settings-edit { }; ghc-settings-edit = self.callPackage ../tools/haskell/ghc-settings-edit { };