2008-03-11 10:18:14 +01:00
# contains libraries and maybe applications in the future. That's why I'm putting it into misc. Feel free to move it somewhere else
args : ghc : with args ;
2008-03-13 10:46:12 +01:00
2008-03-11 10:18:14 +01:00
rec {
2008-03-13 10:46:12 +01:00
# name (using lowercase letters everywhere because using installing packages having different capitalization is discouraged) - this way there is not that much to remember?
2008-03-11 10:18:14 +01:00
2008-03-13 10:46:12 +01:00
cabal_darcs_name = " c a b a l - d a r c s " ;
2008-03-11 10:18:14 +01:00
2008-03-13 10:46:12 +01:00
# introducing p here to speed things up.
# It merges derivations (defined below) and additional inputs. I hope that using as few nix functions as possible results in greates speed?
# unfortunately with x; won't work because it forces nix to evaluate all attributes of x which would lead to infinite recursion
pkgs = let x = ghc . core_libs // derivations ;
inherit ( bleedingEdgeRepos ) sourceByName ;
in {
# ghc extra packages
mtl = { name = " m t l - 1 . 1 . 0 . 0 " ; srcDir = " l i b r a r i e s / m t l " ; p_deps = [ x . base ] ; src = ghc . extra_src ; } ;
parsec = { name = " p a r s e c - 2 . 1 . 0 . 0 " ; srcDir = " l i b r a r i e s / p a r s e c " ; p_deps = [ x . base ] ; src = ghc . extra_src ; } ;
network = { name = " n e t w o r k - 2 . 1 . 0 . 0 " ; srcDir = " l i b r a r i e s / n e t w o r k " ; p_deps = [ x . base x . parsec x . haskell98 ] ; src = ghc . extra_src ; } ;
regex_base = { name = " r e g e x - b a s e - 0 . 7 2 . 0 . 1 " ; srcDir = " l i b r a r i e s / r e g e x - b a s e " ; p_deps = [ x . base x . array x . bytestring x . haskell98 ] ; src = ghc . extra_src ; } ;
regex_posix = { name = " r e g e x - p o s i x - 0 . 7 2 . 0 . 2 " ; srcDir = " l i b r a r i e s / r e g e x - p o s i x " ; p_deps = [ x . regex_base x . haskell98 ] ; src = ghc . extra_src ; } ;
regex_compat = { name = " r e g e x - c o m p a t - 0 . 7 1 . 0 . 1 " ; srcDir = " l i b r a r i e s / r e g e x - c o m p a t " ; p_deps = [ x . base x . regex_posix x . regex_base x . haskell98 ] ; src = ghc . extra_src ; } ;
stm = { name = " s t m - 2 . 1 . 1 . 0 " ; srcDir = " l i b r a r i e s / s t m " ; p_deps = [ x . base x . array ] ; src = ghc . extra_src ; } ;
hunit = { name = " H U n i t - 1 . 2 . 0 . 0 " ; srcDir = " l i b r a r i e s / H U n i t " ; p_deps = [ x . base ] ; src = ghc . extra_src ; } ;
quickcheck = { name = " Q u i c k C h e c k - 1 . 1 . 0 . 0 " ; srcDir = " l i b r a r i e s / Q u i c k C h e c k " ; p_deps = [ x . base x . random ] ; src = ghc . extra_src ; } ;
2008-03-11 10:18:14 +01:00
2008-03-13 10:46:12 +01:00
# other pacakges (hackage etc)
binary = rec { name = " b i n a r y - 0 . 4 . 1 " ; p_deps = [ x . base x . bytestring x . containers x . array ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / b i n a r y / 0 . 4 . 1 / b i n a r y - 0 . 4 . 1 . t a r . g z " ;
sha256 = " 0 j g 5 i 1 k 5 f z 0 x p 1 p i a a f 5 b z h a g q v f l 3 i 7 3 h l p d m g s 4 g c 4 0 r 1 q 4 x 5 v " ; } ;
} ;
# using different name to not clash with postgresql
postgresql_bindings = rec { name = " P o s t g r e S Q L - 0 . 2 " ; p_deps = [ x . base x . mtl postgresql x . haskell98 ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / P o s t g r e S Q L / 0 . 2 / P o s t g r e S Q L - 0 . 2 . t a r . g z " ;
sha256 = " 0 p 5 q 3 y c 8 y m g z z l c 6 0 0 h 4 m b 9 w 8 6 n c r g j d b p q f i 4 9 b 2 j q v k c x 5 b w r r " ; } ;
pass = {
inherit postgresql ;
patchPhase = " e c h o ' e x t e n s i o n s : M u l t i P a r a m T y p e C l a s s e s F o r e i g n F u n c t i o n I n t e r f a c e E m p t y D a t a D e c l s G e n e r a l i z e d N e w t y p e D e r i v i n g F l e x i b l e I n s t a n c e s U n d e c i d a b l e I n s t a n c e s ' > > P o s t g r e S Q L . c a b a l
echo \ " e x t r a - l i b - d i r s : \$ p o s t g r e s q l / l i b \" > > P o s t g r e S Q L . c a b a l
echo \ " e x t r a - l i b r a r i e s : p q \" > > P o s t g r e S Q L . c a b a l
" ;
2008-03-11 10:18:14 +01:00
2008-03-13 10:46:12 +01:00
} ;
} ;
#wash = rec { name = "WashNGo-2.12"; p_deps = [x.base x.mtl x.haskell98 ];
# src = fetchurl { url = "http://www.informatik.uni-freiburg.de/~thiemann/WASH/WashNGo-2.12.tgz";
# sha256 = "1dyc2062jpl3xdlm0n7xkz620h060g2i5ghnb32cn95brcj9fgrz"; };
# patches = ../misc/WASHNGo_Patch_ghc682;
# };
2008-03-11 10:18:14 +01:00
2008-03-13 10:46:12 +01:00
hsql = rec { name = " h s q l - 1 . 7 " ; p_deps = [ x . base x . mtl x . haskell98 x . old_time ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / h s q l / 1 . 7 / h s q l - 1 . 7 . t a r . g z " ;
sha256 = " 0 j 2 l k v g 5 c 0 x 5 g f 2 s y 7 z m m g r d a 0 c 3 l 7 3 i 9 d 6 h y k a 2 f 1 5 d 5 n 1 r f j c 9 " ; } ;
pass = { patchPhase = "
sed - e ' s = build-depends:.*=build-depends: base , old-locale , old-time = ' - i hsql . cabal
echo \ " e x t e n s i o n s :
ForeignFunctionInterface , TypeSynonymInstances , CPP , ExistentialQuantification , GeneralizedNewtypeDeriving , PatternSignatures , ScopedTypeVariables , Rank2Types , DeriveDataTypeable \ " > > h s q l . c a b a l
" ; } ;
2008-03-11 10:18:14 +01:00
} ;
2008-03-13 10:46:12 +01:00
#hsql_postgresql = rec { name = "hsql-postgresql-1.7"; p_deps = [ x.base x.mtl x.haskell98 x.old_time x.hsql postgresql ];
# src = fetchurl { url = "";
# sha256 = "180c8acp4p9hsl5h8ryhhli9mlqcmcfjqaxzr7sa074gpzq29vfc"; };
# pass = { patchPhase = "
# sed -e 's=build-depends:.*=build-depends: base, old-locale, old-time=' -i hsql.cabal
# echo \"extensions:
# ForeignFunctionInterface, TypeSynonymInstances, CPP, ExistentialQuantification, GeneralizedNewtypeDeriving, PatternSignatures, ScopedTypeVariables, Rank2Types, DeriveDataTypeable \" >> hsql.cabal
# "; };
# };
# I'm getting a glibc error when compiling - where does it come from ?
2008-03-11 16:50:20 +01:00
takusen = rec { name = " t a k u s e n - 0 . 8 " ; p_deps = [ x . base x . mtl x . haskell98 x . time postgresql sqlite ] ;
src = sourceByName " t a k u s e n " ;
pass = {
inherit postgresql sqlite ;
patch = ./takusen_setup_patch ;
# no ODBC, Oracle support in nix
patchPhase = " p a t c h - p 1 S e t u p . h s < \$ p a t c h
sed - e ' /ODBC/d ' - i Takusen . cabal
sed - e ' /Oracle/d ' - i Takusen . cabal
sed - e \ " s = p g _ p a t h = \$ p o s t g r e s q l = \" - e \" s = s q l i t e _ p a t h = \$ s q l i t e = \" - i S e t u p . h s
" ;
} ;
} ;
2008-03-13 10:46:12 +01:00
hdbc = rec { name = " h d b c - 1 . 1 . 4 . 0 " ; p_deps = [ x . base x . mtl x . haskell98 x . time x . bytestring postgresql sqlite ] ;
src = fetchurl {
url = http://software.complete.org/hdbc/static/download_area/1.1.4.0/hdbc_1.1.4.0.tar.gz ;
sha256 = " 6 7 7 e 7 8 9 0 9 4 e 3 7 9 0 b e 2 4 6 2 3 3 1 b 6 c 0 f 9 7 b 4 a c 1 d 6 5 c 8 e b 9 8 c f 7 d 8 b 8 3 d 5 f 3 f 9 f b d 3 9 " ;
} ;
pass = {
inherit postgresql sqlite ;
#patch = ./takusen_setup_patch;
# no ODBC, Oracle support in nix
#patchPhase = "patch -p1 Setup.hs < \$patch
# sed -e '/ODBC/d' -i Takusen.cabal
# sed -e '/Oracle/d' -i Takusen.cabal
# sed -e \"s=pg_path=\$postgresql=\" -e \"s=sqlite_path=\$sqlite=\" -i Setup.hs
# ";
} ;
2008-03-11 10:18:14 +01:00
} ;
2008-03-13 10:46:12 +01:00
hdbc_postgresql = { name = " h d b c - p o s t g r e s q l " ; p_deps = [ x . hdbc x . parsec postgresql ] ;
src = fetchurl {
url = http://hackage.haskell.org/packages/archive/HDBC-postgresql/1.1.4.0/HDBC-postgresql-1.1.4.0.tar.gz ;
sha256 = " 1 b 9 l x j 5 5 j v v q 7 6 l l 8 d r 4 k f b 6 a j 7 r 0 b a j 4 g h 8 w k h g w c 1 k d 4 1 s x 7 h 3 " ; } ;
pass = {
patches = [ ./hdbc_postgresql_patch ] ;
patchPhase = " u n s e t p a t c h P h a s e ; p a t c h P h a s e ;
sed - e ' /Cabal-Ver/d ' - i HDBC-postgresql . cabal " ;
} ;
} ;
gtk2hs = rec { name = " g t k 2 h s - 0 . 9 . 1 2 . 1 " ; p_deps = [ x . haskell98 x . mtl x . bytestring pkgconfig ] ++ ( with gtkLibs ; [ glib pango gtk gnome . glib ] ) ;
src = fetchurl {
url = " h t t p : / / d o w n l o a d s . s o u r c e f o r g e . n e t / g t k 2 h s / ${ name } . t a r . g z " ;
sha256 = " 1 1 0 z 6 v 9 g z h g 6 n z l z 5 g s 8 a a f m i p b v a 6 r c 5 0 b 8 z 1 j g q 0 k 2 g 2 5 h f y 2 2 " ; } ;
pass = {
buildPhase = "
createEmptyPackageDatabaseAndSetupHook
export GHC_PACKAGE_PATH
./configure - - prefix = \ $ out - - with-user-pkgconf = local-pkg-db - - with-pkgconf = \ $ PACKAGE_DB
make
ensureDir \ $ out
make install
" ;
} ;
} ;
#wxhaskell = rec { name = "wxhaskel-0.9.4-1"; p_deps = [ x.haskell98 x.mtl x.bytestring pkgconfig wxGTK ] ++ (with gtkLibs; [ glib pango gtk gnome.glib]);
# src = fetchurl {
# url = "http://prdownloads.sourceforge.net/wxhaskell/wxhaskell-src-0.9.4-1.zip";
# sha256 = "0x6mjly7fxkxgzcl9znhzhik4h88rc56zl8diw5ihf48dcvby8wl"; };
# pass = {
# buildInputs = [ unzip ];
# buildPhase = "
# createEmptyPackageDatabaseAndSetupHook
# export GHC_PACKAGE_PATH
# ./configure --prefix=\$out --package-conf=\$PACKAGE_DB
# make
# ensureDir \$out
# make install
# ";
# };
# };
2008-03-11 10:18:14 +01:00
2008-03-13 10:46:12 +01:00
/*
askelldb-hsql-postgresql-0 .10 . tar . gz
######################################################################## 100.0%
hash is 0 0 nva5hhaknm5via4c1p2wj7ibyn6q874f0c3izjb9dk7rivfvgv
path is /nix/store/9n86rzpn0c4zyb7wpilpfcpkfnq68fch-haskelldb-hsql-postgresql-0.10.tar.gz
0 0 nva5hhaknm5via4c1p2wj7ibyn6q874f0c3izjb9dk7rivfvgv
* /
2008-03-11 10:18:14 +01:00
2008-03-13 10:46:12 +01:00
# 1.13 is stable. There are more recent non stable versions
haxml = rec { name = " H a X m l - 1 . 1 3 . 3 " ; p_deps = [ x . base x . rts x . directory x . process x . pretty x . containers x . filepath x . haskell98 ] ;
src = fetchurl { url = " h t t p : / / w w w . h a s k e l l . o r g / H a X m l / ${ name } . t a r . g z " ;
sha256 = " 0 8 d 9 w y 0 r g 9 m 6 6 d d 1 0 x 0 z v k l 7 4 l 2 5 v x d a k z 7 x p 3 j 8 8 s 2 g d 3 1 j p 1 v 0 " ; } ;
} ;
xhtml = rec { name = " x h t m l - 3 0 0 0 . 0 . 2 . 2 " ; p_deps = [ x . base ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / x h t m l / 3 0 0 0 . 0 . 2 . 2 / x h t m l - 3 0 0 0 . 0 . 2 . 2 . t a r . g z " ;
sha256 = " 1 1 2 m b q 2 6 k s h 7 r 2 2 y 0 9 h 0 x v m 3 4 7 k b a 3 p 4 n s 1 2 v j 5 4 9 8 f q q j 3 3 3 8 7 8 " ; } ;
} ;
html = rec { name = " h t m l - 1 . 0 . 1 . 1 " ; p_deps = [ x . base ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / h t m l / 1 . 0 . 1 . 1 / h t m l - 1 . 0 . 1 . 1 . t a r . g z " ;
sha256 = " 1 0 f a y f m 1 8 p 8 3 z l k r 9 i k x l q g n z x g 1 c k d q a q v z 6 w p 1 x j 9 5 f y 3 p 6 y l 1 " ; } ;
} ;
crypto = rec { name = " c r y p t o - 4 . 1 . 0 " ; p_deps = [ x . base x . array x . pretty x . quickcheck x . random x . hunit ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / C r y p t o / 4 . 1 . 0 / C r y p t o - 4 . 1 . 0 . t a r . g z " ;
sha256 = " 1 3 r b p b n 6 p 1 d a 6 q a 9 m 6 f 7 d m k z d k m p n x 6 j i y y n d z a z 9 9 n z q l r w i 1 0 9 " ; } ;
} ;
hslogger = rec { name = " h s l o g g e r - 1 . 0 . 4 " ; p_deps = [ x . containers x . directory x . mtl x . network x . process ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / h s l o g g e r / 1 . 0 . 4 / h s l o g g e r - 1 . 0 . 4 . t a r . g z " ;
sha256 = " 0 k m z 8 x s 1 q 4 1 r g 2 x w k 2 2 f a d y h x d g 5 m i z h w 0 r 4 d 7 4 y 4 3 a k k j w j 9 6 a r " ; } ;
} ;
parsep = { name = " p a r s e p - 0 . 1 " ; p_deps = [ x . base x . mtl x . bytestring ] ;
src = fetchurl { url = " h t t p : / / t w a n . h o m e . f m f . n l / p a r s e p / p a r s e p - 0 . 1 . t a r . g z " ;
sha256 = " 1 y 5 p b s 5 m z a a 2 1 1 2 7 c i x s a m a h l b v m q z y h z p w h 6 x 0 n z n s g m g 2 d p c 9 q " ; } ;
pass = { patchPhase = " s e d - i ' s / f p s / b y t e s t r i n g / ' * . c a b a l " ; } ;
} ;
time = { name = " t i m e - 1 . 1 . 2 . 0 " ; p_deps = [ x . base x . old_locale ] ;
src = fetchurl { url = " h t t p : / / h a c k a g e . h a s k e l l . o r g / p a c k a g e s / a r c h i v e / t i m e / 1 . 1 . 2 . 0 / t i m e - 1 . 1 . 2 . 0 . t a r . g z " ;
sha256 = " 0 z m 4 q q c z w b q z y 2 p k 7 w z 5 p 1 v i r g y l w y z d 9 z x p 0 4 0 6 s 5 z v p 3 5 g v l 8 9 " ; } ;
2008-03-11 10:18:14 +01:00
} ;
2008-03-13 10:46:12 +01:00
rjson = { name = " R J s o n - 0 . 3 . 3 " ; p_deps = [ x . base x . mtl x . parsec x . bytestring x . iconv x . array x . containers x . syb_with_class_darcs ] ;
src = fetchurl { url = http://hackage.haskell.org/packages/archive/RJson/0.3.3/RJson-0.3.3.tar.gz ;
sha256 = " 0 v a 1 r b g j b 8 m 3 r i j 0 2 3 1 8 a 3 1 b i 9 g m y 3 z w y x 5 z 1 2 1 6 4 c 7 i w a f n d 5 v 2 " ; } ;
2008-03-11 10:18:14 +01:00
} ;
2008-03-13 10:46:12 +01:00
iconv = { name = " i c o n v - 0 . 4 " ; p_deps = [ x . base x . bytestring ] ;
src = fetchurl { url = http://hackage.haskell.org/packages/archive/iconv/0.4/iconv-0.4.tar.gz ;
sha256 = " 1 s n q z z 7 h i 2 q a 8 3 m 5 v 3 0 9 8 r s l d b 4 8 5 k z 2 j g g d 3 3 5 q h v j a h c p 4 b j 1 p " ; } ;
2008-03-11 10:18:14 +01:00
} ;
2008-03-13 10:46:12 +01:00
# HAPPS - Libraries
http_darcs = { name = " h t t p - d a r c s " ; p_deps = [ x . network x . parsec ] ;
src = sourceByName " h t t p " ;
#src = fetchdarcs { url = "http://darcs.haskell.org/http/"; md5 = "4475f858cf94f4551b77963d08d7257c"; };
} ;
syb_with_class_darcs = { name = " s y b - w i t h - c l a s s - d a r c s " ; p_deps = [ x . template_haskell x . bytestring ] ;
src =
# fetchdarcs { url = "http://happs.org/HAppS/syb-with-class"; md5 = "b42336907f7bfef8bea73bc36282d6ac"; };
sourceByName " s y b _ w i t h _ c l a s s " ; # { url = "http://happs.org/HAppS/syb-with-class"; md5 = "b42336907f7bfef8bea73bc36282d6ac"; };
} ;
happs_data_darcs = { name = " H A p p S - D a t a - d a r c s " ; p_deps = [ x . base x . mtl x . template_haskell x . syb_with_class_darcs x . haxml x . happs_util_darcs x . regex_compat x . bytestring x . pretty x . binary ] ;
src = sourceByName " h a p p s _ d a t a " ; # fetchdarcs { url = "http://happs.org/repos/HAppS-Data"; md5 = "10c505dd687e9dc999cb187090af9ba7"; };
} ;
happs_util_darcs = { name = " H A p p S - U t i l - d a r c s " ; p_deps = [ x . base x . mtl x . hslogger x . template_haskell x . array x . bytestring x . old_time x . process x . directory ] ;
src = sourceByName " h a p p s _ u t i l " ; # fetchdarcs { url = "http://happs.org/repos/HAppS-Util"; md5 = "693cb79017e522031c307ee5e59fc250"; };
} ;
happs_state_darcs = { name = " H A p p S - S t a t e - d a r c s " ; p_deps = [ x . base x . haxml
x . mtl x . network x . stm x . template_haskell x . hslogger
x . happs_util_darcs x . happs_data_darcs x . bytestring x . containers
x . random x . old_time x . old_locale x . unix x . directory x . binary ] ;
src = sourceByName " h a p p s _ s t a t e " ;
#src = fetchdarcs { url = "http://happs.org/repos/HAppS-State";
# md5 = "956e5c293b60f4a98148fedc5fa38acc";
# };
} ;
# happs_plugins_darcs = { name="HAppS-plugins-darcs"; p_deps=[ x.base x.mtl x.hslogger x.happs_util_darcs x.happs_data_darcs x.happs_state_darcs x.containers ];
#[>src = fetchdarcs { url = "http://happs.org/repos/HAppS-Plugins"; md5 = "693cb79017e522031c307ee5e59fc250"; };
# src = bleedingEdgeRepos.sourceByName "happs_plugins";
# };
# there is no .cabal yet
#happs_smtp_darcs = { name="HAppS-smtp-darcs"; p_deps=[];
#src = fetchdarcs { url = "http://happs.org/repos/HAppS-smtp"; md5 = "5316917e271ea1ed8ad261080bcb47db"; };
#};
happs_ixset_darcs = { name = " H A p p S - I x S e t - d a r c s " ; p_deps = [ x . base x . mtl
x . hslogger x . happs_util_darcs x . happs_state_darcs x . happs_data_darcs
x . template_haskell x . syb_with_class_darcs x . containers ] ;
src = sourceByName " h a p p s _ i x s e t " ;
#src = fetchdarcs { url = "http://happs.org/repos/HAppS-IxSet";
#md5 = "fa6b24517f09aa16e972f087430967fd";
#tag = "0.9.2";
# no tag
#md5 = "fa6b24517f09aa16e972f087430967fd";
#};
} ;
happs_server_darcs = { name = " H A p p S - S e r v e r - d a r c s " ; p_deps = [ x . haxml x . parsec x . mtl
x . network x . regex_compat x . hslogger x . happs_data_darcs
x . happs_util_darcs x . happs_state_darcs x . happs_ixset_darcs x . http_darcs
x . template_haskell x . xhtml x . html x . bytestring x . random
x . containers x . old_time x . old_locale x . directory x . unix ] ;
#src = fetchdarcs { url = "http://happs.org/repos/HAppS-HTTP"; md5 = "e1bb17eb30a39d30b8c34dffbf80edc2"; };
src = sourceByName " h a p p s _ s e r v e r " ;
} ;
# we need recent version of cabal (because only this supports --pkg-config properly) Thu Feb 7 14:54:07 CET 2008
# cabal_darcs is added to propagatedBuildInputs automatically below
cabal_darcs =
{ name = cabal_darcs_name ; p_deps = with ghc . core_libs ; [ base rts directory process pretty containers filepath ] ;
src = sourceByName " c a b a l " ;
#fetchdarcs { url = "http://darcs.haskell.org/cabal"; md5 = "8b0bc3c7f2676ce642f98b1568794cd6"; };
} ;
2008-03-11 10:18:14 +01:00
} ;
2008-03-13 10:46:12 +01:00
#srcs_only = let x = pkgs; in map (y : y.src ) [ x.happs_util_darcs x.happs_data_darcs x.syb_with_class_darcs x.http_darcs
# x.happs_server_darcs x.happs_ixset_darcs x.happs_plugins_darcs x.happs_server_darcs ];
toDerivation = attrs : with attrs ;
# result is { mtl = <deriv>;
addHasktagsTaggingInfo ( ghcCabalDerivation {
inherit ( attrs ) name src ;
propagatedBuildInputs = p_deps ++ ( lib . optional ( attrs . name != cabal_darcs_name ) derivations . cabal_darcs ) ;
srcDir = if attrs ? srcDir then attrs . srcDir else " . " ;
# add cabal, take deps either from this list or from ghc.core_libs
pass = if attrs ? pass then attrs . pass else { } ;
} ) ;
derivations = with lib ; builtins . listToAttrs ( lib . concatLists ( lib . mapRecordFlatten
( n : attrs : let d = ( toDerivation attrs ) ; in [ ( nv n d ) ( nv attrs . name d ) ] ) pkgs ) ) ;
} . derivations