Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at netboot-syslinux-multiplatform 282 lines 11 kB view raw
1{ pkgs 2, lib 3, makeWrapper 4, nodejs ? pkgs.nodejs_18 5}: 6 7let 8 fetchElmDeps = pkgs.callPackage ./fetchElmDeps.nix { }; 9 10 # Haskell packages that require ghc 8.10 11 hs810Pkgs = self: pkgs.haskell.packages.ghc810.override { 12 overrides = self: super: with pkgs.haskell.lib.compose; with lib; 13 let elmPkgs = rec { 14 elm = overrideCabal (drv: { 15 # sadly with parallelism most of the time breaks compilation 16 enableParallelBuilding = false; 17 preConfigure = fetchElmDeps { 18 elmPackages = (import ./packages/elm-srcs.nix); 19 elmVersion = drv.version; 20 registryDat = ./registry.dat; 21 }; 22 buildTools = drv.buildTools or [] ++ [ makeWrapper ]; 23 jailbreak = true; 24 postInstall = '' 25 wrapProgram $out/bin/elm \ 26 --prefix PATH ':' ${lib.makeBinPath [ nodejs ]} 27 ''; 28 29 description = "A delightful language for reliable webapps"; 30 homepage = "https://elm-lang.org/"; 31 license = licenses.bsd3; 32 maintainers = with maintainers; [ domenkozar turbomack ]; 33 }) (self.callPackage ./packages/elm.nix { }); 34 35 elmi-to-json = justStaticExecutables (overrideCabal (drv: { 36 prePatch = '' 37 substituteInPlace package.yaml --replace "- -Werror" "" 38 hpack 39 ''; 40 jailbreak = true; 41 42 description = "Tool that reads .elmi files (Elm interface file) generated by the elm compiler"; 43 homepage = "https://github.com/stoeffel/elmi-to-json"; 44 license = licenses.bsd3; 45 maintainers = [ maintainers.turbomack ]; 46 }) (self.callPackage ./packages/elmi-to-json.nix {})); 47 48 elm-instrument = justStaticExecutables (overrideCabal (drv: { 49 prePatch = '' 50 sed "s/desc <-.*/let desc = \"${drv.version}\"/g" Setup.hs --in-place 51 ''; 52 jailbreak = true; 53 # Tests are failing because of missing instances for Eq and Show type classes 54 doCheck = false; 55 56 description = "Instrument Elm code as a preprocessing step for elm-coverage"; 57 homepage = "https://github.com/zwilias/elm-instrument"; 58 license = licenses.bsd3; 59 maintainers = [ maintainers.turbomack ]; 60 }) (self.callPackage ./packages/elm-instrument.nix {})); 61 62 inherit fetchElmDeps; 63 elmVersion = elmPkgs.elm.version; 64 }; 65 in elmPkgs // { 66 inherit elmPkgs; 67 68 # We need attoparsec < 0.14 to build elm for now 69 attoparsec = self.attoparsec_0_13_2_5; 70 71 # aeson 2.0.3.0 does not build with attoparsec_0_13_2_5 72 aeson = self.aeson_1_5_6_0; 73 74 # elm-instrument needs this 75 indents = self.callPackage ./packages/indents.nix {}; 76 77 # elm-instrument's tests depend on an old version of elm-format, but we set doCheck to false for other reasons above 78 elm-format = null; 79 }; 80 }; 81 82 # Haskell packages that require ghc 9.2 83 hs92Pkgs = self: pkgs.haskell.packages.ghc92.override { 84 overrides = self: super: with pkgs.haskell.lib.compose; with lib; 85 let elmPkgs = rec { 86 /* 87 The elm-format expression is updated via a script in the https://github.com/avh4/elm-format repo: 88 `package/nix/build.sh` 89 */ 90 elm-format = justStaticExecutables (overrideCabal (drv: { 91 jailbreak = true; 92 93 description = "Formats Elm source code according to a standard set of rules based on the official Elm Style Guide"; 94 homepage = "https://github.com/avh4/elm-format"; 95 license = licenses.bsd3; 96 maintainers = with maintainers; [ avh4 turbomack ]; 97 }) (self.callPackage ./packages/elm-format.nix {})); 98 }; 99 in elmPkgs // { 100 inherit elmPkgs; 101 102 # Needed for elm-format 103 avh4-lib = doJailbreak (self.callPackage ./packages/avh4-lib.nix {}); 104 elm-format-lib = doJailbreak (self.callPackage ./packages/elm-format-lib.nix {}); 105 elm-format-test-lib = self.callPackage ./packages/elm-format-test-lib.nix {}; 106 elm-format-markdown = self.callPackage ./packages/elm-format-markdown.nix {}; 107 108 # elm-format requires text >= 2.0 109 text = self.text_2_0_2; 110 # unorderd-container's tests indirectly depend on text < 2.0 111 unordered-containers = overrideCabal (drv: { doCheck = false; }) super.unordered-containers; 112 # relude-1.1.0.0's tests depend on hedgehog < 1.2, which indirectly depends on text < 2.0 113 relude = overrideCabal (drv: { doCheck = false; }) super.relude; 114 }; 115 }; 116 117 nodePkgs = pkgs.callPackage ./packages/node-composition.nix { 118 inherit pkgs nodejs; 119 inherit (pkgs.stdenv.hostPlatform) system; 120 }; 121 122in lib.makeScope pkgs.newScope (self: with self; { 123 inherit fetchElmDeps nodejs; 124 125 /* Node/NPM based dependencies can be upgraded using script `packages/generate-node-packages.sh`. 126 127 * Packages which rely on `bin-wrap` will fail by default 128 and can be patched using `patchBinwrap` function defined in `packages/lib.nix`. 129 130 * Packages which depend on npm installation of elm can be patched using 131 `patchNpmElm` function also defined in `packages/lib.nix`. 132 */ 133 elmLib = let 134 hsElmPkgs = hs810Pkgs self; 135 in import ./packages/lib.nix { 136 inherit lib; 137 inherit (pkgs) writeScriptBin stdenv; 138 inherit (hsElmPkgs.elmPkgs) elm; 139 }; 140 141 elm-json = callPackage ./packages/elm-json.nix { }; 142 143 elm-test-rs = callPackage ./packages/elm-test-rs.nix { }; 144 145 elm-test = nodePkgs.elm-test // { 146 meta = with lib; nodePkgs.elm-test.meta // { 147 description = "Runs elm-test suites from Node.js"; 148 homepage = "https://github.com/rtfeldman/node-test-runner"; 149 license = licenses.bsd3; 150 maintainers = [ maintainers.turbomack ]; 151 }; 152 }; 153} // (hs810Pkgs self).elmPkgs // (hs92Pkgs self).elmPkgs // (with elmLib; with (hs810Pkgs self).elmPkgs; { 154 elm-verify-examples = let 155 patched = patchBinwrap [elmi-to-json] nodePkgs.elm-verify-examples // { 156 meta = with lib; nodePkgs.elm-verify-examples.meta // { 157 description = "Verify examples in your docs"; 158 homepage = "https://github.com/stoeffel/elm-verify-examples"; 159 license = licenses.bsd3; 160 maintainers = [ maintainers.turbomack ]; 161 }; 162 }; 163 in patched.override (old: { 164 preRebuild = (old.preRebuild or "") + '' 165 # This should not be needed (thanks to binwrap* being nooped) but for some reason it still needs to be done 166 # in case of just this package 167 # TODO: investigate, same as for elm-coverage below 168 sed 's/\"install\".*/\"install\":\"echo no-op\",/g' --in-place node_modules/elmi-to-json/package.json 169 ''; 170 }); 171 172 elm-coverage = let 173 patched = patchNpmElm (patchBinwrap [elmi-to-json] nodePkgs.elm-coverage); 174 in patched.override (old: { 175 # Symlink Elm instrument binary 176 preRebuild = (old.preRebuild or "") + '' 177 # Noop custom installation script 178 sed 's/\"install\".*/\"install\":\"echo no-op\"/g' --in-place package.json 179 180 # This should not be needed (thanks to binwrap* being nooped) but for some reason it still needs to be done 181 # in case of just this package 182 # TODO: investigate 183 sed 's/\"install\".*/\"install\":\"echo no-op\",/g' --in-place node_modules/elmi-to-json/package.json 184 ''; 185 postInstall = (old.postInstall or "") + '' 186 mkdir -p unpacked_bin 187 ln -sf ${elm-instrument}/bin/elm-instrument unpacked_bin/elm-instrument 188 ''; 189 meta = with lib; nodePkgs.elm-coverage.meta // { 190 description = "Work in progress - Code coverage tooling for Elm"; 191 homepage = "https://github.com/zwilias/elm-coverage"; 192 license = licenses.bsd3; 193 maintainers = [ maintainers.turbomack ]; 194 }; 195 }); 196 197 create-elm-app = patchNpmElm 198 nodePkgs.create-elm-app // { 199 meta = with lib; nodePkgs.create-elm-app.meta // { 200 description = "Create Elm apps with no build configuration"; 201 homepage = "https://github.com/halfzebra/create-elm-app"; 202 license = licenses.mit; 203 maintainers = [ maintainers.turbomack ]; 204 }; 205 }; 206 207 elm-review = 208 nodePkgs.elm-review // { 209 meta = with lib; nodePkgs.elm-review.meta // { 210 description = "Analyzes Elm projects, to help find mistakes before your users find them"; 211 homepage = "https://package.elm-lang.org/packages/jfmengels/elm-review/${nodePkgs.elm-review.version}"; 212 license = licenses.bsd3; 213 maintainers = [ maintainers.turbomack ]; 214 }; 215 }; 216 217 elm-language-server = nodePkgs."@elm-tooling/elm-language-server" // { 218 meta = with lib; nodePkgs."@elm-tooling/elm-language-server".meta // { 219 description = "Language server implementation for Elm"; 220 homepage = "https://github.com/elm-tooling/elm-language-server"; 221 license = licenses.mit; 222 maintainers = [ maintainers.turbomack ]; 223 }; 224 }; 225 226 elm-spa = nodePkgs."elm-spa".overrideAttrs ( 227 old: { 228 nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ makeWrapper old.nodejs.pkgs.node-gyp-build ]; 229 230 meta = with lib; nodePkgs."elm-spa".meta // { 231 description = "A tool for building single page apps in Elm"; 232 homepage = "https://www.elm-spa.dev/"; 233 license = licenses.bsd3; 234 maintainers = [ maintainers.ilyakooo0 ]; 235 }; 236 } 237 ); 238 239 elm-optimize-level-2 = nodePkgs."elm-optimize-level-2" // { 240 meta = with lib; nodePkgs."elm-optimize-level-2".meta // { 241 description = "A second level of optimization for the Javascript that the Elm Compiler produces"; 242 homepage = "https://github.com/mdgriffith/elm-optimize-level-2"; 243 license = licenses.bsd3; 244 maintainers = [ maintainers.turbomack ]; 245 }; 246 }; 247 248 elm-pages = nodePkgs."elm-pages".overrideAttrs ( 249 old: { 250 nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ makeWrapper old.nodejs.pkgs.node-gyp-build ]; 251 252 # can't use `patches = [ <patch_file> ]` with a nodePkgs derivation; 253 # need to patch in one of the build phases instead. 254 # see upstream issue https://github.com/dillonkearns/elm-pages/issues/305 for dealing with the read-only problem 255 preFixup = '' 256 patch $out/lib/node_modules/elm-pages/generator/src/codegen.js ${./packages/elm-pages-fix-read-only.patch} 257 ''; 258 259 postFixup = '' 260 wrapProgram $out/bin/elm-pages --prefix PATH : ${ 261 with pkgs.elmPackages; lib.makeBinPath [ elm elm-review elm-optimize-level-2 ] 262 } 263 ''; 264 265 meta = with lib; nodePkgs."elm-pages".meta // { 266 description = "A statically typed site generator for Elm."; 267 homepage = "https://github.com/dillonkearns/elm-pages"; 268 license = licenses.bsd3; 269 maintainers = [ maintainers.turbomack maintainers.jali-clarke ]; 270 }; 271 } 272 ); 273 274 lamdera = callPackage ./packages/lamdera.nix {}; 275 276 elm-doc-preview = nodePkgs."elm-doc-preview".overrideAttrs (old: { 277 nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ old.nodejs.pkgs.node-gyp-build ]; 278 }); 279 280 inherit (nodePkgs) elm-live elm-upgrade elm-xref elm-analyse elm-git-install; 281 }) 282 )